所以,这将是一个非常直截了当的问题。 我在helper类中有函数来使用maps 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&amp; lang对),2个作为起点和终点位置,其他8个作为路点,但如何发送20个?还是30?
我在SO和其他网站上已经阅读了很多问题,这些问题主要回答了关于显示或计算已经优化的坐标列表的问题。
我知道我可以将我的列表分成多个坐标少于10个的列表,但是这样我就不会得到正确优化的路径,因为它没有考虑所有坐标而只考虑部分内容将得到适当优化。
不幸的是,我无力支付谷歌的高级许可费(如果我没有记错的话,那就是10万美元: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");
答案 0 :(得分:0)
Web路线服务(您正在使用的)在标准API用户的每个服务器端请求中最多支持23个路点(您不需要高级许可证)。
您确实需要密钥,但现在所有Google地图服务都需要密钥(截至2016年6月22日)。