使用Bing Maps REST API的Optimization API来进行路线优化。
示例代码:
var addressList = new List {
"1600 Amphitheatre Parkway, Mountain View, CA",
"1 Infinite Loop, Cupertino, CA",
"1555 Blake Street, Denver, CO",
"701 7th Ave, New York, NY",
"770 Broadway, New York, NY"
};
var coordinates = new List();
foreach (var address in addressList) {
var requestUrl = $"http://dev.virtualearth.net/REST/v1/Locations?q={address}&key={BingMapsApiKey}";
var json = await httpClient.GetStringAsync(requestUrl);
var result = JsonConvert.DeserializeObject(json);
if (result.ResourceSets.Length > 0 && result.ResourceSets[0].Resources.Length > 0) {
var point = result.ResourceSets[0].Resources[0].Point;
coordinates.Add(new Coordinate { Latitude = point.Coordinates[0], Longitude = point.Coordinates[1] });
}
}
var coordinatesParam = string.Join(";", coordinates.Select(c => $"{c.Latitude},{c.Longitude}"));
var requestUrl = $"https://dev.virtualearth.net/REST/v1/Routes/OptimizeItinerary?key={BingMapsApiKey}&waypoint.1={coordinatesParam}&distanceUnit=mi&optimizeOrder=true";
var json = await httpClient.GetStringAsync(requestUrl);
var result = JsonConvert.DeserializeObject(json);
if (result.ResourceSets.Length > 0 && result.ResourceSets[0].Resources.Length > 0) {
var optimizedCoordinates = result.ResourceSets[0].Resources[0].RoutePath.Line.Coordinates;
var optimizedAddressList = new List();
foreach (var optimizedCoordinate in optimizedCoordinates) {
var requestUrl = $"http://dev.virtualearth.net/REST/v1/Locations/{optimizedCoordinate[0]},{optimizedCoordinate[1]}?key={BingMapsApiKey}";
var json = await httpClient.GetStringAsync(requestUrl);
var result = JsonConvert.DeserializeObject(json);
if (result.ResourceSets.Length > 0 && result.ResourceSets[0].Resources.Length > 0) {
var address = result.ResourceSets[0].Resources[0].Address.FormattedAddress;
optimizedAddressList.Add(address);
}
}
}