Javascript Nokia/HERE“地图”返回到0级“地图后缩放”。zoomTo
我的javascript代码循环遍历一些用户数据,并将每个数据作为标记添加到容器中。然后,它将该容器添加到诺基亚地图中,并使用显示缩放按钮缩放到包含所有标记的容器的边界框。 然而,就在那之后,地图会自动缩小。zoomTo调用是我执行的最后一段代码,所以看起来好像发生了什么奇怪的事情Javascript Nokia/HERE“地图”返回到0级“地图后缩放”。zoomTo,javascript,here-api,Javascript,Here Api,我的javascript代码循环遍历一些用户数据,并将每个数据作为标记添加到容器中。然后,它将该容器添加到诺基亚地图中,并使用显示缩放按钮缩放到包含所有标记的容器的边界框。 然而,就在那之后,地图会自动缩小。zoomTo调用是我执行的最后一段代码,所以看起来好像发生了什么奇怪的事情 this.finishMapping = function () { map.objects.add(multiMapContainer); var markerHopefu
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确实可以缩放到正确的边界框,但在我点击“继续”按钮后,它立即跳回最高的缩放级别。我最近遇到了类似的问题。基本问题是
映射的
本身在映射初始化期间被初始化。我的问题更加复杂,因为map.zoomTo()
在映射初始化期间无论如何都不工作(因为2.5.3映射加载总是异步的)
问题的关键是我试图在0x0像素贴图上使用zoomTo()
,因为
尚未显示-因此我最终得到了zoomLevel
零贴图
解决方案是向映射添加侦听器,如图所示:
map.addListener("displayready", function () {
if(bbox){map.zoomTo(bbox, false);}
});
map.addListener("resize", function () {
if(bbox){map.zoomTo(bbox, false);}
});
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);
}
并在接收到每个坐标时设置bbox
参数,如图所示:
map.addListener("displayready", function () {
if(bbox){map.zoomTo(bbox, false);}
});
map.addListener("resize", function () {
if(bbox){map.zoomTo(bbox, false);}
});
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);
}
以便:
- 如果地图已初始化并显示,
中的oncoordinated()
将触发zoomTo()
- 如果
在map
之后完成初始化,则OnCoordinatedReceived()
侦听器中的displayready
将启动zoomTo()
- 如果上次更新
,则调整大小
侦听器中的
将启动,这将从缩小的贴图更改为“右”缩放级别zoomTo()