nokia здесь карты геокодирования и отображения карты

пожалуйста, не мог бы кто-нибудь объяснить мне, как я могу управлять в коде Here Maps методы nokia.maps.map.Display listener и nokia.places.search.manager.geocode?
У меня есть маркеры для геокодирования, в геокоде "oncomplete" он ждет завершения запроса, после этого он прослушивает, когда отображение карты готово, так как это происходит асинхронно, иногда в браузере отображается незавершенная карта, потому что map.zoomTo(bbox, false) не был выполнен.

Как я могу управлять этими двумя событиями?

<script type="text/javascript">
function goPageOnLoad() {
   container = new nokia.maps.map.Container();
   map = new nokia.maps.map.Display(document.getElementById('gmapcanvas'),
   { components:[ infoBubbles, new nokia.maps.map.component.Behavior(), new
   nokia.maps.map.component.ZoomBar(), new
   nokia.maps.map.component.Overview(), new
   nokia.maps.map.component.TypeSelector(), new
   nokia.maps.map.component.ScaleBar() ] });
   addMarkersGeoLoc(map,container); 
}

function addMarkersGeoLoc(map,container) {
     countMarkerGeoLoc=1; coordinate = new
     nokia.maps.geo.Coordinate(0, 0); startGeoCode('Via Roma 2, 16038 Santa
     Margherita Ligure GE '); 
} 



function startGeoCode(addressStringt) {
    nokia.places.search.manager.geoCode({ 
       searchTerm : addressString,
       onComplete: function(data, requestStatus){ 
          if(data != null){ 
             coordinate = 
             new nokia.maps.geo.Coordinate(data.location.position.latitude,
             data.location.position.longitude);
             var marker = new
             nokia.maps.map.StandardMarker(coordinate, {brush: {color: "#FF0000"}});
             marker.addListener( CLICK, function (evt) {
             infoBubbles.openBubble(content, marker.coordinate); } );
             container.objects.add(marker); 
             managersFinished++; 
          } 
          else {
               managersFinished++; alert('Address: '+addressString+', is not
               localizable.'); 
          } 
          if(managersFinished === countMarkerGeoLoc) {
             map.objects.add(container); 
             map.set('zoomLevel', 14);
             map.addListener("displayready", function () { 
                  map.set('center',
                  [40.645304, 14.874063]); 
                  bbox = container.getBoundingBox(); 
                  if(bbox !=null){ 
                    map.zoomTo(bbox, false); 
                  } 
             }); 
           } 
         } 
      }); 
}
</script>

person user3346161    schedule 24.02.2014    source источник


Ответы (1)


Самый простой способ - дождаться события displayready перед началом геокодирования.

function goPageOnLoad() {
   container = new nokia.maps.map.Container();
   map = new nokia.maps.map.Display
.. etc...
   map.addListener('displayready', function () {
     addMarkersGeoLoc(map,container); 
   }, false);

Другой альтернативой было бы иметь глобальную переменную bbox и использовать zoomTo() дважды - либо на displayready, либо на managersFinished === countMarkerGeoLoc, т.е.

var bbox;

...

function goPageOnLoad() {
   container = new nokia.maps.map.Container();
   map = new nokia.maps.map.Display
.. etc...
   map.addListener("displayready", function () {
    if(bbox){map.zoomTo(bbox, false);}
});


...


 if(managersFinished === countMarkerGeoLoc) {
   map.objects.add(container); 
   bbox = container.getBoundingBox(); 
   map.zoomTo(bbox, false);

Либо первая, либо вторая из zoomTo() функций должны срабатывать, чтобы переместить карту.

person Jason Fox    schedule 25.02.2014