Mar*_*ala 4 php google-geocoding-api
我正在使用以下代码段通过Google Geolocation API对地址进行地理编码:
<?php
$address = "Frazione Levà - 16030 Sori (GE)";
$url = 'http://maps.google.com/maps/api/geocode/xml?address='.urlencode($address).'&sensor=false';
echo $url."\n";
$xml = file_get_contents($url);
var_dump($xml);
?>
Run Code Online (Sandbox Code Playgroud)
echo命令显示调用的URL为:
http://maps.google.com/maps/api/geocode/xml?address=Frazione+Lev%C3%A0+-+16030+Sori+%28GE%29&sensor=false
Run Code Online (Sandbox Code Playgroud)
并且var_dump命令显示结果为:
string(107) "<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
<status>ZERO_RESULTS</status>
</GeocodeResponse>
"
Run Code Online (Sandbox Code Playgroud)
因此,似乎无法对地址进行地理位置定位。
如果我使用我上面的完全相同的网址( http://maps.google.com/maps/api/geocode/xml?address=Frazione+Lev%C3%A0+-+16030+Sori+%28GE%29&sensor=false)浏览器,我得到一个完全不同的结果(地址已正确定位):
<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
<status>OK</status>
...
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我该如何解决?我需要从PHP定位地址。
请注意,我每天在循环中使用相同的代码段来对数百个地址进行地理位置定位,并且在大多数地址上都可以正常工作;仅在某些地址上,它会显示类似的问题。
在侧边栏中提出了与StackOverflow相关的问题,这里找到了/sf/answers/721170831/线程找到的解决方案:-)
问题是区域偏向。我将?region = it添加到URL,结果现在是一致的。
在添加该参数之前,由于浏览器发送的标题(在Win7意大利语中为意大利语),当我在网络浏览器中加载页面时,Google可能会猜对了。当我从PHP发出请求时,发送的标头较少,可能Google认为这是一台美国PC或类似的东西... :)
同样从地址中删除邮政编码也可以使我的PHP脚本和Web浏览器获得连贯的结果,但是我认为?region = it是最干净,逻辑上最正确的解决方案。