Детали Google Place Локальные/Длинные координаты не соответствуют кросс-платформе Карты URL-адреса
Я использовал API деталей Google Place, чтобы получить детали места, которые включают координаты lat/lng места.
Когда я запускаю карты Google с использованием универсального кросс-платформенного URL-адреса Карты, он не распознает место.
Например,
https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJbf8C1yFxdDkR3n12P4DkKt0&key=XXXXXXXX
возвращает данные места, включая следующие данные о местоположении:
{
.....
"geometry": {
"location": {
"lat": 27.1750151,
"lng": 78.0421552
},
"viewport": {
"northeast": {
"lat": 27.1770292,
"lng": 78.04537599999999
},
"southwest": {
"lat": 27.16897280000001,
"lng": 78.0388188
}
}
},
.....
"name": "Taj Mahal",
"place_id": "ChIJbf8C1yFxdDkR3n12P4DkKt0",
.....
}
Но эти данные, когда они используются для создания URL-адреса Карты с указанием карты направлений, не дают правильного места в поле назначения.
URL-адрес Google Карт: https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0
Место назначения не отображается как место. Только лат /lng или адрес используются, как показано ниже.
Правильный/ожидаемый результат следующий. Посмотрите на пункт назначения.
Обновить
Проблема заключается в том, что PlaceID не соответствует координатам lat/lng в URL-адресе Maps. По-видимому, существует несогласованность с lat/lng, предоставляемая API-интерфейсом Place Details.
Ниже URL работает
https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552,15z&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0
но 27.1750151,78.0421552,15z
не является координатой из API деталей места. Lat/lng, возвращаемый API 27.1750151,78.0421552
- 27.1750151,78.0421552
.
Есть разница в ,15z
я считаю, что это уровни масштабирования.
Ответы
Ответ 1
Параметр destination
по-видимому, полностью перетаскивает параметр destination_place_id
когда заданы параметры lat/lng, что приводит к обратному геокоду в координатах. В следующем примере URL-адреса я использую идентификатор места ChIJj61dQgK6j4AR4GeTYWZsKWw
который соответствует Googleplex в Mountain View, CA как destination_place_id
вместе с lat/lng для Taj Mahal в качестве destination
; обратите внимание, что запрос Googleplex игнорируется, и выполняется обратный геокод, получая только адрес в Индии:
https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552&destination_place_id=ChIJj61dQgK6j4AR4GeTYWZsKWw
Таким образом, обходной путь заключается в том, чтобы не использовать параметр lat/lng в качестве параметра destination
. Я тестировал с различными строками (имена мест, адресов, тарабарщины) в качестве этого параметра, и destination_place_id
представляется, отменяет его, что является желаемым поведением. При использовании только a .
(период) в качестве универсального значения, указывается имя места вместе с адресом:
https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJj61dQgK6j4AR4GeTYWZsKWw
https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0
Ответ 2
Документация упоминает для destination
, что значение может быть либо имя места, адрес, или разделенными запятыми широты/долготы.
Если вы вводите координаты, я полагаю, что он просто делает обратный геокод и отображает соответствующий адрес. Таким образом, вы можете ввести название места, и оно будет работать.
https://www.google.com/maps/dir/?api=1&destination=Taj+Mahal&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0