谷歌地图 api 不再工作

Posted

技术标签:

【中文标题】谷歌地图 api 不再工作【英文标题】:google map api not working anymore 【发布时间】:2014-11-24 14:43:51 【问题描述】:

这段代码直到今天都运行良好:

navigator.geolocation.getCurrentPosition(
    function (pos) 
        var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
        console.log('ok');

        geocoder = new google.maps.Geocoder();            
        geocoder.geocode('latLng': latlng, function (results, status) 
            console.log('callback');
            console.log(status);
        );
    ,
    errorGetCurrentPositionCallback,
    enableHighAccuracy: true, timeout: 10000, maximumAge: 600000);        

我可以在控制台中看到“ok”消息,但看不到“callback”。完全没有错误,我使用了 0% 的配额。有些东西发生了变化,但在我的代码中没有。不再到达 console.log。你有什么想法吗?

【问题讨论】:

【参考方案1】:

您的函数会检查导航器是否可以找到 GPS 位置(这纯粹是设备/浏览器功能;不是 Google 服务)。 但是您的函数不会检查地理编码器的状态(这是一项 Google 服务)。

看看你的控制台是这样的:

navigator.geolocation.getCurrentPosition(
  function (pos) 
      var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
      console.log('Just before geocode is called');
      geocoder = new google.maps.Geocoder();            
      geocoder.geocode('latLng': latlng, function (results, status) 
          console.log('callback of geocoder called');
          if (status == google.maps.GeocoderStatus.OK) 
            console.log('Status is okay');
          
          else 
            console.log('Status is not okay, the reason: ' + status);
          
      );
  ,
  errorGetCurrentPositionCallback,
  enableHighAccuracy: true, timeout: 10000, maximumAge: 600000
);

这是一个有效的例子

<script src="http://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript">
    var map;
    function initialize() 
      var latlng = new google.maps.LatLng(50.45, 4.45);    // set your own default location.  This gets called if the parameters are left blank.
      var myOptions = 
        zoom: 15,
        center: latlng
      ;
      map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
    
    function errorGetCurrentPositionCallback() 
      console.log('Your device cannot find your location');
    
    // initiate Google Maps + request the position of the user.
    function page_loaded() 
      initialize();
      navigator.geolocation.getCurrentPosition(
        // success callback
        function (pos) 
          var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
          var accuracy = pos.coords.accuracy;
          map.setCenter(latlng);
          var marker = new google.maps.Marker(
            position: latlng, 
            map: map, 
            title: "You are here! (at least within a " + accuracy + " meter radius)"
          );
          console.log('Just before geocode is called');
          geocoder = new google.maps.Geocoder();            
          geocoder.geocode('latLng': latlng, function (results, status) 
            console.log('callback of geocoder called');
            if (status == google.maps.GeocoderStatus.OK) 
              console.log('Status is okay; you have the address of this location');
              // 
            
            else 
              console.log('Status is not okay, the reason: ' + status);
            
          );
        ,
        errorGetCurrentPositionCallback,
        enableHighAccuracy: true, timeout: 10000, maximumAge: 600000
      );
    
    google.maps.event.addDomListener(window, 'load', page_loaded);
</script>
<style>
#map-canvas 
  width: 500px;
  height: 400px;

</style>
<div id="map-canvas"></div>

【讨论】:

您好,谢谢您的回答,但它是我故意省略的“除了检查状态”相同的代码(对示例无用)。问题是没有到达“console.log('callback called')”行。所以之后检查状态是没有用的。出了点问题,但不在代码中。你有想法吗 ?有没有api的源代码? 我应该更彻底地检查一下。顺便说一句,您是否在 errorGetCurrentPositionCallback 中记录了一些内容?有什么有趣的吗? 不,我在 errorGetCurrentPositionCallback 中什么都没有。我认为回调没有在谷歌代码中触发。但为什么呢? 我添加了一个功能示例 我发现了错误。我已经覆盖了 eval 函数,谷歌正在使用它。所以现在它又开始工作了。谢谢

以上是关于谷歌地图 api 不再工作的主要内容,如果未能解决你的问题,请参考以下文章

android-谷歌地图停止工作

谷歌地图 API V3 fitBounds() 不工作

谷歌地图 api findplace 请求无法正常工作

无法使用谷歌地图 API JS 在英特尔 xdk 中看到谷歌地图

谷歌地图 api 密钥有效,但道路 apikey 无效

如何使用 settimeout 函数检查谷歌地图 API 是不是已完全加载?