2013-12-17 3 views
1

Мой код javascript проходит через некоторые пользовательские данные и добавляет каждый в качестве маркера в контейнер. Затем он добавляет этот контейнер к карте Nokia и использует Display ZoomTo для увеличения до ограничивающей рамки контейнера, содержащего все маркеры. Однако, сразу после этого карта просто масштабируется полностью назад. Звонок zoomTo является последним из моего кода, который выполняется, поэтому кажется, что происходит что-то странное.Карты Nokia/ЗДЕСЬ возвращаются к уровню 0 zoom после 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 масштаба для правильного ограничивающего прямоугольника, а затем сразу же после того, как я нажал на кнопку «Продолжить», он возвращается к самому высокому уровню масштабирования.

ответ

3

Недавно я столкнулся с подобной проблемой. Основная проблема заключалась в том, что содержащее <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() сгорит
  • Если map завершает intialization после onCoordinateReceived(), в zoomTo() в displayready слушателю будет срабатывать.
  • Если <DIV> обновления происходит наконец, zoomTo() в resize слушателя будет срабатывать, который будет изменять от Уменьшенной карты к «праву» уровню масштабирования.
+0

Ах, это просто то, что мне нужно. Я понятия не имел о существовании displayready и не понимал, что мой контейнер меняет размер. –

Смежные вопросы