how can i get the length of a route? I have been looking at this basic code of a route from a to b:

// Get the DOM node to which we will append the map
var mapContainer = document.getElementById("mapContainer");
// Create a map inside the map container DOM node
var map = new nokia.maps.map.Display(mapContainer, {
// Initial center and zoom level of the map
center: [52.51, 13.4],
zoomLevel: 7,
// We add the behavior component to allow panning / zooming of the map
components:[new nokia.maps.map.component.Behavior()]
}),
router = new nokia.maps.routing.Manager(); // create a route manager;

// The function onRouteCalculated will be called when a route was calculated
var onRouteCalculated = function (observedRouter, key, value) {
if (value == "finished") {
var routes = observedRouter.getRoutes();

//create the default map representation of a route
var mapRoute = new nokia.maps.routing.component.RouteResultSet(routes[0]).container;
map.objects.add(mapRoute);

//Zoom to the bounding box of the route
map.zoomTo(mapRoute.getBoundingBox(), false, "default");
} else if (value == "failed") {
alert("The routing request failed.");
}
};

/* We create on observer on router's "state" property so the above created
* onRouteCalculated we be called once the route is calculated
*/
router.addObserver("state", onRouteCalculated);

 // Create waypoints
 var waypoints = new nokia.maps.routing.WaypointParameterList();
 waypoints.addCoordinate(new nokia.maps.geo.Coordinate(52.51652540955727,     13.380154923889933));
 waypoints.addCoordinate(new nokia.maps.geo.Coordinate(52.52114106145058,13.40921934080231));

/* Properties such as type, transportModes, options, trafficMode can be
* specified as second parameter in performing the routing request.

* See for the mode options the "nokia.maps.routing.Mode" section in the developer's guide
*/
var modes = [{
type: "shortest", 
transportModes: ["car"],
options: "avoidTollroad",
trafficMode: "default"
}];

// Calculate the route (and call onRouteCalculated afterwards)
router.calculateRoute(waypoints, modes);shortest
有帮助吗?

解决方案

When the route is successfully calculated, the call-back function holds an array of one or more routes. Code:

var routes = observedRouter.getRoutes();

Each of these holds a route summary, where you can obtain useful info about the route.

Code:

alert ("Route Length = " + routes[0].totalLength  + " m.");
alert ("As the crow flies = " + routes[0].waypoints[0].mappedPosition.distance(routes[0].waypoints[1].mappedPosition)  + " m.");

(Obviously you'll need to use waypoints.length -1 for a calculation with stop-overs)

Here is your code example, with the extra two lines added, You need to use your own app id and token to get it to work.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- 
    Example from Nokia Maps API Playground, for more information visit http://api.maps.nokia.com
 -->
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=7; IE=EmulateIE9"/>
        <base href="http://developer.here.net/apiexplorer/examples/api-for-js/routing/map-with-route-from-a-to-b.html" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Nokia Maps API Example: Add route from A to B</title>
        <meta name="description" content="Routing Manager offers the ability to request a route with various modes between two points"/>
        <meta name="keywords" content="routing, services, a to b, route, direction, navigation"/>
        <!-- For scaling content for mobile devices, setting the viewport to the width of the device-->
        <meta name=viewport content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
        <!-- Styling for example container (NoteContainer & Logger)  -->
        <link rel="stylesheet" type="text/css" href="http://developer.here.net/apiexplorer/examples/templates/js/exampleHelpers.css"/>
        <!-- By default we add ?with=all to load every package available, it's better to change this parameter to your use case. Options ?with=maps|positioning|places|placesdata|directions|datarendering|all -->
        <script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js?with=all"></script>

        <style type="text/css">
            html {
                overflow:hidden;
            }

            body {
                margin: 0;
                padding: 0;
                overflow: hidden;
                width: 100%;
                height: 100%;
                position: absolute;
            }

            #mapContainer {
                width: 100%;
                height: 100%;
                left: 0;
                top: 0;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="mapContainer"></div>

        <script type="text/javascript" id="exampleJsSource">
/*  Set authentication token and appid 
*   WARNING: this is a demo-only key
*   please register on http://api.developer.nokia.com/ 
*   and obtain your own developer's API key 
*/
nokia.Settings.set("appId", "YOUR APP ID"); 
nokia.Settings.set("authenticationToken", "YOUR TOKEN");

// Get the DOM node to which we will append the map



var mapContainer = document.getElementById("mapContainer");
// Create a map inside the map container DOM node
var map = new nokia.maps.map.Display(mapContainer, {
        // Initial center and zoom level of the map
        center: [52.51, 13.4],
        zoomLevel: 7,
        // We add the behavior component to allow panning / zooming of the map
        components:[new nokia.maps.map.component.Behavior()]
    }),
    router = new nokia.maps.routing.Manager(); // create a route manager;

// The function onRouteCalculated  will be called when a route was calculated
var onRouteCalculated = function (observedRouter, key, value) {
        if (value == "finished") {
            var routes = observedRouter.getRoutes();
            //create the default map representation of a route
            var mapRoute = new nokia.maps.routing.component.RouteResultSet(routes[0]).container;
            map.objects.add(mapRoute);

            //Zoom to the bounding box of the route
            map.zoomTo(mapRoute.getBoundingBox(), false, "default");
            alert ("Route Length = " + routes[0].totalLength  + " m.");
            alert ("As the crow flies = "   
                       routes[0].waypoints[0].mappedPosition.distance(
                       routes[0].waypoints[1].mappedPosition)  + " m.");
        } else if (value == "failed") {
            alert("The routing request failed.");
        }
    };

/* We create on observer on router's "state" property so the above created
 * onRouteCalculated we be called once the route is calculated
 */
router.addObserver("state", onRouteCalculated);

// Create waypoints
var waypoints = new nokia.maps.routing.WaypointParameterList();
waypoints.addCoordinate(new nokia.maps.geo.Coordinate(52.51652540955727, 13.380154923889933));
waypoints.addCoordinate(new nokia.maps.geo.Coordinate(52.52114106145058, 13.40921934080231));

/* Properties such as type, transportModes, options, trafficMode can be
 * specified as second parameter in performing the routing request.
 * 
 * See for the mode options the "nokia.maps.routing.Mode" section in the developer's guide
 */
var modes = [{
    type: "shortest", 
    transportModes: ["car"],
    options: "avoidTollroad",
    trafficMode: "default"
}];

// Calculate the route (and call onRouteCalculated afterwards)
router.calculateRoute(waypoints, modes);




        </script>
    </body>
</html>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top