gpt4 book ai didi

javascript - 诺基亚/HERE map 在 map.zoomTo 之后返回到 0 级缩放

转载 作者:行者123 更新时间:2023-11-30 12:51:59 26 4
gpt4 key购买 nike

我的 javascript 代码循环遍历一些用户数据并将每个数据作为标记添加到容器中。然后将该容器添加到诺基亚 map ,并使用 Display zoomTo 缩放到包含所有标记的容器的边界框。然而,就在这发生之后, map 就会自行缩放到原来的位置。 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 初始化期间被初始化。我的问题很复杂,因为 map.zoomTo()无论如何在 map 初始化期间不起作用(因为 2.5.3 map 加载始终是异步的)

问题的症结在于我试图使用 zoomTo()<DIV> 以来在 0x0 像素 map 上还没有显示 - 因此我得到了一个 zoomLevel零映射。

解决方案是如图所示向 map 添加监听器:

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监听器将开火,这将从缩小 map 变为“正确”缩放级别。

关于javascript - 诺基亚/HERE map 在 map.zoomTo 之后返回到 0 级缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com