0

我正在尝试获取轨道、地理编码器或任何其他有效方式上两个经纬度点之间的行驶距离。有吗?

4

3 回答 3

2

Google Maps API v3 文档指定起点或目的地(或航点)可以是地址或google.maps.LatLng。要获取两个经度/纬度点之间的行驶距离,请将它们作为 google.maps.LatLng 对象在请求中传递。

相关问题:谷歌地图 v3 中所有航点的总距离和时间

概念证明小提琴

代码片段(基于文档中的示例):

function initMap() {
  var directionsService = new google.maps.DirectionsService;
  var directionsDisplay = new google.maps.DirectionsRenderer;
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 7,
    center: {
      lat: 41.85,
      lng: -87.65
    }
  });
  directionsDisplay.setMap(map);
  // New York, NY, USA (40.7127837, -74.0059413)
  var start = new google.maps.LatLng(40.7127837, -74.0059413);
  //Baltimore, MD, USA (39.2903848, -76.6121893)
  var end = new google.maps.LatLng(39.2903848, -76.6121893);
  calculateAndDisplayRoute(start, end, directionsService, directionsDisplay);
}

function calculateAndDisplayRoute(start, end, directionsService, directionsDisplay) {
  directionsService.route({
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
  }, function(response, status) {
    if (status === google.maps.DirectionsStatus.OK) {
      var totaldistance = 0;
      var route = response.routes[0];
      // display total distance information.
      for (var i = 0; i < route.legs.length; i++) {
        totaldistance = totaldistance + route.legs[i].distance.value;
      }
      document.getElementById('distance').innerHTML += "<p>total distance is " + (totaldistance / 1000).toFixed(2) + " km</p>";
      directionsDisplay.setDirections(response);
    } else {
      window.alert('Directions request failed due to ' + status);
    }
  });
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="distance"></div>
<div id="map"></div>

于 2013-01-03T14:23:37.873 回答
1
    var R = 6371; 
    var dLat = toRad(lat2-lat1);
    var dLon = toRad(lon2-lon1); 

    var dLat1 = toRad(lat1);
    var dLat2 = toRad(lat2);

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(dLat1) * Math.cos(dLat1) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c;
    alert(d);

    function toRad(Value) {
     /** Converts numeric degrees to radians */
     return Value * Math.PI / 180;
于 2013-06-13T09:54:48.923 回答
1

如果您不想依赖(制作精良的)Google API 或受限于 API 限制,我刚刚发现了另一种选择:OpenStreetMap 的osrm-project

就我而言,我需要检索到某个兴趣点的近 200,000 所房屋的最近行驶距离。

于 2017-11-02T19:06:47.687 回答