Подтвердить что ты не робот

Получение пересечения с API Google Places/Geocoding

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

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

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

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

EDIT: Как заметил Крис, есть API-интерфейс Geocoding, специально предназначенный для геокодирования, но я до сих пор не вижу способа получить ближайшую перекрестную улицу, кроме как через несколько запросов.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

http://www.geonames.org/maps/us-reverse-geocoder.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 являются перекрестными улицами.

Ответ 3

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

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

    • Перейдите в OpenStreetMap и найдите свое место, где вас интересует, увеличьте масштаб, как 4-я отметка.

    • Нажмите "Экспорт" в верхней панели навигации, в раскрывающемся списке нажмите "Данные XML OpenStreetMap" и нажмите "Экспорт".

    • Для большого количества данных, таких как состояние или страна, Planet.osm и найдите желаемый "экстракт".

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

Пример:

<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 - это идентификатор улицы, идентификаторы улиц - это идентификаторы улиц, которые вы можете найти в одном файле. Они выглядят примерно так.

‹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"/>

Ответ 4

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

Если вы хотите искать улицы и т.д., попробуйте использовать API геокодирования: https://developers.google.com/maps/documentation/geocoding/

Ответ 5

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

Ответ 6

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

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

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

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