google maps -在c#中计算具有多个路径点的源和目的地之间的优化距离



我有一个固定的源和目标。但我在中间有多个航路点。我需要计算出优化后的路线在出发地和目的地之间的距离。我必须用c#来做。

提前感谢。

你可以使用Google Directions API:

Google Directions API是一个计算方向的服务使用HTTP请求

使用路径点

当使用方向API计算路由时,你也可以指定用于驾车、步行或骑自行车的路标。

例如,下面的URL为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

下面的例子演示了如何构造Directions请求:

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;
        }   
    }
}

当方向API返回结果时,它会将它们放在一个(JSON)路由数组中。

这个例子展示了如何打印Legs info:

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"]);
    }   
 }

关于请求的格式:

方向可以指定起始点、目的地和路点文本字符串(例如:"芝加哥,伊利诺伊州"或"达尔文,NT,澳大利亚")或as<<strong>纬度/经度坐标/strong>。

关于路线优化:

默认情况下,Directions服务通过按给定顺序提供航路点。你也可以通过优化: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 ]

最新更新