Геокод карты Google, получающий разный результат в прямом API и обратном API — на некоторых адресах

#google-maps #google-geocoder #google-geocoding-api

#google-карты #google-геокодер #google-geocoding-api

Вопрос:

Forward API: https://maps.googleapis.com/maps/api/geocode/json?address=1045 E 24th St, Minneapolis, MN 55404amp;key=YOUR_API_KEY

Результат

 {
   "results":[
      {
         "address_components":[
            {
               "long_name":"1045",
               "short_name":"1045",
               "types":[
                  "street_number"
               ]
            },
            {
               "long_name":"East 24th Street",
               "short_name":"E 24th St",
               "types":[
                  "route"
               ]
            },
            {
               "long_name":"Phillips",
               "short_name":"Phillips",
               "types":[
                  "neighborhood",
                  "political"
               ]
            },
            {
               "long_name":"Minneapolis",
               "short_name":"Minneapolis",
               "types":[
                  "locality",
                  "political"
               ]
            },
            {
               "long_name":"Hennepin County",
               "short_name":"Hennepin County",
               "types":[
                  "administrative_area_level_2",
                  "political"
               ]
            },
            {
               "long_name":"Minnesota",
               "short_name":"MN",
               "types":[
                  "administrative_area_level_1",
                  "political"
               ]
            },
            {
               "long_name":"United States",
               "short_name":"US",
               "types":[
                  "country",
                  "political"
               ]
            },
            {
               "long_name":"55404",
               "short_name":"55404",
               "types":[
                  "postal_code"
               ]
            },
            {
               "long_name":"3833",
               "short_name":"3833",
               "types":[
                  "postal_code_suffix"
               ]
            }
         ],
         "formatted_address":"1045 E 24th St, Minneapolis, MN 55404, USA",
         "geometry":{
            "location":{
               "lat":44.9589308,
               "lng":-93.2592956
            },
            "location_type":"RANGE_INTERPOLATED",
            "viewport":{
               "northeast":{
                  "lat":44.96027978029149,
                  "lng":-93.25794661970849
               },
               "southwest":{
                  "lat":44.9575818197085,
                  "lng":-93.2606445802915
               }
            }
         },
         "place_id":"EioxMDQ1IEUgMjR0aCBTdCwgTWlubmVhcG9saXMsIE1OIDU1NDA0LCBVU0EiGxIZChQKEgmhxzziqTKzUhEX8ec1BmZglBCVCA",
         "types":[
            "street_address"
         ]
      }
   ],
   "status":"OK"
}
 

и в обратном API я использовал то же геометрическое расположение Lat и Long

Обратный API: https://maps.googleapis.com/maps/api/geocode/json ?latlng= 44.9589308,-93.2592956amp;key=YOUR_API_KEY

Результат

 {
   "plus_code":{
      "compound_code":"XP5R H7 Minneapolis, MN, USA",
      "global_code":"86P8XP5R H7"
   },
   "results":[
      {
         "address_components":[
            {
               "long_name":"2400",
               "short_name":"2400",
               "types":[
                  "street_number"
               ]
            },
            {
               "long_name":"11th Avenue South",
               "short_name":"11th Ave S",
               "types":[
                  "route"
               ]
            },
            {
               "long_name":"Midtown Phillips",
               "short_name":"Midtown Phillips",
               "types":[
                  "neighborhood",
                  "political"
               ]
            },
            {
               "long_name":"Minneapolis",
               "short_name":"Minneapolis",
               "types":[
                  "locality",
                  "political"
               ]
            },
            {
               "long_name":"Hennepin County",
               "short_name":"Hennepin County",
               "types":[
                  "administrative_area_level_2",
                  "political"
               ]
            },
            {
               "long_name":"Minnesota",
               "short_name":"MN",
               "types":[
                  "administrative_area_level_1",
                  "political"
               ]
            },
            {
               "long_name":"United States",
               "short_name":"US",
               "types":[
                  "country",
                  "political"
               ]
            },
            {
               "long_name":"55404",
               "short_name":"55404",
               "types":[
                  "postal_code"
               ]
            },
            {
               "long_name":"3806",
               "short_name":"3806",
               "types":[
                  "postal_code_suffix"
               ]
            }
         ],
         "formatted_address":"2400 11th Ave S, Minneapolis, MN 55404, USA",
         "geometry":{
            "bounds":{
               "northeast":{
                  "lat":44.9589961,
                  "lng":-93.2589414
               },
               "southwest":{
                  "lat":44.958912,
                  "lng":-93.25912079999999
               }
            },
            "location":{
               "lat":44.958968,
               "lng":-93.2590273
            },
            "location_type":"ROOFTOP",
            "viewport":{
               "northeast":{
                  "lat":44.9603030302915,
                  "lng":-93.25768211970849
               },
               "southwest":{
                  "lat":44.9576050697085,
                  "lng":-93.2603800802915
               }
            }
         },
         "place_id":"ChIJTb-V4qkys1IRukelu4LNRgI",
         "types":[
            "premise"
         ]
      },
 

здесь я получил другой адрес в обратном API Google,
Пожалуйста, помогите мне, если мне нужно добавить что-нибудь в ссылку или что-то еще

Ответ №1:

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

Когда вы геокодируете какой-либо адрес, вы должны проверить, каков location_type результата. В вашем примере location_type равен RANGE_INTERPOLATED . Это означает, что у Google нет точного адреса на КРЫШЕ в их базе данных для адреса «1045 E 24th St, Minneapolis, MN 55404», и местоположение было интерполировано. Еще одним явным признаком интерполированной позиции является очень длинное значение идентификатора места. В вашем примере это так EioxMDQ1IEUgMjR0aCBTdCwgTWlubmVhcG9saXMsIE1OIDU1NDA0LCBVU0EiGxIZChQKEgmhxzziqTKzUhEX8ec1BmZglBCVCA .

введите описание изображения здесь

Итак, что произойдет, если вы теперь перевернете геокодирование координаты этого интерполированного адреса (44.9589308,-93.2592956)? Служба обратного геокодирования предпочтет существующие адреса НА КРЫШЕ и вернет первые ближайшие результаты с location_type, ROOFTOP а затем другие интерполированные результаты.

В вашем примере есть несколько результатов, которые возвращают обратное геокодирование. Вы можете видеть их на моем скриншоте:

введите описание изображения здесь

Первый результат (маркер 1) — «2400 11th Ave S, Миннеаполис, Миннесота 55404, США» с типом местоположения ROOFTOP, второй (маркер 2) — «2408 11th Ave S, Миннеаполис, Миннесота 55404, США» также с типом местоположения ROOFTOP, третий (маркер 3) — «1005 E 24th St, Миннеаполис, Миннесота 55404, США’ снова ROOFTOP и только четвертый результат — RANGE_INTERPOLATED адрес ‘1045 E 24th St, Миннеаполис, Миннесота 55404, США’

Обратите внимание, что вы можете попросить службу обратного геокодирования предоставлять результаты только для определенного типа местоположения. Например, вы можете сказать, что вас интересуют только результаты RANGE_INTERPOLATED:

https://maps.googleapis.com/maps/api/geocode/json?latlng=44.9589308,-93.2592956amp;location_type=RANGE_INTERPOLATEDamp;key=YOUR_API_KEY

В этом случае первым результатом обратного геокодирования будет ваш адрес с интерполяцией по диапазону, как показано на моем скриншоте

введите описание изображения здесь

Надеюсь, мой ответ прояснит ваши сомнения.

Комментарии:

1. Спасибо за ответ, но мне странно, если я получил длину широты с правильных адресов, тогда почему она изменилась в обратном API, в приведенном выше примере «1045 E 24th St, Миннеаполис, Миннесота 55404, США» Я получил длину широты, поэтому она определенно есть в базе данных Google, так что почему он получает разные адреса в обратном API, я просто странно отношусь к этому

2. Координата вашего адреса была интерполирована (рассчитана) Google, как я уже объяснял. Google может угадать местоположение адреса, используя свои алгоритмы. Обратное геокодирование нельзя рассматривать как противоположную операцию геокодирования, потому что обратное геокодирование всегда будет отдавать предпочтение ближайшим адресам НА КРЫШЕ, поэтому в случае результата RANGE_INTERPOLATED вы, как правило, не получите обратно тот же адрес.