诺基亚/ HERE地图在map.zoomTo之后回到0级缩放

时间:2013-12-17 20:59:36

标签: javascript here-api

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

1 个答案:

答案 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()将会触发
  • 如果maponCoordinateReceived()之后完成初始化,zoomTo()听众中的displayready将会触发。
  • 如果<DIV>更新最后一次发生,zoomTo()侦听器中的resize将会触发,这将从缩放的地图变为“ “缩放级别。