을 사용하여 10 개가 넘는 주소를 최적화하는 방법이 방법은 매우 간단합니다. 지도 API를 사용하여 최적화 된 경로를 가져 오는 헬퍼 클래스의 함수가 있습니다. 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 개 좌표 (위도 & LANG 쌍), 2를 보낼 수있는 방법으로 시작과 끝 위치 및 기타 (8) 등 - 포인트,하지만 20을 보내는 방법? 아니면 30?
나는 이미 최적화 된 좌표 목록을 보여 주거나 계산하는 것에 대해 주로 대답하는 다른 많은 사이트와 여기에서 많은 질문을 많이 읽었습니다.
내 목록을 10 개 미만의 좌표가있는 여러 목록으로 나눌 수 있다는 것을 알고 있지만 모든 좌표와 부분 만 고려하기 때문에 제대로 된 경로를 얻지는 못합니다. 적절하게 최적화 될 것입니다.
불행히도 Google에 프리미엄 라이센스를 지불 할 여력이 없습니다. (실수하지 않으면 10 억 달러짜리 괴롭힘 : S).
편집 : 분명히 서버 측에서 웹 길 찾기 서비스를 사용할 때 23 가지 웨이 포인트 제한을 수행 할 수 있습니다.
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
그리고 공정한 당신은 옳았습니다. 나는 그들이 요청 문자열의 끝에 열쇠를 두는 몇 가지 예를 보았습니다. 그러나 첫 번째 param이되도록 전환했을 때 작동했습니다 : var requestUrl = string.Format ("maps.googleapis.com/maps/api/directions/ json? key = {3} & origin = {0} & destinati on = {1} & waypoints = {2} ", 출발지, 목적지, string.Join ("| ", 경유지), ApiKey); 이제 작동합니다. D 다시 한번 감사 드리며, 나를 싫어할지라도 : D – Kadaj