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

Constant error return on google maps maxZoomService.getMaxZoomAtLatLng()

本文关键字:maxZoomService getMaxZoomAtLatLng 返回 错误 常量 谷歌地图      更新时间:2023-09-26

我在谷歌maxZoomService.getMaxZoomAtLatLng上遇到了一个大问题,因为它绝对随机地决定返回错误状态,有时连续10次,有时有效,但我不明白为什么缩放有时会失败。

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

下面是我的示例代码:

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}",但由于某种原因,它在谷歌地图js代码中被转换成了一个错误。

然后我试着绕过谷歌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()进行未定义/null检查得到这段代码后,我认为投影为null可能与maxZoomService不断失败的原因相同(可能是由于一些潜在的定时问题),然后我再次尝试了maxZoomServices,但保持了未定义的检查。这次成功了。请你自己试试,但现在对我有效。

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

2016年5月5日更新:谷歌似乎做出了一些改变,发布了新的API版本。我得到了更好的结果:

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