【问题标题】:Sorry, we have no imagery here - Google Satellite Map抱歉,我们这里没有图像 - Google 卫星地图
【发布时间】:2019-08-02 14:43:37
【问题描述】:

我在应用程序上使用 Google 卫星地图。它工作正常,突然地图图像开始不显示。地图显示的不是地形图像,而是消息“抱歉,我们这里没有图像”。

这发生在我的办公室 IP 和其他测试人员的 IP 上。如果我从另一个 IP 或移动数据访问它,它可以工作并显示卫星图像。我不确定谷歌是否会在地图上连续访问的情况下阻止 IP。

我还可以看到很多访问图像的错误

单击加载图像的链接时,我收到如下错误页面,而不是地图图块图像。

感谢任何有关此问题的线索

【问题讨论】:

  • 这是在哪里发生的?什么坐标?什么缩放级别?
  • 它发生在所有地方,缩放级别设置为 11,但它发生在所有缩放级别。
  • 您很可能被 Google 反滥用系统触发了自动屏蔽。为了解锁您的 IP,您应该通过 console.cloud.google.com/google/maps-apis/support 联系 Google 支持
  • 请提供一个minimal reproducible example 来证明您的问题。

标签: javascript html google-maps google-maps-api-3


【解决方案1】:

为避免显示这些错误,如果它们是由于使用的缩放级别对于您正在查看的区域来说太高,您可以使用MaxZoomService。请注意,以下代码 sn-p 不起作用,因为显然无法在没有 API 密钥的情况下访问服务。

复制代码并使用有效的 API 密钥对其进行测试。

var map, maxZoomService;

function initialize() {

  maxZoomService = new google.maps.MaxZoomService();

  var myLatLng = new google.maps.LatLng(0, 0);
  var mapOptions = {
    zoom: 15,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.SATELLITE
  };

  map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

  var marker = new google.maps.Marker({
    position: myLatLng,
    map: map
  });

  google.maps.event.addListenerOnce(map, 'idle', function() {

    checkZoom();
  });

  google.maps.event.addListener(map, 'zoom_changed', function() {

    checkZoom();
  });
}

function checkZoom() {

  let zoom = map.getZoom();

  maxZoomService.getMaxZoomAtLatLng(map.getCenter(), function(response) {
  
    if (response.status !== 'OK') {
    
      alert('maxZoomService error: ' + response.status);
      document.getElementById('max-zoom').innerHTML = 'n/a';
      document.getElementById('max-zoom-service').innerHTML = response.status;
      
    } else {

      if (response.zoom < zoom) {

        map.setZoom(response.zoom);
        
        document.getElementById('max-zoom').innerHTML = response.zoom;
        document.getElementById('max-zoom-service').innerHTML = response.status;
      }
    }
    
    document.getElementById('curr-zoom').innerHTML = map.getZoom();
  });
}

initialize();
#map-canvas {
  height: 130px;
}

span {
  font-weight: bold;
}
<div id="map-canvas"></div>
Current Zoom Level: <span id="curr-zoom"></span><br>
Max Zoom Level: <span id="max-zoom"></span><br>
Max Zoom Service Status: <span id="max-zoom-service"></span>

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>

如果缩放级别不是问题,请确保您使用的是有效的 API 密钥。无论如何,可能值得创建一个新密钥并再次尝试使用该密钥。如果这仍然不起作用,我会尝试直接与 Google 联系以提供更多信息,因为您的网络 IP 或 IP 范围可能由于某种原因被 Google 禁止。

【讨论】:

  • 感谢您的回答,我已经尝试了您的代码,但仍然有问题。似乎这不是缩放级别的问题。
  • 然后检查您的密钥(您使用的是有效密钥吗?)如果这不是问题,请尝试直接联系 Google。
【解决方案2】:

我知道这是一个老问题,但是我最近也遇到了这个错误。所以,就我而言,问题在于我使用的 API 脚本的版本。

我正在回答这个问题,因为我在这里没有找到这个解决方案,所以,以防万一有人遇到同样的错误。

只需将 v=3.35(版本号)添加到网址即可。

例如:https://maps.googleapis.com/maps/api/js?v=3.35&key=API_KEY...

他们在这里解释: https://developers.google.com/maps/documentation/javascript/versions#an-update-affected-my-application

【讨论】:

  • 这个 2019 年 7 月 26 日发生的“我们这里没有图像”问题已经得到修复。这也在 Google 的公共问题跟踪器中报告:issuetracker.google.com/issues/138408915 该问题是由于最近 Google 工程师已根据公共错误修复的 Maps JavaScript API 版本 3.37 翻转所致。如果新版本的错误在您端仍然可以重现,您可以在上面的问题链接中评论,以便工程师进一步调查。
【解决方案3】:

感谢您的所有回复,我能够找到并解决真正的问题。在此处添加详细信息以供参考。

我已联系 Google 支持部门提供请求详细信息,他们能够找出确切的问题。原因是他们的图像服务器阻止了来自该项目(混合移动项目 - Android)的请求,因为它发现也有来自该项目的无效请求。无效请求称为没有正确标头信息的请求。

基于该信息,我可以发现项目中的缓存机制正在尝试缓存图像,并且发送无效请求。向该缓存机制添加适当的标头永远解决了这个问题。

【讨论】:

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