这个让我疯狂了好几个小时。 如果路由请求因任何原因失败,诺基亚地图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编辑:答案是,这是因为企业路由响应中存在错误。请参阅以下答案的评论。
答案 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的代码