我的javascript代码循环访问一些用户数据,并将每个用户数据作为标记添加到容器中。然后它将该容器添加到诺基亚地图,并使用Display zoomTo缩放到容纳所有标记的容器的边界框。 然而,在这之后,地图只会自动缩放回来。 zoomTo调用是我执行的最后一个代码,因此看起来很奇怪。
this.finishMapping = function () {
map.objects.add(multiMapContainer);
var markerHopefully = multiMapContainer.objects.get(0);
$.ajax({
dataType: "jsonp",
url: "https://route.api.here.com/routing/7.2/calculateroute.json?app_id=WgevZ2m4AF8WHx1TY6GS&app_code=G11AO2dbvCRTdCjfTf-mUw&waypoint0=geo!" + markerHopefully.coordinate.latitude + "," + markerHopefully.coordinate.longitude + "&waypoint1=geo!" + markerHopefully.coordinate.latitude + "," + markerHopefully.coordinate.longitude + "&mode=fastest;car;",
success: function (data) {
onRouteCalculated(data)
},
jsonp: "jsoncallback"
});
function onRouteCalculated(data) {
if (data.response) {
var position = data.response.route[0].waypoint[0].mappedPosition;
var coordinate = new nokia.maps.map.StandardMarker([position.latitude, position.longitude]);
var tempContainer = new nokia.maps.map.Container();
tempContainer.objects.add(coordinate);
map.zoomTo(multiMapContainer.getBoundingBox().merge(tempContainer.getBoundingBox()), false);
}
}
}
我在Chrome中通过它进行了调试,我可以看到zoomTo实际上会缩放到正确的边界框,但是在我点击“继续”按钮后它会跳回到最高缩放级别。
答案 0 :(得分:3)
我最近遇到过类似的问题。基本问题是<DIV>
的包含map
本身是在地图初始化期间初始化的。我的问题很复杂,因为map.zoomTo()
无论如何在地图初始化期间都不起作用(因为2.5.3地图加载总是异步的)
问题的症结在于我试图在0x0像素地图上使用zoomTo()
,因为<DIV>
尚未显示 - 因此我最终得到zoomLevel
零地图。
解决方案是将监听器添加到地图中,如下所示:
map.addListener("displayready", function () {
if(bbox){map.zoomTo(bbox, false);}
});
map.addListener("resize", function () {
if(bbox){map.zoomTo(bbox, false);}
});
并在收到每个bbox
时设置coordinate
参数,如下所示:
function onCoordinateReceived(coordinate){
if(bbox){
bbox = nokia.maps.geo.BoundingBox.coverAll([
bbox.topLeft, bbox.bottomRight, coordinate]);
} else {
bbox = nokia.maps.geo.BoundingBox.coverAll([coordinate]);
}
map.zoomTo(bbox, false);
}
那样:
map
已经初始化并显示zoomTo()
中的onCoordinateReceived()
将会触发map
在onCoordinateReceived()
之后完成初始化,zoomTo()
听众中的displayready
将会触发。<DIV>
更新最后一次发生,zoomTo()
侦听器中的resize
将会触发,这将从缩放的地图变为“右 “缩放级别。