0

Ovi マッピングを使用して、接続されていない 2 つの異なるルートを表示する必要があります。しかし、私はこれを機能させることができません。Google マップでは、ルートごとにルーティング オブジェクトを定義する必要がありましたが、これは Ovi では機能しないようです。誰にも方法がわかりませんか?

参考までに、1 つのルートのコードを次に示します。

    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() オブジェクトを作成し、それを別のルートに使用しても機能しません。既存のものに 2 番目のルートを処理させても機能しません

さらに、各マーカーに情報バブルを表示する必要がありますが、それらがどのコンテナーにあるかを見つけることができません

4

1 に答える 1

0

Nokia Maps は Ovi Map API の 2.0 バージョンであるため、Ovi Maps よりも Nokia Maps を使用した方がよいでしょう。同じコールバックを使用する複数のマネージャーを作成することで、複数のルートを取得することができます - 以下の例はまさにそれを行います:

この例では、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>
于 2012-06-19T21:46:14.157 に答える