API Yandex maps поиск по организациям

172
17 июля 2018, 17:50

Стоит вопрос кластеризации объектов из поиска! Изначально использовал searchControl.search('Аптеки') потом через searchControl.getResultsArray() получал массивы данных и кластеризовал их clusterer.add(resultObjects);. Но как показала практика точки собираются хаотично и вечно подгружаются (так как Аптек оччччень много) кластеризация начинает работать коряво. Еще из ответов на мой вопрос выяснилось что это нарушение условий пользования:(

  1. Получил ключ API поиск по организациям , но как его прикрутить, как работать с данным которые возвращает запрос ?
  2. Ради интереса ввел поисковый запрос в строку браузера https://search-maps.yandex.ru/v1/?text=Аптеки&type=biz&lang=ru_RU&apikey=API-ключ , но он вернул несколько результатов... а их должно быть неизбитое кол-во!
Answer 1

Загрузить данные из JSON на карту можно, например, с помощью geoQuery. В песочнице есть пример.

Чтобы получить все нужные результаты важно корректно формировать запрос, как описано в документации. Например, по умолчанию API возвращает максимум 10 результатов, при этом у Вас не указано, какие это должны быть результаты. Поэтому вы получаете не более 10 каких-то аптек из базы Яндекса.

Корректный запрос в Вашем случае будет, например, таким:

https://search-maps.yandex.ru/v1/?text=Аптеки&type=biz&lang=ru_RU&results=500&bbox=36.83,55.67~38.24,55.91&apikey=<API-ключ>

Где:

  • results=500 означает, что нужно запросить максимум результатов одним запросом,
  • bbox=36.83,55.67~38.24,55.91 определяет область карты, в которой нужно искать результаты в первую очередь.

В итоге код получится каким-то таким:

jQuery.getJSON('https://search-maps.yandex.ru/v1/?text=Аптеки&type=biz&lang=ru_RU&results=500&bbox=36.83,55.67~38.24,55.91&apikey=<API-ключ>', function (json) {
    var geoObjects = ym.geoQuery(json)
            .addToMap(myMap)
            .applyBoundsToMap(myMap, {
                checkZoomRange: true
            });

Обратите внимание, что если результатов по запросу более 500, то Вам нужно будет сделать несколько запросов на получение данных, используя параметр skip. При этом через API нельзя гарантировано выгрузить все-все организации, потому что это API поиска, а не каталог базы, который можно "перебрать".

READ ALSO
Возможные значения statusTxt

Возможные значения statusTxt

Какие возможные значения есть у statusTxt кроме success и error?

135
Округление числа js [дубликат]

Округление числа js [дубликат]

На данный вопрос уже ответили:

203
Возвращается значение NaN

Возвращается значение NaN

У меня такой код (js):

179
Как получить первый дочерний элемент, в котором сработало событие?

Как получить первый дочерний элемент, в котором сработало событие?

как при наведении мышки на TD, получить <div id=""> ( первый дочерний элемент родителя <div id="body_infoReg"> в котором сработало событие )

184