2016-10-03 3 views
0

Google Distance Matrix API는 현재 위치를 선택했을 때 가장 가까운 드라이브 위치를 반환 할 수 있습니까?위치가 "off road"일 때의 거리 계산

약간의 배경 : 견적 과정 중에 예상 운송 위치로 예상 운송료를 계산해야합니다.

최종 목표는 견적을 생성 한 사람이 입력 한 주소를 사용하여 실시간 거리 계산입니다. 그러나 이것은 현재 각 공장에 대한 마일리지와 함께 우편 번호 데이터베이스를 사용하여 처리됩니다. 예 :

이 데이터는 오래되었으므로 대화식 버전을 출시 할 때까지 업데이트해야합니다.

나는 많은 거리를 업데이트하기 위해 Google Maps Distance Matrix (성공적으로)를 사용하고 있습니다. 그러나 나는 코드 변화를 통해 해쉬 할 수없는 것을 보았습니다. Google에 제공된 우편 번호가 물 (관련 게시물 : Distance Matrix API: Zip Code 70128 returns zero results) 또는 섬 (예 : 02543 : https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=47601,%20USA&destinations=02543,%20USA)의 가운데에 위치하면 반환되는 상태는 'ZERO_RESULTS'입니다.

우즈 홀 (MA 02543)까지 차로 운전할 수 있습니다. 예를 들어 266 Woods Hole Road, Woods Hole, MA 02543. Woods Hold Oceanographic Institution의 주소.

미국 우편 번호가 특정 위치가 아니기 때문에 나는 정확한 거리를 찾고 있지 않다 ... 그래서 "인근"은 인용 목적으로는 괜찮을 것이다. 어떤 제안?

+0

입니까? 결과 지오 메트릭을 시도 했습니까? 우편 번호를 지오 코딩하는 것처럼 보이게 한 다음 결과 좌표를 역 지오 코딩하면 사용할 수있는 일련의 결과를 얻을 수 있습니다. – geocodezip

답변

1

실패한 우편 번호를 지오 코딩 한 다음 결과 좌표를 역 지오 코딩하면 사용할 수있는 결과 세트가 표시됩니다.

나는 당신의 예를 들어 그 일에서 얻는 결과는 다음과 같습니다 16-22 알바트 로스 성, 우즈 홀, MA 02543, USA에 47,601 IN

Boonville, 미국 : 16시간 39 분에서 1,759km 47601 IN

Boonville, 미국 (23) 알바트 로스 성, 우즈 홀, MA 02543, USA에 : 520 MAIN ST, 팰 머스, MA 02540-47601 IN 16시간 39 분

Boonville에서 1,759km, 미국, 미국 : 1,754 km in 16 시간 33 분

(Google지도 자바 스크립트 API DistanceMatrix 서비스를 사용하여)

코드 : 그것은 얼마나 많은 위치

var geocoder = new google.maps.Geocoder(); 
 
var service = new google.maps.DistanceMatrixService(); 
 
var map; 
 
// https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=47601,%20USA&destinations=02543,%20USA 
 
function initialize() { 
 
    var map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    service.getDistanceMatrix({ 
 
    origins: ["47601, USA"], 
 
    destinations: ["02543, USA"], 
 
    travelMode: 'DRIVING', 
 
    unitSystem: google.maps.UnitSystem.METRIC, 
 
    avoidHighways: false, 
 
    avoidTolls: false 
 
    }, function(response, status) { 
 
    console.log("status=" + status + ", response=" + response); 
 
    if (status != 'OK') { 
 
     alert('Error was: ' + status); 
 
    } else { 
 
     var originList = response.originAddresses; 
 
     var destinationList = response.destinationAddresses; 
 
     var outputDiv = document.getElementById('output'); 
 
     outputDiv.innerHTML = ''; 
 

 
     for (var i = 0; i < originList.length; i++) { 
 
     var results = response.rows[i].elements; 
 
     for (var j = 0; j < results.length; j++) { 
 
      if (results[j].status != 'OK') { 
 
      alert("result[" + j + "] Error was: " + results[j].status); 
 
      geocoder.geocode({ 
 
       'address': destinationList[i] 
 
      }, reverseGeocodeResult); 
 
      break; 
 
      } 
 
      outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] + 
 
      ': ' + results[j].distance.text + ' in ' + 
 
      results[j].duration.text + '<br>'; 
 
     } 
 
     } 
 
    } 
 
    }); 
 
} 
 

 
function reverseGeocodeResult(response, status) { 
 
    if (status == 'OK') { 
 
    geocoder.geocode({ 
 
     latLng: response[0].geometry.location 
 
    }, findDistancesToResponses); 
 
    } 
 
} 
 

 
function findDistancesToResponses(response, status) { 
 
    var destArr = []; 
 
    for (var i = 0; i < response.length; i++) { 
 
    destArr.push(response[i].geometry.location); 
 
    } 
 
    service.getDistanceMatrix({ 
 
    origins: ["47601, USA"], 
 
    destinations: destArr, 
 
    travelMode: 'DRIVING', 
 
    unitSystem: google.maps.UnitSystem.METRIC, 
 
    avoidHighways: false, 
 
    avoidTolls: false 
 
    }, function(response, status) { 
 
    var originList = response.originAddresses; 
 
    var destinationList = response.destinationAddresses; 
 
    var outputDiv = document.getElementById('output'); 
 
    outputDiv.innerHTML = ''; 
 

 
    for (var i = 0; i < originList.length; i++) { 
 
     var results = response.rows[i].elements; 
 
     for (var j = 0; j < results.length; j++) { 
 
     if (results[j].status != 'OK') { 
 
      alert("result[" + j + "] " + destinationList[j] + " Error was: " + results[j].status); 
 
     } 
 
     outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] + 
 
      ': ' + results[j].distance.text + ' in ' + 
 
      results[j].duration.text + '<br>'; 
 
     } 
 
    } 
 
    }) 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places&ext=.js"></script> 
 
<div id="map_canvas"></div> 
 
<div id="output"></div>

+0

흥미 롭다면, 나는이 문제를 해결할 수있는 기회를 줄 것이다. – DragonYen