在nokia / ovi / here地图中计算路线时出错

时间:2013-12-13 23:29:05

标签: javascript here-api

这个让我疯狂了好几个小时。 如果路由请求因任何原因失败,诺基亚地图javascript api会出错。 在测试时,我试图给我一条从海洋中间到我输入的随机其他坐标的行车路线。我已经尽可能多地研究了诺基亚代码。

所以,显然,尝试使路由失败,这是代码回来

(function(){nokia.maps.net.Request.callbacks[10](11,arguments);})({"details":"NOROUTE: Request failed","additionalData":[],"type":"ApplicationError","subtype":"NoRouteFound"})

这就是我发送的东西是route-nlp.js中的一些错误处理代码

qb:function(a){
    var b=a.details;a.additionalData&&(b+=" Key: "+a.additionalData[0].key+", Value: "+a.additionalData[0].value);
    return{type:a.type.charAt(0).toLowerCase()+a.type.substr(1),subtype:a.subtype.charAt(0).toLowerCase()+a.subtype.substr(1),message:b}}});

复制粘贴中可能有错误的括号数,但其他所有内容都显示为正确。正如您所看到的,返回的信息对于additionalData只有一个空数组,因此它不应该尝试从中提取任何内容......但确实如此。然后是错误,因为a.additionalData [0] .key中没有任何内容(无法读取未定义的属性'key')。

这一切都是在以下时间开始的:

        var router = new nokia.maps.routing.Manager();

        router.addObserver("state", onRouteCalculated);

        var waypoints = new nokia.maps.routing.WaypointParameterList();
        waypoints.addCoordinate(new nokia.maps.geo.Coordinate(20, 54));
        waypoints.addCoordinate(new nokia.maps.geo.Coordinate(0.06275, 0.3966));

        var modes = [{
            type: "shortest",
            transportModes: ["car"]
        }];

        router.calculateRoute(waypoints, modes);

使用https://js.api.here.com/ee/2.5.3/jsl.js?with=all

中的js api

编辑:答案是,这是因为企业路由响应中存在错误。请参阅以下答案的评论。

1 个答案:

答案 0 :(得分:1)

您收到错误的原因是因为您的起点位于沙特阿拉伯的Empty Quarter中间,那里几英里外几乎没有道路。路由api尝试但未能找到附近的道路,从发送回错误响应开始路由。

JavaScript API只是底层RESTful Routing API的包装器。如果您查看基础response,您将收到以下错误:

{
    "type":"ApplicationError",
    "subtype":"NoRouteFound",
    "details":"Error is NGEO_ERROR_ROUTE_NO_START_POINT",
    "additionalData":[
        {
            "key":"error_code",
            "value":"NGEO_ERROR_ROUTE_NO_START_POINT"
        }
    ],
    "metaInfo":
    {
        "timestamp":"2013-12-16T11:14:22.991",
        "mapVersion":"8.30.52.113",
        "moduleVersion":"7.2.39.0_CD-793_1",
        "interfaceVersion":"2.4.37"
    }
}

这是在JavaScript Wrapper中通过将路由管理器的state设置为"failed"

来处理的

大概你已经有了代码中state属性的观察者,你可以扩展它以处理错误情况,如下所示:

onRouteCalculated = function (observedRouter, key, value) {
        if (value == "finished") {
            var routes = observedRouter.getRoutes();
            var mapRoute = new 
                    nokia.maps.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.");
        }
    };

可以在example

中找到具有错误处理功能的完整工作API Explorer的代码