RouteOptimization API重复前往同一取货点问题求助
解决Route Optimization API重复访问同一取货点的问题
针对你遇到的API重复规划同一取货点访问的问题,核心是消除API拆分取货的触发条件,同时强制同一取货点的任务一次性完成,具体配置调整如下:
1. 明确设置车辆无容量限制
API默认可能存在隐性容量阈值,导致自动拆分取货任务。你需要给车辆设置一个远大于实际包裹数量的容量值,明确告知车辆无空间/重量限制:
var vehicule = new Vehicle() { StartWaypoint = new Waypoint() { Location = new Location() { LatLng = new LatLng() { Latitude = user.Latitude.Value, Longitude = user.Longitude.Value } }, }, EndWaypoint = new Waypoint() { Location = new Location() { LatLng = new LatLng() { Latitude = user.Latitude.Value, Longitude = user.Longitude.Value } }, }, RouteModifiers = new RouteModifiers() { AvoidTolls = true, }, CostPerKilometer = 1, CostPerHour = 30, FixedCost = 2, CostPerTraveledHour = 2.5, // 添加容量配置,设置远大于实际包裹数的值 Capacity = { 1000 } };
2. 给同一取货点的取货请求设置统一GroupId
通过GroupId字段将同一取货点的所有取货任务绑定,强制API在同一次访问中完成该点的所有取货:
foreach (var delivery in Deliveries) { foreach (var package in delivery.Packages) { Shipment ship = new Shipment(); ship.Label = package.PackageId.ToString(); var pickupRequest = new Shipment.Types.VisitRequest() { ArrivalLocation = new LatLng() { Latitude = package.Pickup.Latitude.Value, Longitude = package.Pickup.Longitude.Value }, // 用取货点的唯一标识(如坐标拼接、供应商ID)作为GroupId GroupId = $"pickup_{package.Pickup.Latitude}_{package.Pickup.Longitude}" }; ship.Pickups.Add(pickupRequest); ship.Deliveries.Add(new Shipment.Types.VisitRequest() { ArrivalLocation = new LatLng() { Latitude = package.Delivery.Latitude.Value, Longitude = package.Delivery.Longitude.Value } }); shipmentModel.Shipments.Add(ship); } }
调整说明
- 车辆容量设置:消除API因"容量不足"拆分取货的逻辑,匹配你车辆无空间限制的实际情况;
- GroupId绑定:让API识别到同一取货点的所有任务必须一次性完成,避免拆分访问。
以上调整后,API会优先规划一次性取完同一供应商的所有包裹,不会出现重复绕路的情况。
内容的提问来源于stack exchange,提问作者AllWhite
相关产品推荐
相关产品推荐

