Итак, это будет довольно прямой вопрос. У меня есть функция в вспомогательном классе для получения оптимизированного маршрута (или нет) с использованием API карт.Как оптимизировать более 10 адресов, используя google-maps 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 координат (лат & Ланг пару), 2 в качестве начальной и конечной позиции, а другие 8 как способ точки, но как отправить 20? Или 30?
Я прочитал много вопросов здесь, на SO и других сайтах, которые в основном отвечали на вопрос о показе или вычислении уже оптимизированного списка координат.
Я знаю, что я могу разделить мой список на несколько списков, которые имеют менее 10 координат, но таким образом я бы не стал правильно оптимизированным маршрутом, так как он не учитывает все координаты и только его части будет правильно оптимизирована.
К сожалению, я не могу позволить себе платить за премиальную лицензию на google (если я не ошибаюсь, это 10k freaking bucks: 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");
Служба веб-направлений (именно это то, что вы используете) поддерживает до 23 путевых точек в каждом запросе на сервер для пользователей стандартного API (вам не нужна высококачественная лицензия). – geocodezip
Каждый другой вопрос, который я видел, когда я искал ответ, имел один из ваших ответов xD В любом случае, я не знаю, почему вы проголосовали за меня, но то, что вы сказали, неверно. Когда я пытаюсь добавить более 8 way-points (так как это без ключа), я получаю статус «MAX_WAYPOINTS_EXCEEDED», и когда я добавляю ключ к моему вызову так: var requestUrl = string.Format ("https: // maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&waypoints={2}&key={3} ", origin, destination, string.Join (" | ", waypoints) , 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