【问题标题】:Google Maps API returns "Invalid Request" in a valid requestGoogle Maps API 在有效请求中返回“无效请求”
【发布时间】:2013-10-30 10:33:47
【问题描述】:

我正在尝试为我的数据库对一堆地址进行反向地理编码。我有大约 200 个地址,其中一半的工作就像一个魅力......我确实将谷歌地图请求放在一个循环中并且它工作。大约有 100 个地址返回了“无效请求”消息。我回显了请求 url 并将其放入我的浏览器中,它返回了“状态:确定”和所有数据。为什么我的脚本返回无效请求而另一个浏览器选项卡返回正常?

这就是我使用的功能:

function getLatLon($strasse, $plz) {
    $inhalt = simplexml_load_file('http://maps.googleapis.com/maps/api/geocode/xml?address='.$strasse.',+'.$plz.'&sensor=true');

    $geo['lat'] = $inhalt->result->geometry->location->lat;
    $geo['lon'] = $inhalt->result->geometry->location->lng;

    return $geo;
}

明确的请求 url 如下所示: http://maps.googleapis.com/maps/api/geocode/xml?address=Dreik%C3%B6nigstra%C3%9Fe+12,+Erlangen&sensor=true

如果有人可以帮助我或检测错误,那就太棒了:) 问候, 菲利普

【问题讨论】:

  • 检查 $strasse 和 $plz 对于那些不起作用的输入是否有效(尝试将它们与那些起作用的输入进行比较),如果它在某些时候有效,这很可能是问题。
  • 嗨,是的,我也这么认为,但即使消除了所有空格和特殊字符,也没有任何变化:(

标签: php google-maps google-api reverse-geocoding


【解决方案1】:

我很确定错误是由您发送的未编码的德语字符引起的。当您通过浏览器执行此操作时,URL 将自动编码,但不会由您的 PHP 脚本自动编码。

为此使用rawurlencode

$inhalt = simplexml_load_file('http://maps.googleapis.com/maps/api/geocode/xml?'.
                              'address='.rawurlencode($strasse).',+'.
                              rawurlencode($plz).'&sensor=true');

【讨论】:

  • 嗨,当你写这篇文章时,我已经开始工作了,但你是对的。我正在发送未编码的字符串,而 php 无法替换任何特殊字符。将所有内容都放在 utf-8 上后,它就起作用了。谢谢!
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2011-01-27
  • 2018-07-05
  • 2019-03-09
相关资源
最近更新 更多