Получение пересечения с API Google Адресов/геокодирования

StackOverflow https://stackoverflow.com//questions/10676790

Вопрос

Я пытаюсь найти две ближайшие улицы к точке с помощью API Google Адресов (в основном, чтобы указать ближайшее пересечение).Однако любой результат вернет только один «маршрут», если вообще вернет.

Я полагаю, что мог бы выполнить 5 запросов по шаблону + или X, но это хакерски, ненадежно и, конечно, намного раньше достигнет предела запросов.

У меня возникает искушение сказать, что это преднамеренный шаг, потому что API не предназначен для использования в чем-то вроде навигационных систем (чего я не пытаюсь делать), но я все же надеюсь, что существует способ получить перекресток, совместимый с TOS. .

Примечание: похоже, что указание «types=route» никогда не возвращает никаких результатов, что еще больше усиливает мои подозрения, что Places на самом деле предназначен для использования только для реальных POI, а не для навигации, хотя Условия использования не упоминайте каких-либо явных ограничений в этом отношении.

РЕДАКТИРОВАТЬ:Как отметил Крис, существует API геокодирования, специально разработанный для геокодирования, но я до сих пор не вижу способа получить ближайший перекресток, кроме как с помощью нескольких запросов.

Это было полезно?

Решение

Все согласны с тем, что обратный геокодер Google недостаточно сложен, чтобы сообщать о пересечениях в одном запросе.То есть не существует параметра, который вы могли бы использовать, чтобы сообщить им, что вам просто нужны результаты с "types" : [ "intersection" ].Google здесь ест свою собственную экспериментальную версию;если вы введете широту/долготу в поле поиска maps.google, вы всегда получите улицу (на языке Google «маршрут»).

Как вы заметили, существует множество эвристик, которые можно применить, чтобы получить желанный результат. ["intersection"] тип.

напримерНа нескольких «крупных» перекрестках в городах первого мира есть транзитные остановки, описывающие перекресток.Если какие-либо результаты имеют "types" : [ "bus_station", "transit_station" ] элемент, вы можете попробовать "long_name" элемент в качестве поискового запроса и надеемся, что вы найдете пересечение.Смиркингман также упомянул жизнеспособное решение.Увы, оба из них потребовали 2+ запроса.

В заключение отметим, что в API геокодирования Google нет функции latelngToIntersection(lat,lng).Доказательства этого существуют на собственной странице Google Maps.google.Я бы подошёл к вашей проблеме по-другому.Если вы хотите получить ближайший крупный перекресток по координатам GPS, вам может помочь помощь пользователя.Геокодирование, как известно, засорено отвратительным человечеством.

Другие советы

GeOnames предоставляет API геокодирования для ближайшего пересечения из координат широты / долготы.

http://www.geonames.org/maps/us-reverse-geecoder.html#findnearestIntersection

Ответ JSON выглядит так:

{"intersection":
 {"adminName2":"San Mateo",
  "street2":"Curtis St",
  "postalcode":"94025",
  "street1":"Roble Ave",
  "adminCode1":"CA",
  "distance":"0.08",
  "countryCode":"US",
  "lng":"-122.180842",
  "placename":"Menlo Park",
  "lat":"37.450649",
  "adminName1":"California"
 },
 "credits":"1.0"
}
.

street1 и street2 - перекрестные улицы.

Вы можете использовать данные из openstreetmap .Их файл .osm предоставляет лат / длинные пересекающиеся улицы.

  1. Как получить данные.

    1. Перейти к OpenStreetMap и найдите свое место, где вас интересует, Zoom, как4-й тик.

    2. Нажмите Export на панели TOP NAV, на падении нажмите «Data openStreetMap XML» и нажмите «Экспорт».

    3. Для многих данных, таких как состояние или страна, генеракодицетагкод и найдите желаемый «экстракт».

    4. Чтобы получить пересечения, вы хотите искать данные, которые соответствуют этому формату, возможно, поиск шоссе.

      Пример:

      <way id="6419265" user="eric22" uid="160949" visible="true" version="2" changeset="10632563" timestamp="2012-02-09T10:49:21Z">
        <nd ref="53167978"/>
        <nd ref="53163978"/>
        <nd ref="53163979"/>
        <nd ref="53173508"/>
        <nd ref="53164158"/>
        <nd ref="53173510"/>
        <tag <b>k="highway"</b> v="residential"/>
        <tag k="name" v="Alberta St"/>
        <tag k="tiger:cfcc" v="A41"/>
        <tag k="tiger:county" v="St. Louis-City, MO"/>
        ...
      </way>
      
      .

      Way.id - это идентификатор улицы, ND Refs - это улицы IDS, которые вы можете найти в одном файле.Они выглядят что-то вроде этого

      ‹node id="53167978" lat="38.5852785" lon="-90.2450074" user="eric22" uid="160949" visible="true" version="3" changeset="10632563" timestamp="2012-02-09T10:48:49Z"/>
      
      .

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

Если вы хотите найти улицы и т. Д. Попробуйте использовать API Geocoding: https://developers.google.com/maps/documentation/geocoding/

Как обсуждалось, нет объекта GoogleMap для обратного геокода и получить набор закрытых точек.

единственная альтернатива, которую я вижу, это

    .
  • Рассчитайте 200 метров N / S / E / W точка с гальсом.Вам нужно будет выбрать «200» эмпирически
  • Обратный геокод те 4 баллов
  • от возвращенных адресов, возьмите 2 ближайших улица, которые разные (могут быть добиться успеха)

    Если вы выполняете эту клиентскую сторону, ваши пользователи будут редко запускаться в Daily 2'500 Limit.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top