我有这个代码请求谷歌更正输入的地址,并需要它返回城市的英文名称:
function gmap_query_xml($in_address) {
$base_url = "http://maps.google.com/maps/geo?output=xml®ion=US&language=en&key=". KEY;
$request_url = $base_url . "&q=" . urlencode($in_address);
return simplexml_load_file($request_url);
}
然后,
$xml = gmap_query_xml($in_address);
最后获得城市名称:
if ($xml) {
$city = (string) $xml->Response->Placemark->AddressDetails->Country->AdministrativeArea->SubAdministrativeArea->Locality->LocalityName;
}
这会返回正确的城市名称,但是!以母语表示。尝试罗马 - 你得到罗马,尝试基辅,你会得到Киев。
如何解决这个问题?谢谢!
答案 0 :(得分:6)
在这方面似乎有点混乱。请参阅this list of Google Geocoding API bug reports。
您正在使用旧的V2 API。
http://maps.google.com/maps/api/geocode/xml?address=Rome&sensor=false&language=en
对language
参数更敏感,并正确转换位置名称。我得到language=en
(罗马),language=de
(Rom)甚至language=fi
(罗马)的正确结果!
然而,V3以不同的格式提供其地理编码结果,因此您必须大大改变您的解析(由于addressComponents
现在的结构方式,这也让我感到沮丧)。