3

當我提出以下要求與緯度&經度華沙,波蘭(注意language=en部分!),Google地圖地理編碼API:如何獲得城市/地區名稱*一致*使用英語或當地語言?

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" ] 
    } 

Resul牛逼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; 
    } 
} 
相關問題