2012-04-11 56 views
0

我需要使用Ovi映射显示2个不同的非连接路由。但我无法得到这个工作。在谷歌地图我只需要为每个路线定义一个路由对象,但这似乎并不适用于Ovi。有没有人有任何想法如何?在一张Ovi地图上有2个或更多路由

作为参考,这里是一个路由的代码:

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()对象,并使用该另一路由不起作用。让现有的处理第二路线不工作,要么

另外我需要显示在每个标记一个infobubble,但我无法在他们居住什么容器

回答

0

发现你会过得更好使用诺基亚地图而不是Ovi地图,因为诺基亚地图是2.0版本的Ovi地图API。有可能通过创建多个管理器来检索多个管理器,然后使用相同的回调 - 下面的例子就是这样做的:

在这个例子中,A和B标记保存在名为“mapRoute”的容器中,单独的路线保存在名为routesArr []的阵列中[

<!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>