2

我有一个 Google Maps 小部件在 Java 中的 JSF2 项目提供的 .xhtml 页面上工作。地图显示,我有一个添加标记的功能,效果很好。但是,任何使用 Geocoder 的尝试似乎都会导致返回“错误”状态。Google Maps API 在它的五个可能的“status”变量返回值候选中没有提到这样的错误状态。

Followng 是一个部署的 .js 文件,有问题的有问题的函数是 codeAddress()。与 codeAddress() 类似的代码可以在我可以找到的其他地方在线使用,因此它必须与调用它的情况有关。鉴于地图显示得很好,并且我可以放置标记,我的期望是我的会话很好。这让我感到困惑:(有谁知道“错误”可能来自什么??

var map;
var marker;
var geocoder;

function placeMarker(location) {
 if (!marker) {
      marker = new google.maps.Marker({
          position: location,
          map: map
      });
  } else {
      marker.setPosition(location);
  }
  map.setCenter(location);
  var field = document.getElementById("portCreate:coordinate");
  field.value = "POINT (" + location.lat() + " " + location.lng() + ")";
}

function initialize() {
    var mapOptions = {
        center : new google.maps.LatLng(55.761123, 13.084717),
        zoom : 5,
        mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(
    document.getElementById("map"), mapOptions);

    google.maps.event.addListener(map, 'click', function(event) {
        placeMarker(event.latLng);
    });

    setMarker(document.getElementById("portCreate:coordinate"));

    geocoder = new google.maps.Geocoder();
}

function setMarker(field) {
    if (field.value) {
        var regex = /POINT.+?([-0-9\.]+).+?([-0-9\.]+)/;
        var matches = regex.exec(field.value);
        placeMarker(new google.maps.LatLng(Number(matches[1]), Number(matches[2])));
    }
}

function codeAddress(address) {
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
        } else {
            alert("Geocode was not successful for the following reason: " + status + "\nFor address " + address);
        }
    });
}

function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "https://maps.googleapis.com/maps/api/js?key=<API key here>&sensor=false&callback=initialize";
  document.body.appendChild(script);
}

window.onload = loadScript;
4

4 回答 4

2

今天遇到同样的问题后,我记得我没有链接到 API,而是将代码下载为 .js。将其更改为链接后,它再次起作用。我认为谷歌会定期更新脚本,如果它有任何版本冲突,它们会返回错误状态。

于 2013-03-27T18:54:28.613 回答
1

javascript/geocoding的文档将“错误”显示为可能的结果:

“ERROR”表示请求超时或联系 Google 服务器时出现问题。如果您再试一次,请求可能会成功。

于 2017-11-29T21:44:58.910 回答
0

我有同样的问题。我正在使用 ASP .Net 应用程序。在我将 ASP .Net 按钮控件更改为 HTML 输入按钮后,它现在可以工作了。不确定问题出在哪里。

<input type="button" value="Geocode" onclick="codeAddress()">
于 2014-03-19T01:01:15.997 回答
0

我正在解决一个类似的问题,我可以通过在返回响应之前取消 google API http 请求来重新创建错误状态。

于 2015-11-30T19:44:07.907 回答