需要使用Google地理编码以英语返回城市名称

val*_*alk 2 php geocoding

我有这个代码请求谷歌更正输入的地址,并需要它返回城市的英文名称:

function gmap_query_xml($in_address) {
  $base_url = "http://maps.google.com/maps/geo?output=xml&region=US&language=en&key=". KEY;
  $request_url = $base_url . "&q=" . urlencode($in_address);
  return simplexml_load_file($request_url);
}
Run Code Online (Sandbox Code Playgroud)

然后,

$xml = gmap_query_xml($in_address);
Run Code Online (Sandbox Code Playgroud)

最后获得城市名称:

if ($xml) {
  $city = (string) $xml->Response->Placemark->AddressDetails->Country->AdministrativeArea->SubAdministrativeArea->Locality->LocalityName;
}
Run Code Online (Sandbox Code Playgroud)

这会返回正确的城市名称,但是!它用母语表示.尝试罗马 - 你得到罗马,尝试基辅,你会得到Киев.

怎么解决这个问题?谢谢!!

Pek*_*ica 6

在这方面似乎有点混乱.请参阅此地理编码API错误报告列表.

您正在使用旧的V2 API.

根据这篇文章和我自己的测试,新的V3 API:

http://maps.google.com/maps/api/geocode/xml?address=Rome&sensor=false&language=en
Run Code Online (Sandbox Code Playgroud)

language参数更敏感并正确转换位置名称.我得到language=en(罗马),language=de(罗马)甚至language=fi(罗马)的正确结果!

但是,V3以不同的格式提供其地理编码结果,因此您必须大大改变您的解析(由于addressComponents现在的结构方式,这也让我感到沮丧).