Клуб API Карт

май 2014
Помощь в миграции с 2.0 на 2.1
Александр Павлов
1 мая 2014, 00:17

Добрый всем вечер!

Прошу помочь Разобраться...

 Посмотреть пример

В примере щелкаем по карте и получаем координаты точки и адрес. Вроде всё просто и в 2.0 всё работает, но стоит подключить 2.1, как выдает ошибку и отказывается работать :(

 

Спасибо заранее!

2 комментария
API 2.1,API 2.0
Поиск по Карте
protey2004
1 мая 2014, 01:04

Разрабатываю небольшой скрипт управления метками на карте. В частности, делаю внешний поиск по карте (по адресам и объектам), для чего использую Геокодер (http запрос). Возникла проблема с добавлением метки по найденному адресу.

Собственно, код:

 

 

ymaps.ready(init);
var myMap,
mySearchPlacemark;
function init(){
myMap = new ymaps.Map ("map", {
center: [55.76, 37.64],
zoom: 9,
behaviors: ['default', 'scrollZoom']
}); 

}
// Функция вешается на onclick событие input'a
function addAddress(){
mySearchPlacemark = new ymaps.Placemark([55.270659160010815,38.68370117187498], {
hintContent: 'Москва!',
balloonContent: 'Столица России'
});
myMap.geoObjects.add(mySearchPlacemark);

}


Когда в поле input формы находится адрес с точностью до дома, вызывается функция addAddress по событию onclick, но ничего не происходит. Метка не добавляется. При этом и ошибок нет.

 

В чем может быть проблема?

1 комментарий
метка,события,геокодирование
Размещение 32k меток на карте
nazar-pc
1 мая 2014, 01:53

Мне нужно реализовать отображение одного либо другого набора меток на карте в записимости от масштаба.

При большом масштабе будет показана часть из 32k меток, для меньших масштабов будут показываться другие, заранее просчитанные усредненные метки (кластеризатор с таким количеством не справляется).

Для реализации я решил отслеживать изменение масштаба. Но так как перестраивание кластеризатора с таким количеством точек тяжелая операция (4-15 сек в зависимости от масштаба) я подумал, что можно убирать его с карты перед изменением масштаба, а после, если нужно, добавлять обратно, если масштаб не подходит - отображать другой кластеризатор с меньшим количеством меток.

Но вот никак не понятно из документации как это сделать. Пробовал что-то достать из actionbegin - вообще не понял как он работает, а по сути мне всего лишь нужно узнать что именно за действие началось.


Короче, нужно либо сделать то, что я придумал, либо как-то иначе оптимизировать кластеризатор. Как вариант - у каждой метки есть один параметр, по которому при zoom < 12 их можно склеивать вместе, не рассчитывая больше ничего, и желательно кешировать эту информацию (это если можно переопределить механизм определения того, как кластеризатор определяет какие точки склеивать; в документации этого не сказано, реверс инжиниринт пока не делал на предмет такой возможности).

1 комментарий
кластеризатор,активные области,API 2.1
Странный ответ от геокодера
npab
1 мая 2014, 10:55

Добрый день!

 

Кажется, я заметил баг в ответе от геокодера. Если я делаю запрос на дом, находящийся в регионе РФ (Питер, Ижевск и т.п.), в котором присутствует несколько корпусов, но в запросе я не детализирую это, ответ содержит ветку "AdministrativeArea". Примеры: 

Санкт-Петербург, пр. Обуховской обороны, д. 269

Ижевск, ул. Университетская, д. 201 

НО!

Почему-то если я спрашиваю про адрес в Москве (???), который тоже содержит корпуса, ветка "AdministrativeArea" не возвращается!

Москва, ул. Маршала Новикова, д. 2 


В связи с этим, вопрос к разработчикам: это баг? Или так и должно быть? И если да, как мне скорректировать в таком случае запрос? Хотелось бы получать доступ к региону. 

2 комментария
геокодирование
Не срабатывает клик на метке в Chrome
npab
2 мая 2014, 19:30

Добрый день!

Иммется код:

 

 $.getScript('http://api-maps.yandex.ru/2.1/?lang=ru_RU', function () {
     var myMap;
     ymaps.ready(function () {
         var gp_1 = 37.72;
         var gp_2 = 55.8;
         if (document.getElementById('my_address_map').hasAttribute('gp_1')) {
             gp_1 = document.getElementById('my_address_map').getAttribute('gp_1');
         }
         if (document.getElementById('my_address_map').hasAttribute('gp_2')) {
             gp_2 = document.getElementById('my_address_map').getAttribute('gp_2');
         }
         myMap = new ymaps.Map("my_address_map", {
             center: [gp_2, gp_1],
             zoom: 10,
             controls: ['zoomControl', 'searchControl']
         });
         $("input:radio").each(function () {
             if (this.hasAttribute('gp_2') && this.hasAttribute('gp_1')) {
                 var gp_1 = this.getAttribute('gp_1');
                 var gp_2 = this.getAttribute('gp_2');
                 var address = $(this).closest("div").next("label").text();
                 var description = $(this).closest("div").next("label").attr("title");
                 add_placemark(myMap, gp_2, gp_1, address, description);
             }
         });
         function add_placemark(myMap, gp_1, gp_2, address, description) {
             myPlacemark = new ymaps.Placemark([gp_1, gp_2], {
                 // Чтобы балун и хинт открывались на метке, необходимо задать ей определенные свойства.
                 balloonContentHeader: address,
                 balloonContentBody: description,
                 hintContent: address
             });
             myPlacemark.events.add("click", function () {
                 alert('Hello World!');
             });
             myMap.geoObjects.add(myPlacemark);
             myPlacemark.events.add('click', function () {
                 alert('О, событие!');
             });
         }
         function selectOffice(objLink) {
             alert('true!');
             return false;
         }
         $("input:radio").change(function () {
             var gp_1 = this.getAttribute('gp_1');
             var gp_2 = this.getAttribute('gp_2');
             myMap.setCenter([gp_2, gp_1]);
             myMap.setZoom(16, {
                 smooth: true
             });
             jumpTo('my_address_map');
         });
     });
 });

 

Упорно не выдает алерт при клике на балуна! 

1 комментарий
метка,API 2.1,события
Кластеризация зависает
bonart-maxim
2 мая 2014, 21:45

Если в этом примере из песочницы http://api.yandex.ru/maps/jsbox/2.1/clusterer_create
в массив points добавить 350 объектов, затем нажать автообновление и начать приближать, то на определенном шаге возникает ошибка. В консоле это выглядит так: Uncaught TypeError: Cannot read property '0' of undefined

Почему она возникает и как с ней бороться

1 комментарий
кластеризатор,API 2.1
Баг в 2.1 в control.ListBox
Артём Березин
3 мая 2014, 07:06

Столкнулся, когда пытался переехать с 2.0 на 2.1

Баг заглючается в том, что нельзя добавлять ListBoxItem в ListBox после создания.

Возможно они просто не рендерятся. 

Точнее, если сразу добавить, то все ОК. Но если чуть погодя, то не получается (а у меня они загружаются ajax-запросом)

 

Проще всего продемонстрировать примером из песочницы:

Исходник: http://api.yandex.ru/maps/jsbox/2.1/list_box_layout

Модифицированная версия: http://jsbin.com/hawip/1/edit?js,output (изменения сразу после инстанцирования listBox)

        // Пытаюсь добавить пункты отложено
        setTimeout(function(){
          listBox.add(listBoxItems[0]);
          listBox.add(listBoxItems[1]); 
        }, 100); 

 

5 комментариев
API 2.1,элементы управления,API 2.0,контролы,список
Маршрутизация с точками
markin-yu
5 мая 2014, 12:39

Доброго дня.

Подскажите, реализуемо ли подобное? Если да, то какими средствами.
Строим маршрут по двум точкам. и показываем на карте только те, объекты из бд, координаты которых соответствуют маршруту.
Сложность в проверке координат на принадлежность к маршруту

2 комментария
маршрутизация
Объекты в радиусе 10 км.
Павел С.
5 мая 2014, 15:45

Доброго дня! Столкнулся с задачей, но не знаю
как ее решить. Имеются балуны, есть некая
точка. Как вывести балуны в радиусе 10 км от
этой точки?

1 комментарий
метка,API 2.1,круг
EN версия народной карты
Роман
5 мая 2014, 16:39

В общем столкнулся с такой проблемой, что нужно поставить EN версию народной карты, но вместо карты выводиться это:

Подключаю так:

 

<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.full&amp;mode=release&amp;lang=en_US&amp;coordorder=longlat" type="text/javascript"></script>

 

Две версии:

Русская, которая отображается нормально.

Английская в которой не хочет работать.

В чем может быть проблема? За ранее спасибо.

1 комментарий
народная карта,API 2.1,локализация
variable и ymaps.Placemark
Алексей Сысоев
5 мая 2014, 19:17

если у меня в js есть var coord = '30.0000, 40.0000' к примеру и ставлю эту переменную сюда   myPlacemark1 = new ymaps.Placemark([coord])  то кордината не считывается и у меня загружается пустая карта, а если так   myPlacemark1 = new ymaps.Placemark([53.731538, 91.440641]) то все ок. Проблема в том что мне нужно получить кординату которая присвоена обьекту по клику, по этому нужен var. Как можно решить эту проблему?

2 комментария
Javascript,координаты,API 2.1
Использовать яндекс карты в PhoneGap возможно ?
motoroller198311
5 мая 2014, 20:57

Сдела мобильное приложение (PhoneGap и JQuery mobile).

Использую карты Yandex, если загружаю на сайт (то есть мобильную версию с телефона), то все работает, если экспортирую через phonegap и пытаюсь запустить в приложении (android) ничего не грузится.

Подскажите реально ли заставить связку работать.

3 комментария
API 2.1,PhoneGap
Как сохранить карту в файл программо?
prozorov.is
6 мая 2014, 08:56

Доброе утро!

 

На карту нанесены различные объекты - метки со своими картинками, многоугольники и т.д. Этих объектов нет в static-api.

 

Как можно сохранить выведенное изображение в файл? 

3 комментария
Совместить kml от google и яндекс карты
blagapro
6 мая 2014, 10:01

Всем привет. Есть задача - на сайте хочу сделать сборник маршрутов для поездок на внедорожном мотоцикле (через лес, поля и т.д.)

Для начала я нашел gps трекер на свой телефон (Samsung Galaxy Nexus офф. прошифка) это трекер от google "Мои треки"

Там есть отличная возможность записывать и экспортировать треки в kml или gpx формат.

Я почитал документацию и посмотрел песочницу по теме. Кое что получается но как то кривовато. 

Вот как это выглядит на оригинальных гугл картах 

Вот как это выглядит на Яндекс картах с KML форматом

Вот как это выглядит на Яндекс картах с GPX форматом

Как видно не очень то презентабельно. Что можете посоветовать? Как лучше поступить?

 

И еще если в примере изменить координаты (или даже не в примере а впесочнице) то мой google chrome просто начинает сьедать всю оперативку и половину процессора и ничего не отображает. В ИЕ 11 показывает просто заглушку с логотипом яндекса.

Как решить данную проблему?

Всем заранее большое спасибо!

4 комментария
KML,API 2.1,координаты,GPX
Можно ли получить ссылку на карту с нанесенными объектами?
prozorov.is
6 мая 2014, 12:00

На карту выведены объекты (метки, нарисованные точки, мноугольники и т.д).

Можно ли это представить в текстовом виде (выполнить сериализацию в XML) так, чтобы вставим куда-либо это текст открыть карту с нарисованными на ней объектами?

3 комментария
координаты,YMapsML
как получить владельца лейаута?
elmigo
6 мая 2014, 12:22

допустим создали метку

var newmark =  new ymaps.Placemark(coords, {}, {balloonContentLayout: BalloonContentLayout});

на базе своего предопределенного лейаута

    BalloonContentLayout = ymaps.templateLayoutFactory.createClass(
        hmtlCode,
        {
            build: function () {
                this.constructor.superclass.build.call(this);
            },

            AnyMethod: function (e) {
                //
            }
        }
    );

как теперь из AnyMethod получить доступ к своему владельцу Placemark?

3 комментария
метка,API 2.1,балун,макеты
Поиск без геокодера в собственном поле
Куприянов Юрий
6 мая 2014, 14:28

Добрый день!

В 2.1 есть элемент управление "Поиск", с помошью него можно найти адрес на карте и при этом, как я понимаю, запрос геокодера не используется.

Задача: Найти на карте адрес и установить центр карты на найденный адрес при этом не отправляя запрос геокодеру, что бы не превышать лимит, т.к. пользователь может искать по карте много раз. После чего пользователь ставит метку на карту, и только после сохранения формы обращатся к геокодеру для получения координат метки. 

2 комментария
API 2.1,элементы управления,поиск,контролы,геокодирование
Помощь в создании своей карты на базе API Яндекс.Карт
Алексан
6 мая 2014, 17:58

имею в распоряжении несколько отрисованых карт размером 5000 - 7000 px.

Решил их внедрить на движок Яндекс карт,  спешу отметить опыта в прорамиронании нету никакого,  все делал по мануалам.

Нашел тему в сети http://webmap-blog.ru/yandex-maps/sozdanie-sobstvennoj-karty-s-ispolzovaniem-api-yandeks-kart-2-x . скачал программку нарезал фотку на тайлы залил на сайт вот что получилось. http://test.anapa.info/gp/map.html

Теперь о помощи. 

1) Как отображать карту только в ее границах?
2) убрать лишний зум - имею ввиду чтобы я зумил только до определеных границ. Чтоб было понятнее, мне ненужно чтобы я видел подложку только карту. 
 исходник карты тут  - http://yadi.sk/d/nweuymitPGawA если нужно
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<head>

    <title>Генплан МО Анапа</title>

    <script src="http://api-maps.yandex.ru/1.1/index.xml?key=ADtDpE0BAAAA1cU1IgIAPWClUB9s-IiOj9P6iiRLW4MT2WIAAAAAAAAAAACMdgGzWkeumHtgPQ7bAvyBjoO8xA==" type="text/javascript"></script>

    <script type="text/javascript">

        window.onload = function () {

            var options = {

                    tileUrlTemplate: "./%z/tile-%x-%y.jpg",

                    controls: {

                        typeControl: false,

                        miniMap: false,

                        toolBar: false,

                        scaleLine: false

                    },

                    scrollZoomEnabled: true,

                    mapCenter: new YMaps.GeoPoint(-174.745788574219, 84.5401399840571),

                    backgroundMapType: YMaps.MapType.NONE,

                    mapZoom: 10,

                    isTransparent: true,

                    smoothZooming: true,

                    layerKey: "my#layer",

                    mapType: {

                        name: "Генплан",

                        textColor: "#000000"

                    },

                    copyright: ""

                },

                map = new YMaps.Map(document.getElementById("YMapsID")),

                myData = new YMaps.TileDataSource(options.tileUrlTemplate, options.isTransparent, options.smoothZooming);

 

            myData.getTileUrl = function (tile, zoom) {

                return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom);

            }

 

            var MyLayer = function () {

                return new YMaps.Layer(myData);

            }

            YMaps.Layers.add(options.layerKey, MyLayer);

 

            var mapLayers = options.backgroundMapType ? options.backgroundMapType.getLayers() : [],

                myMapType = new YMaps.MapType(YMaps.jQuery.merge(mapLayers, [ options.layerKey ]), options.mapType.name, { textColor: options.mapType.textColor });

 

            map.setCenter(options.mapCenter, options.mapZoom, myMapType);

            if (options.copyright) {

                map.addCopyright(options.copyright);

            }

 

            if (options.controls.typeControl) {

                map.addControl(new YMaps.TypeControl([ myMapType, YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID ], [1, 2, 3]));

            }

         

            if (options.controls.miniMap) {

                map.addControl(new YMaps.MiniMap());

            }

            if (options.controls.toolBar) {

                map.addControl(new YMaps.ToolBar());

            }

            if (options.controls.scaleLine) {

                map.addControl(new YMaps.ScaleLine());

            }

            if (options.scrollZoomEnabled) {

                map.enableScrollZoom();

            }

            map.addControl(new YMaps.Zoom());

        }

    </script>

</head>

<body>

    <div id="YMapsID" style="width:100%;height:800px"></div>

</body>

</html>

 

 

перепробывал что мог перечитал кучу всего не могу понять, помогите мне и всем таким как я.  

Нет комментариев
слои,тайлы,API 1.x
Множественное геокодирование
Сергей Mitroshn
7 мая 2014, 09:33

Есть задача вывода списка адресов в виде меток на Яндекс.Картах.

Адреса хранятся во внешней системе и периодически изменяются. Решено использовать следующий алгоритм:

1. Во внешней системе (не web) собирается список адресов, формируется запрос на геокодирование;

2. Результаты геокодирования сохраняются на сервер в формате JSON.

3. Клиент открывает страничку с картой, данные о координатах читаются из файла JSON и выводятся на карту.

С п.3 разобрался. Данные загружаются из файла на карту без проблем.

 

Встал вопрос с множественным геокодированием. Решил делать его на стороне сервера (как описано в документации). Но для множественного геокодирования необходим специальный Node.js-модуль (multi-geocode), который надо как то подключить (npm install multi-geocoder). Этот вариант выглядит несколько замороченным: нужно поставить менеджер пакетов, потом установить модуль (я сам не сетевой программист, поэтому для меня все это несколько непонятно). Хотя может я что то не понимаю и можно обойтись без установки менеджера пакетов?

Вторым вариантом является использование модуля из примера. Но метод geocode из данного примера возвращает коллекцию объектов, а не описание в формате GeoJSON или XML. И как эту коллекцию сохранить в файл я ума не приложу. Может кто то подскажет?

5 комментариев
геокодирование
Перемещение в точку, заданную кнопкой.
gother72
7 мая 2014, 11:56

Собственно, подсмотрел идею на одном сайте. Суть такая: при нажатии на кнопку карта плавно и красиво перемещается по заданным координатам и открывает балун (?) точки. Не подскажете как это реализовано?

Пример того что подсмотрел: http://apple4you.ru/contacts/   Кнопки сверху.

1 комментарий
API 2.1