Клуб API Карт

Это клуб для общения про API Яндекс.Карт. Мы ждём тех, кто хочет задавать вопросы про API, кто готов давать ответы на вопросы других пользователей, а также авторов желающих анонсировать свои проекты, созданные с использованием API Яндекс.Карт. Также в клубе публикуются новости проекта.

Общая информация
Полезное

Прочитайте, прежде чем создать новую тему

Количество точек после обработки setFilter()
Виталий
вчера, 17:51

Подскажите как посчитать кол-во элементов после обработки setFilter().
Нужно считать все отфильтрованные метки с градацией по свойству, а не в видимой области карты.  
https://jsfiddle.net/b4ns02vd/6

город = 2,
поселок  = 2,
деревня = 0

Подскажите куда копать.

Нет комментариев
setFilter
Как зная objectId из массива элементов objectManager получить координаты объекта?
tkachevanse
вчера, 16:59

Добрый день.

Подскажите, как зная objectId из массива элементов objectManager получить координаты объекта?

Хочу в итоге центровать карту по клику на маркер.

Нет комментариев
Как создать кластер в Yandex Map Kit?
rebelint
вчера, 15:39

Добрый день! 

Используем SDK YMK для Android

dependencies {
    ///.....
    compile 'ru.yandex:yandexmapkit:2.5.4@aar'
}

не могу найти функцию кластеризации(объединения в группы). Подкажите, для ее реализации нужно перейти с sdk на js ?

Нет комментариев
MapKit,maps
Как распознать, из какой части шаблона иконки метки пришел клик?
Melody Nelson
вчера, 15:30

Есть кастомный шаблон иконки, при клике на определенный элемент которого хотелось бы игнорировать стандартный обработчик клика по этой иконке. Как их различить?

В objectManager.objects.events.add("click", function (e){}) внутри e можно найти target (e._sourceEvent.originalEvent.domEvent.originalEvent.target), но это всегда ".ymaps-2-1-55-events-pane", перехватывающий событие. Возможно ли как-то получить элемент шаблона, по которому кликнули, в обход events-pane?

Нет комментариев
event,templateLayoutFactory,iconLayout,click
Добавление на карту объектов, попадающих в область видимости (добавить массив данных)
Анастасия Жолудева
вчера, 14:27

Мне нужно загружать те объекты, которые входят в область видимость. Нашла пример в документации https://tech.yandex.ru/maps/jsbox/2.1/show_visible... Не понятен один момент. У меня массив данных типа 

[[55.765326, 37.627735],[55.637366, 37.719745], ...]

Не понятно как его применить к этой части кода 

// Создадим объекты на основе JSON-описания геометрий.

var objects = ymaps.geoQuery([{
            type: 'Point',
            coordinates: [55.73, 37.75]
        }, {
            type: 'Point',
            coordinates: [55.10, 37.45]
        }, {
            type: 'Point',
            coordinates: [55.25, 37.35]
        }, {
            type: 'Point',
            coordinates: [55.25, 67.35]
        }]);
Нет комментариев
Из-за ошибки JS API 2.1 не загружается под Googlebot.
easy-money5
вчера, 13:02

Проблема появилась где-то 1,5-2 года назад.

При просмотре страниц с картами через Google Webmasters -> Сканирование -> Просмотр как Google ресурс https://api-maps.yandex.ru/2.1.22/?load=package.full&lang=ru_RU помечается как "временно недоступный". И на скриншоте страницы карта отсутствует.

При проверке через Chrome -> Dev Tools, Network Conditions -> User agent -> Googlebot выдается сообщение об ошибке:
 

?load=package.full&lang=ru_RU&onload=InitMap:3 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
    at Object.<anonymous> (?load=package.full&lang=ru_RU&onload=InitMap:3)
    at Object.<anonymous> (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at ?load=package.full&lang=ru_RU&onload=InitMap:2
    at k (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at j (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at k (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at E (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at Array.w (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at r (?load=package.full&lang=ru_RU&onload=InitMap:2)
    at a (?load=package.full&lang=ru_RU&onload=InitMap:2)
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:3
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:2
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:2
k @ ?load=package.full&lang=ru_RU&onload=InitMap:2
j @ ?load=package.full&lang=ru_RU&onload=InitMap:2
k @ ?load=package.full&lang=ru_RU&onload=InitMap:2
E @ ?load=package.full&lang=ru_RU&onload=InitMap:2
w @ ?load=package.full&lang=ru_RU&onload=InitMap:2
r @ ?load=package.full&lang=ru_RU&onload=InitMap:2
a @ ?load=package.full&lang=ru_RU&onload=InitMap:2
postMessage (async)
u @ ?load=package.full&lang=ru_RU&onload=InitMap:2
nextTick @ ?load=package.full&lang=ru_RU&onload=InitMap:2
define @ ?load=package.full&lang=ru_RU&onload=InitMap:2
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:2
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:3
(anonymous) @ ?load=package.full&lang=ru_RU&onload=InitMap:5

Если копнуть глубже, то видно что ошибка возникает из-за неопредленной переменной, кажется, "env".

Проблема негативно влияет на ранжирование страниц.

Нет комментариев
Обновление данных в ObjectManager через ajax по запросу пользователя? установка данных для макета балуна
web-gaf
13 октября, 14:03

Пример

Несколько раз нажмите на кнопку.

Для добавление на карту объектов пользуюсь ObjectManager
В процессе пользования картой мне необходимо удалять все объекты из менеджера а затем добавлять в него объекты с новыми координатами или с теми которые уже были отображены    на карте, затем сделать центрирование карты по и меющимся объектам в менеджере, и отобразить их все в видимой части карты - setNewObject();


если добавляю объекты которые уже были на карте, но у них будут новые значенгия полей iconContent и balloonContentBody, получается что метка на карте появляется со старым iconContent но при клике балун будет с новым balloonContentBody, а если перед добавлением сделать зум карты, то некоторые объекты сразу неотобразяться, а появяться после зума карты

Подскажите пожалуста как исправить перечисленные особенности поведения карты?

В скрипте контент метки кластера задают так                                jQuery(this.getParentElement()).find(".quantity_vnedr").html(quantitySystem);    

Пробовал так
geoObject.properties.iconContent = quantitySystem;
текст метки меняеться при наведении

Как задавать новые значения для макета?
                    


           

4 комментария
Определение меток попадающих в видимую область карты и получение их ID
vikktor.com
13 октября, 10:43

Решаю задачу с определением меток попадающих в видимую область карты. При изменении масштаба карты, мне надо обновлять список на список состоящий только из объектов которые видны на карте. Для создания меток использую ObjectManager (с кластеризацией)

Получить объекты я могу 2-мя способами, но у обоих пока есть недостатки, которые не позволяют верно решить задачу.

Вариант 1.

// Определение объектов попадающих в видимую область карты
    myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){
        ymaps.geoQuery(objectManager.objects).searchInside(myMap).each(function (object) {
            console.log(object);
        });
    });

В этом варианте проблема в том, что geoQuery корректно отдает список меток в видимой области, но я не могу получить ID метки, который я назначал про создании списка objectManager.objects, чтобы потом сравнить со своим списком материалов из базы данных. ID метки у меня совпадает с ID материалов.

Вариант 2.

// Определение объектов попадающих в видимую область карты
    myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){
        objectManager.objects.each(function (object) {
          var objectState = objectManager.getObjectState(object.id);
          if (objectState.isShown) {
            console.log(object.id);
          }
        });
    });

Во этом варианте я могу получить список ID видимой области, но есть другая проблема. В видимую область попадают также объекты, которые на самом деле в видимой области не видны, но находятся где-то рядом, что неправильно. Приложил скриншот.

Подскажите пожалуйста, как правильно получить назначенные при создании массива объектов ID? Либо как правильно заставить работать isShown? Или может есть другой более правильый вариант?

Спасибо.

Нет комментариев
ObjectManager,GeoQueryResult,области видимости,objectState.isShown
Не работаею карты на iPad Air iOS 9.3
Николай Тихонов
12 октября, 23:09

Здравствуйте.

Подскажите, пожалуйста, с ситуацией. Есть планшет iPad Air с системой iOS 9.3. На нём не работают JS API v2.1 карты. Сам контейнер есть, а в нём пустота.

На более новых яблочных устройствах проблем нету, как и нету проблем с любыми другими устройствами.

Месяца два назад, на этом же устройстве с картами всё было нормально, а за это время я код, отвечающий за карты не менял, значит, изменения были на стороне API.

В чём может быть дело и как можно это победить?

6 комментариев
js,iOS,API Яндекс карт,API 2.1
Обновление маршрута при перетаскивании опорных точек
aiza-piraiza
12 октября, 13:12

Здравствуйте, использую мультимаршрут из примера, разрешил перетаскивание опорных точек, также навесил событие 
 multiRoute.model.events.add("requestsuccess", function(){});
ну и там в функции некие действия. Подскажите, пожалуйста, как сделать так, чтобы маршрут обновлялся в тот момент, когда пользователь уже "отпустит" метку, а то он постоянно обновляется пока пользователь держит метку и таскает ее по карте. Тайм аут не хочется вешать, может есть более правильное решение?

1 комментарий
Вывод всех объектов кластера
Виктор Исадов
11 октября, 15:08

Добрый день. Есть задача: при клике на метку кластера нужно выводить содержимое с таблицей всех объектов в кластере. На данный момент используется "clusterBalloonContentLayout: 'cluster#balloonCarousel'", но нужно выводить все объекты сразу.

Как этого добиться через ymaps.templateLayoutFactory.createClass? В документации не нашёл что-то для перебора всех объектов через "for".

3 комментария
API Яндекс.Карт на осенних конференциях
ymapsapi
11 октября, 14:55

В разгар осени разработчики API Яндекс.Карт выступят сразу на трех IT конференциях.

14 октября Всеволод Шмыров выступит на ежегодной конференции Юкон в Саратове. Он расскажет об особенностях и трудностях разработки API и задачах, которые каждый день решают наши разработчики.
Сайт конференции: http://youcon.ru

21 октября на Web Standards Days в Минске Андрей Роенко расскажет, как мы научились превращать HTML в PNG на клиенте и как это помогло сделать новые курсоры для редактора маршрутов. 
Сайт конференции:  https://wsd.events/2017/10/21/

21 октября также состоится Я.Субботник по разработке интерфейсов. В этот раз он пройдет в Казани. На Я.Субботнике Всеволод Шмыров расскажет, как обстоят дела с сенсорными событиями в вебе и как уживаются две утверждённые спецификации сегодня.
Страница мероприятия: https://events.yandex.ru/events/yasubbotnik/21-october-2017/

Нет комментариев
новости,анонсы,мероприятия,WSD,Я.Субботник,Юкон
Серверная кластеризация
nick.shnobilyans
11 октября, 14:02

Привет всем, задача следующая — есть api, возвращающее мне массив точек в формате:

  "items": [
    {
      "type": "customerCenter",
      "address": "г. Новокузнецк, Кемеровская область, ул. Ленина, д. 1",
      "city": "Новокузнецк, Кемеровская область",
      "cityId": 65406,
      "location": {
        "lat": 53.776393,
        "lng": 87.202663,
        "distanceToTheCenter": 3116837.9210691885
      },
      ...
    },
    ...
  ]

Я дергаю это API не на прямую, а через свой сервис на NodeJS. 

При использовании LoadObjectManagerʼa на фронт приходит слишком много лишней информации. Поэтому переписываю на RemoteObjectManager.  Нашел статью на хабре и пример на реализацию на node — https://github.com/dimik/geohosting-server. Но не совсем разобрался как адаптировать этот пример для моего кейса. Вопрос: как кластеризовать точки в массиве?

3 комментария
Кастомный балун: не работает autoPan
Виктор Свириденко
11 октября, 10:18

Салют. Случился затык, прошу знатоков подсказать, куда копать дальше. Суть проблемы: не работает autoPan у балунов, использующих кастомный макет, созданный с помощью фабрики макетов.

Пример: https://jsfiddle.net/36938ftz/.

После первого запуска карта смещается к открывшемуся балуну — это ожидаемо. Теперь раскомментируйте строку:

//layout: layout

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

Баг или фича? В документации для конструктора Balloon (https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Balloon-docpage/) опция autoPan — по умолчанию  true, и я её не меняю. Со стандартным балуном всё прокатывает. О несовместимости опций autoPan и layout — ни слова. Принудительный вызов autoPan не даёт результата, даже через then().

1 комментарий
Balloon,templateLayoutFactory,autoPan
searchControl как удалить поисковую стрроку
evilowl123
11 октября, 09:32

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

1 комментарий
SearchControl API Yandex map,удаление,SearchControl
Как построить маршрут для грузовика по Москве, чтобы избежать въезда внутрь ТТК
hmelek1980
11 октября, 01:09

Заранее извиняюсь, если пропустил данную опцию в мануале. Подскажите, возможно ли как-то обработать ситуацию из заголовка сообщения?

1 комментарий
Открыть balloon Polygon если в url параметр
Дмитрий Ращупкин
11 октября, 00:48

Возможно ли реализовать например если человек перешел по ссылке mysite.ru?id=24 то открылся balloon Polygon с индификатором 24 (Polygon например 50 на карте)

4 комментария
Firefox Tracking Protection блокирует загрузку карты с enterprise.api-maps.yandex.ru
Игорь Адаменко
10 октября, 22:12

Привет!

Столкнулись с тем, что в режиме инкогнито в Фаерфоксе не загружается карта. В консоли следующее:

Loading failed for the <script> with source “https://enterprise.api-maps.yandex.ru/2.1.27/?load=package.full&lang=ru-RU&mode=release&apikey=xxx&onload=someFn”.

В адресной строке появляется иконка, нажав на которую можно выключить Tracking Protection, и тогда загрузка проходит успешно. Сами ребята из Мозиллы при этом пишут, что:

Firefox will ship with a list of sites which have been identified as engaging in cross-site tracking of users. When tracking protection is enabled, Firefox will block content from sites in the list.

Правильно ли я понимаю, что с этим ничего не поделаешь, и картами просто не получится воспользоваться в режиме инкогнито в ФФ? Или есть какие-то обходные пути?

1 комментарий
Firefox,ошибка,загрузка АПИ
API Яндекс.Карт версия 2.1.56
ymapsapi
10 октября, 17:46

Мы выпустили новую версию API Яндекс.Карт 2.1.56. Для её подключения используйте адрес: api-maps.yandex.ru/2.1.56/?lang=ru_RU

Мы уже переключили на новую версию api-maps.yandex.ru/2.1-dev/?lang=ru_RU и вскоре опубликуем обновленную документацию. 

Добавлено:
- Новый контрол панели маршрутизации для добавления несворачиваемой панели на карту.
- Возможность настройки видов транспорта доступных в панели маршрутизации.
- Метод 'routePanel.geolocate()' для заполнения точек маршрута местоположением пользователя.
- Пресеты меток с новыми иконками.

Изменено:
- Свойство 'iconCaption' теперь можно задать для большинства пресетов меток.
Панель маршрутов в кнопке маршрутов стала загружаться при первом открытии для уменьшения размера загружаемого кода. Явно загрузить панель можно через 'routePanel.enable()' или указав параметр 'lazy: false' при создании кнопки.
- Вместо 'getRoute(): multiRouter.MultiRoute' следует использовать 'getRouteAsync(): Promise<multiRouter.MultiRoute>'.

Исправлено:
- В событиях marker* плеера панорам возвращалась неправильная сущность в поле 'marker'.
- Блок "Открыть в Яндекс.Картах" отображался на картах в нестандартных проекциях.
- При программном заполнении точки в панели маршрута в нём оставался фокус ввода.
- Не работала опция 'interactiveZIndex' менеджера объектов.
- Правки верстки.

Команда разработчиков API Яндекс.Карт

4 комментария
новости,обновление,API 2.1
Иконка кластера под содержимое
Виктор Исадов
10 октября, 17:43

Добрый день.

В содержимом иконки кластера вывожу длинный текст вместо количества объектов.

Как задать иконку для кластера, которая будет растягиваться под содержимое, аналогично "islands#blueStretchyIcon" для обычных меток?

Версия API 2.1.

3 комментария