首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nokia / ovi / here地图中计算路由时出错

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

Stack Overflow用户
提问于 2013-12-13 23:29:04
回答 1查看 896关注 0票数 0

这件事让我发疯好几个小时了。如果路由请求因任何原因失败,Nokia映射javascript就会在我身上出错。在测试的时候,我尝试给我一条从海洋中央到其他任意坐标的驾驶路线。我已经尽可能多地研究了诺基亚的代码。

所以,很明显,试图使路由失败,这就是返回的代码。

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

这就是我所认为的路由-nlp.js中的一些错误处理代码。

代码语言:javascript
复制
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”)。

这一切都是从以下方面开始的:

代码语言:javascript
复制
        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

编辑:答案是,目前这是因为一个错误的响应来自企业路由。见对以下答复的评论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 11:36:16

你之所以会犯错误,是因为你的起点在沙特阿拉伯的空区中心,在那里周围几英里都没有道路。路由api尝试但未能找到附近的路径,以便从发送返回一个错误响应开始路由。

JavaScript API只是底层RESTful 路由API的包装器。如果您查看底层响应,您将得到以下错误:

代码语言:javascript
复制
{
    "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属性提供了一个观察者,您可以扩展它以处理错误情况,如下所示:

代码语言:javascript
复制
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资源管理器中找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20577754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档