Javascript Nokia/HERE“地图”返回到0级“地图后缩放”。zoomTo

Javascript Nokia/HERE“地图”返回到0级“地图后缩放”。zoomTo,javascript,here-api,Javascript,Here Api,我的javascript代码循环遍历一些用户数据,并将每个数据作为标记添加到容器中。然后,它将该容器添加到诺基亚地图中,并使用显示缩放按钮缩放到包含所有标记的容器的边界框。 然而,就在那之后,地图会自动缩小。zoomTo调用是我执行的最后一段代码,所以看起来好像发生了什么奇怪的事情 this.finishMapping = function () { map.objects.add(multiMapContainer); var markerHopefu

我的javascript代码循环遍历一些用户数据,并将每个数据作为标记添加到容器中。然后,它将该容器添加到诺基亚地图中,并使用显示缩放按钮缩放到包含所有标记的容器的边界框。 然而,就在那之后,地图会自动缩小。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确实可以缩放到正确的边界框,但在我点击“继续”按钮后,它立即跳回最高的缩放级别。

我最近遇到了类似的问题。基本问题是
映射的
本身在映射初始化期间被初始化。我的问题更加复杂,因为
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()
    将启动,这将从缩小的贴图更改为“右”缩放级别

啊,太棒了,这正是我需要的。我不知道displayready的存在,也没有意识到我的容器正在自我调整大小。