ЗДЕСЬ Maps JavaScript API zoomTo Bounding Box BUG

Я заметил некоторое поведение в HERE / Nokia Maps JavaScript API, которое, похоже, является ошибкой, которая проявляется при увеличении масштаба до ограничивающей рамки контейнера. Это легко увидеть в следующем примере, который я тестировал как в Linux, так и в Windows с использованием последней версии Firefox.

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. Обратите внимание на два стандартных маркера на экране и предупреждение, которое показывает координаты верхнего левого и нижнего правого положения ограничивающей рамки:

TL: 43° 0' 0" N, 116° 0' 0" W / BR: 30° 0' 0" N, 63° 0' 0" E

Обратите внимание, что они соответствуют Айдахо (вверху слева) и Афганистану (внизу справа). Когда вы нажмете ОК в предупреждении, вы будете увеличены до прекрасного вида этих двух точек на карте с Атлантическим океаном посередине.

Теперь перезагрузите страницу и нажмите SHOW_BAD_ZOOM. Два стандартных маркера находятся почти в одном месте: точка в Афганистане сдвинута на одну ступень к востоку (что вы можете видеть в коде JavaScript). Обратите внимание на TL и BR ограничивающей рамки ....

TL: 43° 0' 0" N, 64° 0' 0" E / BR: 30° 0' 0" N, 116° 0' 0" W

Наш верхний левый угол равен 43 градусам северной широты (около Айдахо), но 64 восточной границы (около Афганистана), а нижний правый угол "перевернут" аналогичным образом. Что я ожидал увидеть здесь после нажатия кнопки "ОК", так это разумного увеличения масштаба, на этот раз с Тихим океаном посередине и показанными обоими стандартными маркерами. Что я получаю, так это мертвая точка Тихого океана, но я увеличен до максимального уровня масштабирования. Теперь уменьшите масштаб примерно в 17 раз, и вы увидите на карте Афганистан (со стандартным маркером) и США (без стандартного маркера)! Уменьшите масштаб еще 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» сейчас находится внизу справа, тогда как в сценарии «ПЛОХО» она была в верхнем левом углу ...


person superwesman    schedule 25.03.2014    source источник


Ответы (1)


ФИКСИРОВАННЫЙ! оказывается, я использовал более старую версию (2.2.3) API. В версии 2.5.4 это работает должным образом.

person superwesman    schedule 25.03.2014