为什么这里的地图路由应用程序和Web不同

时间:2019-02-21 10:12:20

标签: maps here-api

我们在移动应用程序(Android和Ios)和Web应用程序(客户端仪表板)上都具有api-在api请求中添加卡车参数时遇到问题-有时移动API和Web API上的路线有所不同,使用完全相同的参数,最终的bu仍然不同,我们无法弄清楚要进行哪些更改以使它们相同。 这是一个测试示例:

point1 = 37.7793808,-122.4184174(San Francisco),
point2 = 40.7559247,-73.9846107(New York),
vehicleWidth = 300 feet,
vehicleHeight = 400 feet,
vehicleLength = 200 feet,
limitedVehicleWeight = 50 lbs,

Web部件请求:

var routingParameters = {
 'mode': 'fastest;truck;traffic:enabled;boatFerry:-1',
 'representation': 'display',
 'routeAttributes':  'waypoints,summary,shape,legs'
};
var feet = 0.3048;
var ton = 0.00045359237;

routingParameters.vehicleWidth = (300 * feet);
routingParameters.vehicleHeight = (400 * feet) + 'm';
routingParameters.vehicleLength = (200 * feet) + 'm';
routingParameters.limitedVehicleWeight = (50 * ton) + 't';
for (var x = 0; x < points.length; x++) {
 var point = points[x];
 routingParameters['waypoint' + x] = 'geo!' + point.lt + ',' + point.lng;
}
var router = platform.getRoutingService();
var onResult = function (result) {

然后显示路线。 结果我们有了这条路线 enter image description here

应用程序侧的相同内容(以iOS为例): v

ar stops = [NMAWaypoint.init(geoCoordinates: NMAGeoCoordinates(latitude: Double(trip.startLatitude) ?? 0, longitude: Double(trip.startLongitude) ?? 0), waypointType: .stopWaypoint)]

stops.append(NMAWaypoint.init(geoCoordinates: NMAGeoCoordinates(latitude: Double(trip.endLatitude) ?? 0, longitude: Double(trip.endLongitude) ?? 0), waypointType: .stopWaypoint) )


let routingMode = NMARoutingMode.init(routingType: NMARoutingType.fastest, transportMode: NMATransportMode.truck, routingOptions: NMARoutingOption.avoidBoatFerry)

let dimensions = TruckDimensions.getSingleEntity()
routingMode.vehicleWidth = dimensions.width.floatValue * feet
routingMode.vehicleHeight = dimensions.height.floatValue * feet
routingMode.vehicleLength = dimensions.length.floatValue * feet
routingMode.limitedVehicleWeight = dimensions.weight.floatValue * ton

let penalty = NMADynamicPenalty.init()
penalty.trafficPenaltyMode = NMATrafficPenaltyMode.optimal
coreRouter.dynamicPenalty = penalty

progress = coreRouter.calculateRoute(withStops: stops, routingMode: routingMode) { (result, error) in

结果,我们得到了完全不同的路线: enter image description here

我们找到了默认情况下随应用程序请求发送的所有参数,并尝试在Web部件上执行相同的操作(至少在文档中找到了一个参数,因为它相当空): enter image description here

但是没有任何帮助,路由仍然不同。我们猜测网络和移动API在api端使用不同的计算,但是我们找不到任何证明。我们如何让带有卡车参数的应用程序侧和Web侧api都给我们相同的路线?这是逻辑的关键部分。 谢谢

1 个答案:

答案 0 :(得分:0)

基本算法相同或相同,但是在最近几年中,移动SDK和Web服务之间的代码库有所不同。 Web服务具有较新的功能,例如HSP(历史速度模式),但是移动SDK服务没有(也不能)。因此,您可能会得到略有不同的结果。

移动SDK路由计算也可以在离线模式下进行,因为肯定会使用不同的算法。