【问题标题】:Google Maps Geocoding API: How to get city/region names *consistently* in English or local language?Google Maps Geocoding API:如何以英语或当地语言*一致地*获得城市/地区名称?
【发布时间】:2015-09-07 16:57:11
【问题描述】:

当我提出以下请求(注意language=en 部分!)时,波兰华沙的纬度和经度,

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

我得到一个结果列表,其中包括以下内容:

结果 3(邻域):

{ “地址组件”:[ { "long_name" : "Śródmieście Północne", "short_name" : "Śródmieście Północne", “类型”:[“邻里”,“政治”] }, { "long_name" : "Śródmieście", "short_name" : "Śródmieście", “类型”:[“sublocality_level_1”、“sublocality”、“political”] }, { "long_name" : "Warszawa", "short_name" : "华沙", “类型”:[“地方”,“政治”] }, { "long_name" : "华沙", "short_name" : "华沙", “类型”:[“administrative_area_level_3”,“政治”] }, { "long_name" : "华沙", "short_name" : "华沙", “类型”:[“administrative_area_level_2”,“政治”] }, { "long_name" : "mazowieckie", “short_name”:“mazowieckie”, “类型”:[“administrative_area_level_1”,“政治”] }, { "long_name" : "波兰", “short_name”:“PL”, “类型”:[“国家”,“政治”] } ], [...] “place_id”:“ChIJjaxkh4rMHkcR1lza9qbbnrU”, “类型”:[“邻里”,“政治”] }

结果 4(sublocality_level_1):

{ “地址组件”:[ { "long_name" : "Śródmieście", "short_name" : "Śródmieście", “类型”:[“sublocality_level_1”、“sublocality”、“political”] }, { "long_name" : "Warsaw", "short_name" : "华沙", “类型”:[“地方”,“政治”] }, { "long_name" : "华沙", "short_name" : "华沙", “类型”:[“administrative_area_level_3”,“政治”] }, { "long_name" : "华沙", "short_name" : "华沙", “类型”:[“administrative_area_level_2”,“政治”] }, { "long_name" : "Masovian Voivodeship", "short_name" : "Masovian Voivodeship", “类型”:[“administrative_area_level_1”,“政治”] }, { "long_name" : "波兰", “short_name”:“PL”, “类型”:[“国家”,“政治”] } ], [...] “place_id”:“ChIJ8e41PvbMHkcRit4n8qe36Ns”, “类型”:[“sublocality_level_1”、“sublocality”、“political”] },

这方面的主要问题是相同地址组件(locality、administrative_area_level_1)的不一致 - 有时是英语(根据要求),有时是当地语言。如果没有其他 ID 知道这些是指相同的管理现实,我无法确定这一点,除非我使用了另一个英文和本地地理名称来源并进行了一些模式匹配。

有没有办法解决这个问题?或者有人可以建议没有此类问题的反向地理编码服务吗?

非常感谢!

【问题讨论】:

    标签: internationalization reverse-geocoding google-geocoding-api


    【解决方案1】:

    我遇到了同样的问题。我写了一个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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多