Глобальный поиск Google Maps

Я пытаюсь использовать textSearch для мест Google, чтобы найти все магазины определенного бренда (позволяет скажем, Levi's), поэтому я буду перебирать результаты, используя next_page_token, но, похоже, я столкнулся с проблемой не более 60 возвращаемых результатов. Можно ли как-то улучшить эти результаты или кто-нибудь знает другой сервис, который может обеспечить такие результаты?


person tix3    schedule 17.04.2013    source источник


Ответы (1)


К сожалению, нет другого способа обойти ограничение в 60 записей, кроме умного опроса при текстовом поиске, и результаты не могут быть отсортированы. Лучшее решение будет поблизости. Параметры API почти такие же, как у textsearch, с тремя отличиями:

  • Ваш радиус будет автоматически установлен на 50 км.
  • rankby=distance позволяет сортировать результаты по расстоянию от вашего location (вы поймете, почему это важно)
  • query становится keywords и больше не является истинным параметром поиска в Картах Google - это просто список ключевых слов.

Возвращаемые результаты аналогичны возвратам textSearch - и имеют уникальный идентификатор, который также пригодится.

Как все сканировать

Сканирование области довольно просто. Вы ограничены 60 результатами на запрос, поэтому мы будем выполнять сортировку по расстоянию, чтобы мы точно знали, что наш последний результат набора также является самым дальним. Это позволяет вам создать максимально вероятный радиус для вашего запроса - и основывать на этом ваш следующий поиск.

Вот смоделированный результат в фотошопе. Я выполнил случайный запрос, основанный на точке во Франции, и обозначил радиус поиска, используя зеленый кружок:

Первый запрос

Зеленый кружок обозначает результаты. Это позволяет мне сформулировать три новых запроса, все три на краю текущей зоны (но внутри нее):

Второй раунд запросов

Вы заметите, что первый запрос полностью покрывается вторым. Это позволяет вам получить полные результаты в области с минимальным перекрытием, насколько это возможно, и эффективно отсортировать их по идентификатору (чтобы вы знали, что у вас нет дубликатов).

Предостережение: для радиуса 50 км (макс.) потребуется 1 запрос. Радиус 95 км занимает четыре. Радиус 140 км занимает 13. Он быстро увеличивается - так что на вашем месте я бы куда-нибудь кэшировал результаты.

Поле возврата id гарантированно уникально - reference привязано к вашему ключу API. Различия? reference позволяет отправить запрос сведений о месте для получения обновленной информации о месте (некоторая информация здесь).

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

person Sébastien Renauld    schedule 17.04.2013
comment
Я собирался создать для этого скрипку, но Google Places не предоставляет альтернатив JSONP / CORS ... Так что вам придется попробовать это самостоятельно. :-( - person Sébastien Renauld; 17.04.2013
comment
Действительно разочарован тем, что нет другого пути (или другой услуги), но ОТЛИЧНЫЙ ответ. - person tix3; 18.04.2013