【问题标题】:openlayers and google geocoderopenlayers 和谷歌地理编码器
【发布时间】:2011-02-08 08:09:17
【问题描述】:

我正在尝试将 google 地理编码服务与 openlayer 地图一起使用。这应该毫无问题地工作......不是吗? 我使用的代码就像 googles geocode api doc 上的示例:

function geoCode(){
  var adresse = $("observation_location_text").getValue();
  var geoCoder = new google.maps.Geocoder();
  alert(adresse);
  geoCoder.geocode( { 'address': address}, function(results, status) {                                                                                                                                                                  
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      marker.moveTo(results[0].geometry.location);
      marker.display(true);
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });  }

由于某种原因,我没有得到 Geocoder 对象。永远不会执行带有地址的警报。

期待一些提示 一月

【问题讨论】:

  • 哦,顺便说一句,地图和标记变量来自 openlayers,所以这可能不起作用。创建新 Geocoder 对象的调用未返回。
  • 您需要注意的是,谷歌地理编码器的 TOS 不幸地规定您使用坐标映射到谷歌地图上。 " 注意:Geocoding API 只能与 Google 地图一起使用;禁止在地图上不显示地理编码结果。有关允许使用的完整详细信息,请参阅 Maps API 服务条款许可限制。"

标签: javascript ruby-on-rails openlayers google-geocoder


【解决方案1】:

尝试从 OpenLayers 中删除任何依赖项,看看它是否有效。您应该能够使用普通的 Google Maps API 创建地理编码器对象。

我注意到的一件小事是,您将输入中的值读取到名为“adresse”的变量中,但传递给名为“address”的地理编码器变量。如果它只是一个错字并且没有声明第二个变量,则会出现脚本错误并且代码停止执行。可能这就是为什么永远不会创建地理编码器对象的原因。

【讨论】:

  • 是的,你是对的,这是一个错字。尽管如此,对 google.maps.Geocoder 的调用是错误的。我将调用放入加载时调用的 init 函数(上面的函数由 ajax 事件调用)。我现在得到的是“未捕获的参考错误:未定义谷歌”我包括 maps.google.com/maps/api/js?sensor=false 和带有我的 api 密钥的地图 api
  • 很明显,问题是google api没有正确加载。您指定的 url 在 OpenLayers 示例中使用,对我来说效果很好。在 v3 中,您不需要使用 api 密钥。不用钥匙试试。
  • true 地图在没有钥匙的情况下也可以工作......但我仍然没有得到 Geocoder 对象:(
【解决方案2】:

阅读第一个答案的 cmets - 您确定在运行“new google.maps.Geocoder()”时 Google Maps 文件已加载?

你说代码在加载时被调用,你是怎么做的?由于您使用的是 jQuery,所以应该在 $(document).ready() 中完成。

【讨论】:

    【解决方案3】:

    我正在尝试做和你一样的事情。这是我的问题,它可以帮助你link

    另外,如果您尝试在 openlayers 图层上传递地理编码点,请注意 openlayers 矢量图层上的点类似于 (lon, lat) 但来自 Google 地理编码的点类似于 (lat,lon)。我从谷歌页面复制:“位置包含地理编码的纬度、经度值。请注意,我们将此位置作为 LatLng 对象返回,而不是作为格式化字符串”(Googles page

    但我认为问题在于“不幸的是,谷歌地理编码器要求您使用坐标映射到谷歌地图上。”正如 El Duderino 所说......

    哦,另外,如果您使用 Drupal,请检查 this 出...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多