在c#中计算源和目标之间的优化距离,其间有多个航点

时间:2015-06-04 06:12:52

标签: c# google-maps google-api

我有固定的来源和目的地。但我之间有多个航点。我必须计算源和目的地之间的优化路线的距离。 我必须在c#中这样做。

提前致谢。

1 个答案:

答案 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 ]