我在HERE / Nokia Maps JavaScript API中发现了一些似乎是在缩放到Container的边界框时出现的错误的行为。在下面的示例中可以很容易地看到这一点,我使用最新版本的Firefox在Linux和Windows中进行了测试。
bug.html
<html>
<head>
<script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js?with=maps"></script>
</head>
<body>
<input type=button value=SHOW_GOOD_ZOOM onclick="good_zoom();" />
<input type=button value=SHOW_BAD_ZOOM onclick="bad_zoom();" />
<div id="mapContainer" >
<script type="text/javascript" id="map" src="bug.js"></script>
</div>
</body>
</html>
bug.js
nokia.Settings.set("appId", "DemoAppId01082013GAL");
nokia.Settings.set("authenticationToken", "AJKnXv84fjrb0KIHawS0Tg");
var mapContainer = document.getElementById("mapContainer");
var container = new nokia.maps.map.Container();
var display = new nokia.maps.map.Display(mapContainer, {
center: [0, 0],
zoomLevel: 1,
components: [ new nokia.maps.map.component.ZoomBar() ]
});
var container = new nokia.maps.map.Container();
display.objects.add(container);
var point_in_idaho = new nokia.maps.geo.Coordinate(43, -116 );
var bad_afghanistan_point = new nokia.maps.geo.Coordinate(30, 64 );
var good_afghanistan_point = new nokia.maps.geo.Coordinate(30, 63 );
function bad_zoom() {
draw_and_zoom( point_in_idaho, bad_afghanistan_point );
}
function good_zoom() {
draw_and_zoom( point_in_idaho, good_afghanistan_point );
}
function draw_and_zoom( a, b ) {
container.objects.add( new nokia.maps.map.StandardMarker( a ) );
container.objects.add( new nokia.maps.map.StandardMarker( b ) );
alert("TL: " + container.getBoundingBox().topLeft + " / BR: " + container.getBoundingBox().bottomRight);
display.zoomTo( container.getBoundingBox() );
}
在浏览器中打开bug.html,然后点击SHOW_GOOD_ZOOM。请注意屏幕上的两个StandardMarkers以及显示Bounding Box的左上角和右下角坐标的警报:
TL:43°0'0“N,116°0'0”W / BR:30°0'0“N,63°0'0”E
请注意,这些对应于爱达荷(左上)和阿富汗(右下)。当您在警报上单击“确定”时,您将放大到地图中这两个点的漂亮视图,中间是大西洋。
现在重新加载页面并单击SHOW_BAD_ZOOM。两个StandardMarkers几乎在同一个地方:阿富汗的点已经向东移动了一个等级(你可以在JavaScript代码中看到)。请注意边界框的TL和BR ....
TL:43°0'0“N,64°0'0”E / BR:30°0'0“N,116°0'0”W
我们的左上角是43 North(靠近爱达荷州),但64 East(靠近阿富汗)和右下方同样是“倒置”。单击“确定”后,我期望在此处看到的是合理的放大,这次是中间的太平洋,并显示了两个StandardMarkers。我得到的是Pacfific Ocean死亡中心,但我已经放大了最大缩放级别。现在缩小~17次,您将在地图上看到阿富汗斯坦(使用StandardMarker)和美国(没有StandardMarker)!再缩小2-3次,你会在地图显示的左边看到我们的爱达荷标记。
这对我来说是一个非常明显的错误。当我们放大到容器的边界框时,无论我们如何计算边界框,我们显然都想在屏幕上保留容器中的项目。
真正有趣的是,如果我点击SHOW_BAD_ZOOM然后(不重新加载页面)点击SHOW_GOOD_ZOOM,我会得到一个很好的缩放/中心。请注意,边界框在此处坐标:
TL:43°0'0“N,116°0'0”W / BR:30°0'0“N,64°0'0”E
现在看看“64”是如何位于右下角,而在“坏”场景中,它位于左上方......
答案 0 :(得分:0)
修复!原来我使用的是旧版本(2.2.3)的API。使用2.5.4,这可以按预期工作。