我需要使用Ovi映射显示2个不同的非连接路由。但我无法让这个工作。在谷歌地图中,我只需要为每条路线定义一个路由对象,但这在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()对象并将其用于其他路由不起作用。让现有的处理第二条路线也不起作用
此外,我需要在每个标记上显示信息,但我无法找到它们所在的容器
答案 0 :(得分:0)
使用诺基亚地图比使用Ovi地图更好,因为诺基亚地图是Ovi Map API的2.0版本。可以通过创建多个管理器来检索多个路径,然后使用相同的回调 - 下面的示例就是这样:
在示例中,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>