Почему здесь Maps Routes App и веб разные - PullRequest
0 голосов
/ 21 февраля 2019

Здесь у нас есть api как для мобильных приложений (Android и Ios), так и для веб-приложения (клиентская панель) - и у нас возникает проблема, когда мы добавляем параметры грузовика в запрос API - иногда маршруты различаются в мобильном API и веб-API.использовались абсолютно одинаковые параметры, но в конечном итоге маршруты все-таки разные, и мы не можем понять, что еще нужно изменить, чтобы сделать их одинаковыми.Вот один тестовый пример:

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,

запрос веб-части:

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

Мы нашли все параметры, которые отправляются по умолчанию вместе с запросом приложения, и пытались сделать то же самое для веб-части (по крайней мере, один, который мы нашли в документации, как егосовсем пусто): enter image description here

но ничего не помогло, маршрутизируется все же иначе.Мы предполагаем, что веб и мобильный API используют разные вычисления на стороне API, но мы не можем найти никаких доказательств.Как сделать так, чтобы как приложения, так и веб-интерфейсы API с параметрами грузовых автомобилей давали нам одинаковые маршруты?Это критическая часть логики.Спасибо

1 Ответ

0 голосов
/ 05 марта 2019

Базовые алгоритмы запускаются или запускаются одинаково, но в последние годы кодовая база между мобильным SDK и веб-службами разошлась.Веб-сервисы имеют более новые функции, такие как HSP (исторические шаблоны скорости), а сервис мобильного SDK - нет (и не может).Поэтому вы можете получить немного другие результаты.

Расчет маршрута мобильного SDK также можно выполнять в автономном режиме, где алгоритм наверняка отличается.

...