Calculate distance between two points in google maps V3

后端 未结 15 1697
醉梦人生
醉梦人生 2020-11-22 02:27

How do you calculate the distance between two markers in Google maps V3? (Similar to the distanceFrom function inV2.)

Thanks..

15条回答
  •  清酒与你
    2020-11-22 03:05

    It's Quite easy using Google Distance Matrix service

    First step is to activate Distance Matrix service from google API console. it returns distances between a set of locations. And apply this simple function

    function initMap() {
            var bounds = new google.maps.LatLngBounds;
            var markersArray = [];
    
            var origin1 = {lat:23.0203, lng: 72.5562};
            //var origin2 = 'Ahmedabad, India';
            var destinationA = {lat:23.0436503, lng: 72.55008939999993};
            //var destinationB = {lat: 23.2156, lng: 72.6369};
    
            var destinationIcon = 'https://chart.googleapis.com/chart?' +
                'chst=d_map_pin_letter&chld=D|FF0000|000000';
            var originIcon = 'https://chart.googleapis.com/chart?' +
                'chst=d_map_pin_letter&chld=O|FFFF00|000000';
            var map = new google.maps.Map(document.getElementById('map'), {
              center: {lat: 55.53, lng: 9.4},
              zoom: 10
            });
            var geocoder = new google.maps.Geocoder;
    
            var service = new google.maps.DistanceMatrixService;
            service.getDistanceMatrix({
              origins: [origin1],
              destinations: [destinationA],
              travelMode: 'DRIVING',
              unitSystem: google.maps.UnitSystem.METRIC,
              avoidHighways: false,
              avoidTolls: false
            }, function(response, status) {
              if (status !== 'OK') {
                alert('Error was: ' + status);
              } else {
                var originList = response.originAddresses;
                var destinationList = response.destinationAddresses;
                var outputDiv = document.getElementById('output');
                outputDiv.innerHTML = '';
                deleteMarkers(markersArray);
    
                var showGeocodedAddressOnMap = function(asDestination) {
                  var icon = asDestination ? destinationIcon : originIcon;
                  return function(results, status) {
                    if (status === 'OK') {
                      map.fitBounds(bounds.extend(results[0].geometry.location));
                      markersArray.push(new google.maps.Marker({
                        map: map,
                        position: results[0].geometry.location,
                        icon: icon
                      }));
                    } else {
                      alert('Geocode was not successful due to: ' + status);
                    }
                  };
                };
    
                for (var i = 0; i < originList.length; i++) {
                  var results = response.rows[i].elements;
                  geocoder.geocode({'address': originList[i]},
                      showGeocodedAddressOnMap(false));
                  for (var j = 0; j < results.length; j++) {
                    geocoder.geocode({'address': destinationList[j]},
                        showGeocodedAddressOnMap(true));
                    //outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] + ': ' + results[j].distance.text + ' in ' +                    results[j].duration.text + '
    '; outputDiv.innerHTML += results[j].distance.text + '
    '; } } } }); }

    Where origin1 is your location and destinationA is destindation location.you can add above two or more data.

    Rad Full Documentation with an example

提交回复
热议问题