我的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实际上确实可以缩放到适当的边界框,但是在我点击“继续”按钮后,它立即跳回到了最高缩放级别。

最佳答案

我最近遇到了类似的问题。基本问题是,在映射初始化期间,<DIV>的包含map本身已被初始化。我的问题很复杂,因为map.zoomTo()在地图初始化期间始终无法工作(因为2.5.3地图加载始终是异步的)

问题的症结在于,由于尚未显示zoomTo(),因此我试图在0x0像素图上使用<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()将触发
如果maponCoordinateReceived()之后完成初始化,则会触发zoomTo()侦听器中的displayready
如果<DIV>更新最后一次发生,则zoomTo()侦听器中的resize将触发,这将从缩小的地图更改为“右”的缩放级别。

09-20 00:32