Детали 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 или адрес используются, как показано ниже.

Google Map URL with directions action

Правильный/ожидаемый результат следующий. Посмотрите на пункт назначения.

The Expected result of opening the Maps URL

Обновить

Проблема заключается в том, что 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

enter image description here

Таким образом, обходной путь заключается в том, чтобы не использовать параметр lat/lng в качестве параметра destination. Я тестировал с различными строками (имена мест, адресов, тарабарщины) в качестве этого параметра, и destination_place_id представляется, отменяет его, что является желаемым поведением. При использовании только a . (период) в качестве универсального значения, указывается имя места вместе с адресом:

https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJj61dQgK6j4AR4GeTYWZsKWw

enter image description here

https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0

enter image description here

Ответ 2

Документация упоминает для destination, что значение может быть либо имя места, адрес, или разделенными запятыми широты/долготы.

Если вы вводите координаты, я полагаю, что он просто делает обратный геокод и отображает соответствующий адрес. Таким образом, вы можете ввести название места, и оно будет работать.

https://www.google.com/maps/dir/?api=1&destination=Taj+Mahal&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0