javascript - 谷歌地图上的常量错误返回 maxZoomService.getMaxZoomAtLatLng()

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

我在使用 googles maxZoomService.getMaxZoomAtLatLng 时遇到了一个大问题,因为它绝对随机决定返回错误状态,有时连续 10 次,有时有效,但我想不通弄清楚为什么缩放有时会失败。

我试图通过多次重试请求来解决它,但似乎如果我在第一次请求时出错,我也会在所有重试中得到错误。同时,我面临另一个 topic 中列出的问题但这不是我的主要问题,它也经常发生。

按照我的示例代码:

setMap : function() {
    wirkonf.frontend.triggerLoadAnim();
    wirkonf.storage.mapOptions = {
        zoom: 11,
        center: new google.maps.LatLng(wirkonf.storage.geoCoords.lat, wirkonf.storage.geoCoords.lng),
        mapTypeId: google.maps.MapTypeId.SATELLITE,
        disableDefaultUI: true
    };
    wirkonf.storage.map = new google.maps.Map(document.getElementById('gmc'),
    wirkonf.storage.mapOptions);
    wirkonf.storage.map.setTilt(0);
    var maxZoomService = new google.maps.MaxZoomService();
    maxZoomService.getMaxZoomAtLatLng(wirkonf.storage.mapOptions.center,
        function(response){
            wirkonf.storage.mapZoomMax = response.zoom;
            var ret;
            if (response.zoom > 20) {
                ret = 20;
            } else {
                ret = response.zoom;
            }
            wirkonf.storage.mapZoomCurr = ret;
            wirkonf.storage.map.setZoom(ret);
        }
    );
},

所以我的问题是,有没有其他人遇到过这个问题,或者甚至知道解决它的好方法?

最佳答案

我遇到了同样的问题,但注意到实际的 GET 请求实际上返回了有效的 json 响应“{zoom:19}”,但由于某种原因在 google maps js 代码中被转换为错误。

然后我尝试简单地绕过 google javascript 并直接访问该服务:

var myMap = {
    maxZoomServiceCallback: function(resp) {
        gmap.setZoom(resp.zoom);
    },
    isAerialAvailable: function() {
        var ll = gmap.getCenter();
        var proj = gmap.getProjection();
        if(!proj) {
            setTimeout(function(){myMap.isAerialAvailable();},100);
            return;
        }   
        var p = proj.fromLatLngToPoint(new google.maps.LatLng(ll.lat, ll.lon));
        p.x=Math.floor(p.x / 256 * 8388608);
        p.y=Math.floor(p.y / 256 * 8388608);
        jQuery.getScript("https://khm.googleapis.com/mz?v=199&x="+p.x+"&y="+p.y+"&z=23&token=0&callback=myMap.maxZoomServiceCallback");
        //maxZoomService.getMaxZoomAtLatLng({lng: ll.lon, lat: ll.lat}, this.maxZoomServiceCallback)
    }
}

在我通过 gmap.getProjection() 的未定义/空检查获得这段代码后,我假设投影为空可能与 maxZoomService 不断失败的原因相同(可能是由一些潜在的计时问题引起的),我然后再次尝试 maxZoomService,但保留未定义的检查。这次成功了。请自己尝试一下,但它现在对我有用。

编辑 14/4:此后我再次删除了 maxZoomService.getMaxZoomAtLatLng 并返回到我的自定义 jQuery.getScript 调用,因为它一直有效。

2016 年 5 月 5 日更新:Google 似乎进行了一些更改并发布了新的 API 版本。我通过以下方式获得了更好的结果:

jQuery.getScript("https://khm.googleapis.com/mz ?v=203&x="+p.x+"&y="+p.y+"&z=23&token=0&callback=myMap.maxZoomServiceCallback"

关于javascript - 谷歌地图上的常量错误返回 maxZoomService.getMaxZoomAtLatLng(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28339217/

相关文章:

javascript - 选择 p 文本 jquery

javascript - 如何在新加载的页面上使用相同的 JavaScript 代码(来自重定向)

java - 从 java/Android Studio 中的 geojson 特征集合中提取坐标 lat lng

flutter - 如何从 Lat Long 值中获取地址并显示到文本字段中

php - 公共(public)交通中的图论

javascript - 在 SAPUI5/OpenUI5 中创建和删除 View 时发生内存泄漏

javascript - 用jQuery检查空格键是否被按下并且鼠标是否在同时移动?

ios - Swift/ios/Google map - 添加 UISlider 时出现 "Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"

javascript - loadGeoJson 不工作

javascript - Google Maps API V3 构建包含多个邮政编码的多边形