如何对 Google Maps API 进行跨域 AJAX 调用?

IT技术 javascript google-maps cross-domain jsonp google-maps-api-3
2021-02-01 02:40:04

我正在尝试对Google Maps Geocoding webservice进行 jQuery$.getJSON调用,但由于跨域安全问题,这不起作用。

我一直无法在网上弄清楚,但我已经阅读了一些关于 Google Javascript API 或 JSONP 的内容,但到目前为止还没有明确的答案......

有人可以启发我吗?

谢谢!

1个回答

当 Google Maps为 JavaScript提供全功能的客户端地理编码 API 时我看不出使用服务器端地理编码 Web 服务的优势

首先,这会自动解决您的同源问题,此外,请求限制将按客户端 IP 地址计算,而不是按服务器 IP 地址计算,这对于流行站点来说可能会产生巨大的差异。

这是一个使用 JavaScript Geocoding API v3 的非常简单的示例:

<script src="http://maps.google.com/maps/api/js?sensor=false"></script>

<script type="text/javascript">     
   var geocoder = new google.maps.Geocoder();
   var address = 'London, UK';

   if (geocoder) {
      geocoder.geocode({ 'address': address }, function (results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
            console.log(results[0].geometry.location);
         }
         else {
            console.log("Geocoding failed: " + status);
         }
      });
   }    
</script>

如果出于某种原因您仍然想使用服务器端 Web 服务,您可以设置一个非常简单的反向代理如果您使用的是 Apache ,也许可以使用mod_proxy这将允许您为 AJAX 请求使用相对路径,而 HTTP 服务器将充当任何“远程”位置的代理。

在 mod_proxy 中设置反向代理的基本配置指令是 ProxyPass。您通常会按如下方式使用它:

ProxyPass     /geocode/     http://maps.google.com/maps/api/geocode/

在这种情况下,浏览器可以向 发出请求,/geocode/output?parameters但服务器将通过充当对 的代理来提供服务http://maps.google.com/maps/api/geocode/output?parameters

@wenbert:是的,我确实在几次中注意到了这一点。我什至发现一些地图图像(卫星和路线图)与 maps.google.com 和 Maps API 略有不同。例如,在比较 maps.google.com 和 Maps API 的图像时,我发现整个岛屿的边界向北偏移约 100m。
2021-03-15 02:40:04
@Daniel Vassallo,与maps.google.com/maps/place相比,您是否注意到使用 API 的差异使用该 URL 时我得到了更好的结果。你有关于这部分的更多信息吗?例如,谷歌可以找到这个:bit.ly/9wxOL2但是我已经尝试使用 API 定位相同的位置几天了,但没有任何成功。
2021-03-28 02:40:04
使用此方法的问题在于,您很快就会达到可以发出的请求数量的限制,因此服务器端最好能够缓存它。
2021-03-29 02:40:04
@Daniel Vassallo,我明白了。谢谢,但我正在寻找的是我的国家(菲律宾)的本地企业。似乎 maps.google.com 也使用 Localsearch/Places 进行搜索,而 API 仅搜索地图。您是否尝试过在 Localsearch 中使用 Maps V3 API?我刚刚在 Google 地方信息中申请了一个钥匙,但我不知道我是否能得到它。我的理想设置是 Google Maps V3 + Google Places。你做过类似的事情吗?
2021-04-04 02:40:04
谢谢,我不知道有这样一个类的存在。它解决了我的问题:)
2021-04-11 02:40:04