2017-12-12 7 views
-1

Google Maps API를 사용하여 데이터베이스에서 웨이 포인트 세트를 라우팅하고 최적화합니다. 경유지는 무작위 순서로 공급됩니다. 적절한 경로 순서를 만들기 위해 googlemaps를 통해 경유지를 최적화 한 후에는 데이터베이스에서 경로 순서를 업데이트 할 수 있도록 경로를 원래 순서와 연관시키는 방법이 필요합니다.GoogleMap 웨이 포인트 최적화 및 원래 시퀀스에 연결

예를 들어

DB를에서 내 원본 데이터 (LoadNum가 시작 비어) 아래처럼 보일 수 있습니다 : Google지도는 경로를 최적화 한 후

LoadNum Order address City State Zip 
    blank 1 456 Elm Street Chicago IL 12345 
    blank 2 123 Main Street Cleveland OH 12345 
    blank 3 678 Market Street Beverly Hills CA 90210 

주소가 각에 가까운 경기에 약간 변경 될 수 있습니다 그 거리의, 범위와 함께 아래와 같이;

LoadNum Order address City State Zip 
     blank 2 120-160 Main Street Cleveland OH 12345 
     blank 1 200-300 Elm Street Chicago IL 12345 
     blank 3 678 Market Street Beverly Hills CA 90210 

는 Google지도 또한 내가 데이터베이스에 loadnumber으로 할당 할 경로 세그먼트 번호를 반환하지만 나는 경기를 보장 할 수있는 방법이 없습니다. 주소 (googlemaps)에 식별자 (OrderNumber)를 전달하고 이상이있는 레코드가 반환되면 주소가 변경된 경우에도 주문 번호 'x'가 1임을 알 수 있습니다.

아래 코드 스 니펫,

directionsService.route({ 
      origin: document.getElementById('StartBoxAjax').value, 
      destination: document.getElementById('EndBoxAjax').value, 
      waypoints: waypts, 
      optimizeWaypoints: true, 
      travelMode: 'DRIVING' 
     }, function (response, status) { 
      if (status === 'OK') { 
       directionsDisplay.setDirections(response); 
       var route = response.routes[0]; 
       var string = []; 
       document.getElementById('<%=JScriptParm.ClientID %>').value = "" 
       var summaryPanel = document.getElementById('directions-panel'); 
       summaryPanel.innerHTML = ''; 
       // For each route, display summary information. 
       for (var i = 0; i < route.legs.length; i++) { 
        var routeSegment = i + 1; 
        summaryPanel.innerHTML += '<b>Route Segment: ' + routeSegment + 
         '</b><br>'; 
        summaryPanel.innerHTML += route.legs[i].start_address + ' to '; 
        summaryPanel.innerHTML += route.legs[i].end_address + '<br>'; 
        summaryPanel.innerHTML += route.legs[i].distance.text + '<br><br>'; 
        //document.getElementById('JScriptParm').value += routeSegment; 
        document.getElementById('<%=JScriptParm.ClientID %>').value += routeSegment + ',' + route.legs[i].end_address + '|'; 
        // string += routeSegment + ',' + route.legs[i].end_address + '|'; 
        // document.getElementById('<%=JScriptParm.ClientID %>').value = string; 

       } 

그런 다음 코드에서 내가 DB를하고 싶으면 뒤에 : 먼저 자바 스크립트 내가 변수로 routeSegment 및 EndAddress을 캡처하고있어 바닥 (그래서 그것을 볼 수 있습니다 지금 실제로 텍스트 필드) 근처입니다 "AddressInDB가 JavaScript에서 반환 된 주소와 일치"하는 위치를 업데이트하십시오.

필자의 예에서 매개 변수는 도시와 주이지만, 충분히 구체적이지는 않습니다. 길고 짧다는 것은 GoogleMaps Javascript API를 통해 식별/반환 매개 변수를 전달하는 방법입니까, 아니면 내가 유지 한 것을 성취 할 수있는 또 다른 방법입니까?

감사합니다.

답변

0

DirectionsRoute 객체 (코드에서 route 변수)에는 원래 웨이 포인트와 재 순서화 된 웨이 포인트 간의 관계를 정의하는 정보가 들어 있습니다. 문서에서 속성 waypoint_order에서 보라 :

https://developers.google.com/maps/documentation/javascript/reference#DirectionsRoute

의 경우에서 optimizeWaypoints사실로 설정이 필드에 입력 웨이 포인트의 재 주문 순열이 포함됩니다.예를 들어, 입력하면이었다

원산지 : 로스 앤젤레스

웨이 포인트 : 달라스, 뱅거, 피닉스

가 대상

: 뉴욕

및 최적화 된 출력으로 주문했다가 다음과

출처 : 로스 앤젤레스

웨이 포인트 : Phoenix, Dallas, Bangor

목적지 : 뉴욕

이 필드는 [2, 0, 1] 값을 포함하는 배열입니다. 경유지의 번호 매기기는 0을 기준으로합니다. 입력 웨이 포인트 중 하나라도 스톱 오버으로 설정된 경우이면이 필드는 비어 있습니다. 이러한 쿼리에서는 경로 최적화를 사용할 수 없기 때문입니다.

+0

정말 감사합니다. 나는 웨이 포인트 (아래)에 대한 문서를 살펴 봤지만 찾고 있던 것을 찾지 못했습니다. : https : //developers.google.com/maps/documentation/javascript/directions#Waypoints – bairdmar