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>