这件事让我发疯好几个小时了。如果路由请求因任何原因失败,Nokia映射javascript就会在我身上出错。在测试的时候,我尝试给我一条从海洋中央到其他任意坐标的驾驶路线。我已经尽可能多地研究了诺基亚的代码。
所以,很明显,试图使路由失败,这就是返回的代码。
(function(){nokia.maps.net.Request.callbacks[10](11,arguments);})({"details":"NOROUTE: Request failed","additionalData":[],"type":"ApplicationError","subtype":"NoRouteFound"})这就是我所认为的路由-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的一个空数组,所以它不应该试图从it...but中提取它所做的任何事情。然后出现错误,因为a.additionalData.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
编辑:答案是,目前这是因为一个错误的响应来自企业路由。见对以下答复的评论。
发布于 2013-12-16 11:36:16
你之所以会犯错误,是因为你的起点在沙特阿拉伯的空区中心,在那里周围几英里都没有道路。路由api尝试但未能找到附近的路径,以便从发送返回一个错误响应开始路由。
JavaScript API只是底层RESTful 路由API的包装器。如果您查看底层响应,您将得到以下错误:
{
"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包装器中通过将路由管理器的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.");
}
};具有错误处理功能的完全工作的示例的代码可以在API资源管理器中找到。
https://stackoverflow.com/questions/20577754
复制相似问题