3

Когда я делаю следующий запрос (обратите внимание на language=en часть!) С широтой & долготы Варшава, Польша,API геокодирования Google Maps: как получить названия городов/регионов * последовательно * на английском или местном языке?

https://maps.googleapis.com/maps/api/geocode/json?latlng=52.23,21.01&language=en

получить список результатов, который включает в себя следующее:

Результат 3 (окрестности):

 
    { 
      "address_components" : [ 
       { 
        "long_name" : "Śródmieście Północne", 
        "short_name" : "Śródmieście Północne", 
        "types" : [ "neighborhood", "political" ] 
       }, 
       { 
        "long_name" : "Śródmieście", 
        "short_name" : "Śródmieście", 
        "types" : [ "sublocality_level_1", "sublocality", "political" ] 
       }, 
       { 
        "long_name" : "Warszawa", <-- city in Polish 
        "short_name" : "Warszawa", 
        "types" : [ "locality", "political" ] 
       }, 
       { 
        "long_name" : "Warszawa", 
        "short_name" : "Warszawa", 
        "types" : [ "administrative_area_level_3", "political" ] 
       }, 
       { 
        "long_name" : "Warszawa", 
        "short_name" : "Warszawa", 
        "types" : [ "administrative_area_level_2", "political" ] 
       }, 
       { 
        "long_name" : "mazowieckie", <-- region in Polish 
        "short_name" : "mazowieckie", 
        "types" : [ "administrative_area_level_1", "political" ] 
       }, 
       { 
        "long_name" : "Poland", 
        "short_name" : "PL", 
        "types" : [ "country", "political" ] 
       } 
      ], 
     [...] 
     "place_id" : "ChIJjaxkh4rMHkcR1lza9qbbnrU", 
     "types" : [ "neighborhood", "political" ] 
    } 

Ресул т 4 (sublocality_level_1):

 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Śródmieście", 
       "short_name" : "Śródmieście", 
       "types" : [ "sublocality_level_1", "sublocality", "political" ] 
      }, 
      { 
       "long_name" : "Warsaw", <-- city in English 
       "short_name" : "Warsaw", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Warszawa", 
       "short_name" : "Warszawa", 
       "types" : [ "administrative_area_level_3", "political" ] 
      }, 
      { 
       "long_name" : "Warszawa", 
       "short_name" : "Warszawa", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "Masovian Voivodeship", <-- region in English 
       "short_name" : "Masovian Voivodeship", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Poland", 
       "short_name" : "PL", 
       "types" : [ "country", "political" ] 
      } 
     ], 
     [...] 
     "place_id" : "ChIJ8e41PvbMHkcRit4n8qe36Ns", 
     "types" : [ "sublocality_level_1", "sublocality", "political" ] 
     }, 

Основная проблема состоит в том несогласованность для одних и тех же компонентов адреса (локальности, administrative_area_level_1) - иногда английский (по запросу), иногда на местном языке. Без какого-либо другого идентификатора, чтобы знать, что это относится к одной и той же административной реальности, я не могу быть уверен в этом, если только я не использовал другой источник английских локальных географических названий и не сделал некоторые сопоставления с образцом.

Есть ли способ обойти эту проблему? Или кто-то может предложить обратную службу геокодирования, не имеющую таких проблем?

Большое спасибо!

ответ

0

Я столкнулся с той же проблемой. Я написал группу if/else, чтобы получить данные о местоположении в порядке предпочтения.

foreach ($data->results[0]->address_components as $stuff) { 
    // city 
    if ($stuff->types[0] == 'locality') { 
     $zip->locality_short = $stuff->short_name; 
     $zip->locality_long = $stuff->long_name; 
    } elseif ($stuff->types[0] == 'sublocality_level_1') { 
     $zip->locality_short = $stuff->short_name; 
     $zip->locality_long = $stuff->long_name; 
    } elseif ($stuff->types[0] == 'neighborhood') { 
     $zip->locality_short = $stuff->short_name; 
     $zip->locality_long = $stuff->long_name; 
    } 
    // state 
    if ($stuff->types[0] == 'administrative_area_level_1') { 
     $zip->location_short = $stuff->short_name; 
     $zip->location_long = $stuff->long_name; 
    } 
    // country 
    if ($stuff->types[0] == 'country') { 
     $zip->country_short = $stuff->short_name; 
     $zip->country_long = $stuff->long_name; 
    } 
}