0

을 사용하여 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"); 
+0

웹 길 찾기 서비스 (사용중인)는 표준 API 사용자 (프리미엄 라이센스가 필요 없음)에 대한 각 서버 측 요청에서 최대 23 개의 중간 지점을 지원합니다. – geocodezip

+0

대답을 찾고있는 동안 나는 다른 모든 질문에 대답했습니다. 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

+0

그리고 공정한 당신은 옳았습니다. 나는 그들이 요청 문자열의 끝에 열쇠를 두는 몇 가지 예를 보았습니다. 그러나 첫 번째 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

답변

0

웹 길 찾기 서비스를 (당신이 사용하고있는 인) 지원 (23 개) 중간 지점에 각 서버 측의 요구에 사용자를위한 : 당신이 상점 필요한 것은 당신과 같이 API 호출에 키를 추가한다는 것입니다 표준 API (프리미엄 라이선스가 필요하지 않음).

키가 필요하지만 이제는 Google의 모든 매핑 서비스에 필요한 키가 (2016 년 6 월 22 일 기준)되었습니다.

+0

로렌스 당신은 최소한 API 키가 필요하다고 지정할 수 있습니다. – Kadaj