Здесь у нас есть 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) {
И затем мы показываем маршрут.В результате мы имеем этот маршрут
То же самое на стороне приложения (пример 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
И в результате мы получаем полностьюдругой маршрут:
Мы нашли все параметры, которые отправляются по умолчанию вместе с запросом приложения, и пытались сделать то же самое для веб-части (по крайней мере, один, который мы нашли в документации, как егосовсем пусто):
но ничего не помогло, маршрутизируется все же иначе.Мы предполагаем, что веб и мобильный API используют разные вычисления на стороне API, но мы не можем найти никаких доказательств.Как сделать так, чтобы как приложения, так и веб-интерфейсы API с параметрами грузовых автомобилей давали нам одинаковые маршруты?Это критическая часть логики.Спасибо