我有固定的来源和目的地。但我之间有多个航点。我必须计算源和目的地之间的优化路线的距离。 我必须在c#中这样做。
提前致谢。
答案 0 :(得分:1)
您可以将Google Directions API用于此目的:
Google Directions API是一种计算路线的服务 使用HTTP请求的位置之间
在路线中使用路标
使用Directions API计算路线时,您也可以指定 驾驶,步行或骑自行车方向的航点。
例如,以下网址启动了针对a的路线请求 马萨诸塞州波士顿和马萨诸塞州康科德之间的路线,在查尔斯敦中途停留 和列克星敦,按顺序:
https://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&waypoints=Charlestown,MA|Lexington,MA&key=API_KEY
如何在.Net中使用Google Directions API
以下示例演示了如何构建路径请求:
public class DirectionsClient
{
public static JObject CalcRoute(string origin,string destination,string[] waypoints)
{
var requestUrl = string.Format("https://maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&waypoints={2}", origin, destination, string.Join("|",waypoints));
using (var client = new WebClient())
{
var result = client.DownloadString(requestUrl);
var data = JsonConvert.DeserializeObject<JObject>(result);
//ensure directions response contains a valid result
if ((string) data["status"] != "OK")
throw new Exception("Invalid request");
return data;
}
}
}
示例强>
当Directions API返回结果时,它会将它们放在(JSON)路由数组中。
该示例显示了如何打印Legs信息:
var data = DirectionsClient.CalcRoute("Boston,MA", "Concord,MA", new[] { "Charlestown,MA", "Lexington,MA"});
foreach (var route in data["routes"])
{
foreach (var leg in route["legs"])
{
Console.WriteLine("Start: {0} End {1}", leg["start_address"], leg["end_address"]);
}
}
<强>更新强>
关于请求的格式:
路线可以指定起点,目的地和航点 文本字符串(例如&#34; Chicago,IL&#34;或&#34; Darwin,NT,Australia&#34;)或as 纬度/经度坐标。
关于路线优化:
默认情况下,路线服务会计算通过的路线 按照给定的顺序提供了航点。或者,您可以通过 optimize:true作为waypoints参数中的第一个参数 允许路线服务优化提供的路线 以更有效的顺序重新安排航点。 (这个 优化是旅行商问题的应用。)
如果您指示路线服务优化其订单 航点,它们的顺序将在waypoint_order字段中返回 在routes对象中。 waypoint_order字段返回值 这是从零开始的。
以下示例计算阿德莱德的公路旅行路线, 南澳大利亚州每个南澳大利亚州的主要葡萄酒产区使用 路线优化。
https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&key=API_KEY
检查计算出的路线将表明路线是 使用以下航点顺序计算:
"waypoint_order": [ 1, 0, 2, 3 ]