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

13

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

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

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

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

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

Обратный геокодер всегда возвращает ровно один результат: ближайшую найденную вещь, поэтому вы не можете делать то, что описали. Что именно вы пытаетесь достичь? smirkingman
На тестировании я могу подтвердить, что обратный геокод никогда не возвращает более одного результата: самое близкое, по мнению GoogleMap. Я также пробовал google.maps.places.PlaceSearchRequest, но даже если вы запрашиваете & quot; street_address & quot; он ничего не возвращает (если только рядом не окажется интересная достопримечательность). smirkingman
Я пытаюсь найти ближайшее пересечение с той точкой, где я нахожусь. По крайней мере, мне нравятся два названия улиц, когда я на перекрестке, но в идеале я хочу также и ближайшую перекрестку. Я надеялся, что предоставление определенного размера радиуса даст мне несколько «маршрутов»; результаты, и я мог бы использовать второй лучший "маршрут" как перекресток EboMike
Да, это тот же вывод, к которому я пришел, когда тестировал его, что побудило меня опубликовать этот вопрос. Интересно, есть ли способ получить пересечение, кроме отправки нескольких запросов в непосредственной близости, или ЕСЛИ нет другого способа сделать это, кроме как с помощью нескольких запросов, что является наиболее эффективным с наименьшим количеством запросов. EboMike
Интересная проблема, но я не вижу решения, даже с несколькими запросами. Предположим, вы делаете 4 запроса для ближайшего адреса N / S / E / W, скажем, на 200 метров. Он работает, когда вы находитесь в пределах 200 метров от перекрестка, но не работает, когда ближайший перекресток находится на расстоянии одного километра. Что возвращает меня к моему первоначальному вопросу: какой смысл использовать «ближайший перекресток», когда он может быть за несколько миль? IOW, каков основной вариант использования? Если бы вы могли объяснить, чего вы на самом деле пытаетесь достичь, мы могли бы вам помочь. smirkingman

Ваш Ответ

6   ответов
2

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

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

Спасибо Крис! Я полный дурак - как я не заметил API геокодирования? Тем не менее, у меня все та же проблема с API геокодирования - я могу сделать только обратное геокодирование определенной точки, которое возвращает ближайшую улицу, но не пересечение. Как мне найти ближайший перекресток? EboMike
1

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

3

OpenStreetMap, Их.osm файл обеспечивает широту / длину пересекающихся улиц.

How to get the data.

Go to OpenStreetMap and find your place where you're interested in, zoom into like the 4th tick mark.

Click Export on the top nav bar, on the drop down, press "OpenStreetMap XML Data" and click 'Export'.

For a lots of data like a state or country, Planet.osm and find a your desired "extract".

To get the intersections, you want to look for data that matches this format, probably search for highway.

Пример:

<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"/>
Прочитав вики, вы можете подключиться к БД. United States planet.osm - всего 25 концертов. Я сохраняю любую часть карты, которая вам нужна, вместо того, чтобы каждый раз посещать их базу данных или веб-сайт, поскольку это бесплатный сервис.
Хорошая база данных. Есть ли API, где я могу получить доступ к базе данных с помощью простых запросов? Очевидно, я не хочу загружать planet.osm, и это автоматическая фоновая операция, я не могу использовать веб-интерфейс. Я проверил веб-сайт, но сразу ничего не нашел. EboMike
9

координатами широты и долготы.

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 перекрестки

6

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

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

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

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

Эй, Рук, это действительно интересный подход. Я мог бы даже попытаться использовать ориентир в качестве ориентира (предпочтительно автобусную остановку, например «Шмук-стрит рядом с железнодорожной станцией»), но, возможно, даже «Фуд-стрит рядом с Эпплби», если ничего больше не появится. Это потребует меньше запросов чем шаблон X. Я все еще предпочел бы имя пересечения, но давайте будем практичными. А вот и награда! EboMike
1

в GoogleMap нет средства для обратного геокодирования и получения набора точек закрытия.

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

Calculate 200 metres N/S/E/W of the point with Haversine. You'll need to choose '200' empirically Reverse-geocode those 4 points From the returned addresses, take the 2 closest streets that are different (may not succeed)

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

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

Похожие вопросы