google 地图 maxZoomService.getMaxZoomAtLatLng() 上的常量错误 return
Constant error return on google maps maxZoomService.getMaxZoomAtLatLng()
我在使用 googles maxZoomService.getMaxZoomAtLatLng
时遇到了一个大问题,因为它绝对随机地决定 return 错误状态,有时连续 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 请求实际上 return 具有有效的 json 响应“{zoom:19}”,但由于某种原因在内部转换为错误google 地图 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)
}
}
在我使用 undefined/null 检查 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"
我在使用 googles maxZoomService.getMaxZoomAtLatLng
时遇到了一个大问题,因为它绝对随机地决定 return 错误状态,有时连续 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 请求实际上 return 具有有效的 json 响应“{zoom:19}”,但由于某种原因在内部转换为错误google 地图 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)
}
}
在我使用 undefined/null 检查 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"