如何使用 google-maps api v3 优化超过 10 个地址

How to to optimize more than 10 addresses using google-maps api v3

所以,这是一个非常简单的问题。 我在 helper class 中有使用地图 API.

获取优化(或不优化)路线的功能
    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
            string status = (string) data["status"];
            if ((string)data["status"] != "OK")
                throw new Exception("Invalid request");

            return data;
        }
    } 

在我的控制器中,我这样称呼它:

        var data = GoogleGeocodeExtension.CalcRoute("startLat,endLat", "endLat,endLong", new[]
        {
            "optimize:true",
            "lat,lang",
            "lat,lang",
            //6 more lat and lang pairs
            //I want to optimise more than 10 limit
        });
            //showing data in debug window like so
            //so you can test it faster
        foreach (var route in data["routes"])
        {
            Debug.WriteLine("----------------------------------------------------");
            Debug.WriteLine(route["waypoint_order"]);
            Debug.WriteLine("----------------------------------------------------");
            foreach (var leg in route["legs"])
            {
                Debug.WriteLine("===================================================================================================");
                Debug.WriteLine("Start: {0} End: {1} \n Distance: {2} Duration: {3}", leg["start_address"], leg["end_address"], leg["distance"], leg["duration"]);
                Debug.WriteLine("Start lat lang: {0}", leg["start_location"]);
                Debug.WriteLine("End lat lang: {0}", leg["end_location"]);
                Debug.WriteLine("===================================================================================================");
            }
        }

所以我可以发送 10 个坐标(lat & lang 对),2 个作为开始和结束位置,其他 8 个作为航路点,但是如何发送 20 个?还是 30?

我在 SO 和其他网站上阅读了很多问题,这些问题大多回答了有关显示或计算已经优化的坐标列表的问题。

我知道我可以将我的列表分成多个坐标少于 10 个的列表,但那样我就不会得到正确优化的路线,因为它没有考虑所有坐标,只考虑了部分坐标它会适当优化。

不幸的是,我无力支付 google 的高级许可费用(如果我没记错的话,那是 1 万美元 :S)。

编辑:显然,在服务器端使用网络路线服务时,您可以限制 23 个航路点。您需要的是将密钥添加到 API 调用中,如下所示:

var requestUrl = string.Format("https://maps.googleapis.com/maps/api/directions/json?key={3}&origin={0}&destination={1}&waypoints={2}", origin, destination, string.Join("|", waypoints), "YourApiKey");

对于标准 API 的用户,Web 路线服务(您正在使用的)在每个服务器端请求中最多支持 23 waypoints(您不需要付费执照)。

您确实需要密钥,但现在(截至 2016 年 6 月 22 日)所有 Google 的地图服务都需要密钥。