2 или более маршрутов на одной карте Ovi

Мне нужно отобразить 2 разных несвязанных маршрута, используя отображение Ovi. Но я не могу заставить это работать. В картах Google мне просто нужно было определить объект маршрутизации для каждого маршрута, но в Ovi это не работает. У кого-нибудь есть идеи как?

Для справки вот код для одного маршрута:

    router = new ovi.mapsapi.routing.Manager();

    var onRouteCalculated = function(observedRouter, key, value)
    {
        if (value == "finished") 
        {
            var routes = observedRouter.getRoutes();
            var mapRoute = new ovi.mapsapi.routing.component.RouteResultSet(routes[0]).container;
            map.objects.add(mapRoute);
            map.zoomTo(mapRoute.getBoundingBox(), false, "default");
        } 
        else if(value == "failed") 
        {
            alert("The routing request failed.");
        }
    };

    router.addObserver("state", onRouteCalculated);

    var waypoints = new ovi.mapsapi.routing.WaypointParameterList();
    waypoints.addCoordinate(new ovi.mapsapi.geo.Coordinate(x, y))
    // coords are ommited, but just a line for every stop point in Lat/Lng format

    var modes =
    [{
        type: "shortest",
        transportModes: ["car"],
        options: "avoidTollroad",
        trafficMode: "default"
    }];

    router.calculateRoute(waypoints, modes);

Создание другого объекта ovi.mapsapi.routing.Manager() и использование его для другого маршрута не работает. Разрешение существующему обрабатывать второй маршрут тоже не работает

Кроме того, мне нужно отобразить инфопузырь на каждом маркере, но я не могу найти, в каком контейнере они находятся

1 ответ

Вам лучше использовать Nokia Maps, чем Ovi Maps, так как Nokia Maps является версией API Ovi Map 2.0. Можно получить несколько маршрутов путем создания нескольких менеджеров, которые затем используют один и тот же обратный вызов - пример ниже делает именно это:

В этом примере маркеры A и B содержатся в контейнере с именем "mapRoute", а отдельные маршруты - в массиве routArr[].

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html> 
<head>
        <script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.0/jsl.js?routing=auto"></script>
    <title>Concurrent Routing example</title>
</head>
<body>

<div id="mapContainer" style="top:30%; width:100%; height:70%; position: absolute;"></div>

<script type="text/javascript">
/////////////////////////////////////////////////////////////////////////////////////
// Don't forget to set your API credentials
//
// Replace with your appId and token which you can obtain when you 
// register on http://api.developer.nokia.com/ 
//
            nokia.Settings.set( "appId", "YOUR APP ID GOES HERE"); 
            nokia.Settings.set( "authenticationToken", "YOUR AUTHENTICATION TOKEN GOES HERE");

//          
/////////////////////////////////////////////////////////////////////////////////////


//initialize a new map 
var display = new nokia.maps.map.Display(document.getElementById("mapContainer"), 
                     {     "components": [  
                                     new nokia.maps.map.component.ZoomBar(),                 
                                     new nokia.maps.map.component.Behavior(),                 
                                     new nokia.maps.map.component.TypeSelector()],     
                                     "zoomLevel": 13,
                                     "center" : [52.500556, 13.398889] }); 


var onAllManagersFinished = function() {     
    for (i = 0; i <routesArr.length; i++){

            console.log(routesArr[i]);

        var mapRoute = new nokia.maps.routing.component.RouteResultSet(routesArr[i]).container;
        display.objects.add(mapRoute);
        display.zoomTo(mapRoute.getBoundingBox(), true);
      }  
};

// we will use the same state observer function for all managers     

var onRouteCalculated = function (observedRouter, key, value) {
  if (value == "finished") {
        routesArr[observedRouter.$index] = observedRouter.getRoutes()[0];
        managersFinished++;
     } else if (value == "failed") {
      // Something has gone horribly wrong  e.g. route too long.
      alert("The routing request failed.");
      managersFinished++;
  }


  if(managersFinished === waypointsArr.length) {
             onAllManagersFinished(); 
        }   

};                 



var  routesArr = new Array();
var  waypointsArr = new Array();
var  MunichBerlin = new nokia.maps.routing.WaypointParameterList();
MunichBerlin.addCoordinate (new nokia.maps.geo.Coordinate(48.133333, 11.566667));
MunichBerlin.addCoordinate (new nokia.maps.geo.Coordinate(52.500556, 13.398889));

var  BerlinHamburg = new nokia.maps.routing.WaypointParameterList();
BerlinHamburg.addCoordinate(new nokia.maps.geo.Coordinate(52.500556, 13.398889));
BerlinHamburg.addCoordinate(new nokia.maps.geo.Coordinate(53.565278, 10.001389));

waypointsArr.push(MunichBerlin);
waypointsArr.push(BerlinHamburg);



var  i = waypointsArr.length;  
var  managersFinished = 0; 

// iterate over all route requests, create a manager for each of them, 
// add the observer and call the claculateRoute method 

while(i--) {    
    var router = new nokia.maps.routing.Manager(); 
     router.$index = i;
     router.calculateRoute(waypointsArr[i],  [{ 
                          type: "shortest", 
                          transportModes: ["car"],
                          options: "",
                          trafficMode: "default"
                          }]);
     router.addObserver("state", onRouteCalculated);
} 

</script> 
</body> 
</html>
Другие вопросы по тегам