所以,這將是非常簡單的問題。 我有助手類的功能,以獲取優化(或不)使用地圖API的路線。如何優化超過10個地址使用谷歌地圖api v3
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 &郎對),2作爲起點和終點的位置,和其他8路點,但如何發送20?還是30?
我已經閱讀了許多關於SO和其他網站的許多問題,主要回答了關於顯示或計算已經優化的座標列表的問題。
我知道我可以可以把我的名單成小於10個座標多個列表,但這樣我就不會得到正確優化的路由,因爲它沒有考慮到所有的座標,並僅顯示部分會適當優化。
不幸的是,我不能支付谷歌的高級許可證(如果我沒有記錯,它10K嚇跑雄鹿:S)。
編輯:顯然,當在服務器端使用Web方向服務時,你可以做到這一點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用戶的服務器端請求(您不需要高級許可證)的每個服務器端請求中最多支持23個航點。 – geocodezip
我在尋找答案時看到的其他每個問題都有你的答案xD 反正,我不知道你爲什麼低估了我,但你所說的是不正確的。 當我嘗試添加8個以上的方式點(因爲它沒有鍵),我得到狀態「MAX_WAYPOINTS_EXCEEDED」,當我添加鍵到我的電話,如下所示: var requestUrl = string.Format(「https:// maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&waypoints={2}&key={3}「,出發地,目的地,字符串。加入(」|「,航點) ,ApiKey); 我收到消息「REQUEST_DENIED」。那麼我做錯了什麼? – Kadaj
公平地說,你是對的。我看到了一些例子,他們把關鍵字放在請求字符串的末尾,但是當我將它切換爲第一個參數時,它很有效: var requestUrl = string.Format(「maps.googleapis.com/maps/api/directions/ json?key = {3}&origin = {0}&destinati on = {1}&waypoints = {2}「,origin,destination,string.Join(」|「,waypoints),ApiKey); 所以它現在的作品:D再次感謝你,即使你恨我:D – Kadaj