PHP中的特定地址的地理编码失败,使用相同的URL从浏览器工作

时间:2015-06-10 06:18:19

标签: 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);
?>

echo命令显示名为:

的URL
http://maps.google.com/maps/api/geocode/xml?address=Frazione+Lev%C3%A0+-+16030+Sori+%28GE%29&sensor=false

并且var_dump命令显示结果为:

string(107) "<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
 <status>ZERO_RESULTS</status>
</GeocodeResponse>
"

因此,地址似乎无法进行地理定位。

如果我从浏览器中调用上面的完全相同的网址(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>
...

如何实现这一点以及如何解决这个问题?我需要从PHP中对地址进行地理定位。

请注意我在循环中使用相同的代码段来每天对数百个地址进行地理定位,并且它在大多数地址中都能正常工作;只在某些地址上显示出类似的问题。

2 个答案:

答案 0 :(得分:4)

由于侧栏中建议的StackOverflow相关问题,找到了https://stackoverflow.com/a/10302440/2717254线程找到的解决方案: - )

问题是区域偏差。我将?region = it添加到了URL中,结果现在是连贯的。

在添加该参数之前,由于我的浏览器发送的标题(在Win7意大利语中使用意大利语),Google在网页浏览器中加载页面时可能会猜到我。当我从PHP发出请求时,会发送更少的标题,并且Google可能认为这是一台en-US PC或类似的东西... :)

同样从地址中删除邮政编码也会在我的PHP脚本和我的网络浏览器中提供一致的结果,但我认为?region =它是最干净且逻辑上正确的解决方案。

答案 1 :(得分:0)

就我而言,我使用语言而不是区域来解决它:language = it(https://developers.google.com/maps/faq#languagesupport