我正在使用Google反向地理编码来解析世界各地的坐标。 我很难从 JSON 响应中为每个国家/地区匹配正确的"行政区域级别"。
下面是一个响应示例:https://maps.googleapis.com/maps/api/geocode/json?latlng=40.709073,%20-74.007506&language=en-EN
根据地址类型和地址组件类型,我可以在其中搜索属性:
- 政治
- administrative_area_level_1
- administrative_area_level_2
- administrative_area_level_3
- administrative_area_level_4
- administrative_area_level_5
- colloquial_area
- 地区
- 病房
- 次区
- 附近
这是我对PHP函数的尝试:
public static function getCity($json) {
$types = array('administrative_area_level_1', 'administrative_area_level_2', 'administrative_area_level_3', 'locality', 'country');
foreach ($json["results"] as $result) {
foreach ($types as $t) {
if ($city = self::Find_Long_Name_Given_Type($t, $result['address_components'])) {
return $city;
}
}
}
}
private static function Find_Long_Name_Given_Type($type, $array, $short_name = false) {
foreach ($array as $value) {
if (in_array($type, $value["types"])) {
if ($short_name) {
return $value["short_name"];
}
return $value["long_name"];
}
}
}
(如您所见,如果没有给出其他属性,我会搜索国家/地区(
我注意到有些地方至少具有上述列表中所有属性中的一个。那么,对于世界上所有城市来说,值得拥有的房产应该是什么? 我应该如何解析每对坐标以获得正确的(英文(城市名称?
例如,我注意到某个字段包含欧洲城市的城市名称,但与美国城市的字段不同。那么,我怎样才能为世界上每个国家/地区获得正确的财产呢?
我认为全球城市名称没有唯一的属性(地址组件(。在同一国家/地区的不同国家/地区,您可以在不同的地址组件中使用城市名称。我相信地址组件的选择取决于谷歌在不同国家/地区使用的内部数据建模。
请查看以下示例页面: https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
您可以在此页面上看到以下说明
您可能需要调整它以与每个国家/地区的邮政地址保持一致。此示例显示数据库中的位置地址组件。这通常代表城市。但是,在英国和瑞典,正确的成分是postal_town,而日本的正确成分在各都道府县之间是不同的。布鲁克林和纽约市的其他地区不使用该市作为地址的一部分。他们改用sublocality_level_1。
所以,至少你可以玩地方,postal_town和那里提到的sublocality_level_1。
希望这有帮助!