Calculate distance between two points in google maps V3

后端 未结 15 1715
醉梦人生
醉梦人生 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 02:54

    Example using GPS latitude/longitude of 2 points.

    var latitude1 = 39.46;
    var longitude1 = -0.36;
    var latitude2 = 40.40;
    var longitude2 = -3.68;
    
    var distance = google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(latitude1, longitude1), new google.maps.LatLng(latitude2, longitude2));       
    
    0 讨论(0)
  • 2020-11-22 02:57

    In my case it was best to calculate this in SQL Server, since i wanted to take current location and then search for all zip codes within a certain distance from current location. I also had a DB which contained a list of zip codes and their lat longs. Cheers

    --will return the radius for a given number
    create function getRad(@variable float)--function to return rad
    returns float
    as
    begin
    declare @retval float 
    select @retval=(@variable * PI()/180)
    --print @retval
    return @retval
    end
    go
    
    --calc distance
    --drop function dbo.getDistance
    create function getDistance(@cLat float,@cLong float, @tLat float, @tLong float)
    returns float
    as
    begin
    declare @emr float
    declare @dLat float
    declare @dLong float
    declare @a float
    declare @distance float
    declare @c float
    
    set @emr = 6371--earth mean 
    set @dLat = dbo.getRad(@tLat - @cLat);
    set @dLong = dbo.getRad(@tLong - @cLong);
    set @a = sin(@dLat/2)*sin(@dLat/2)+cos(dbo.getRad(@cLat))*cos(dbo.getRad(@tLat))*sin(@dLong/2)*sin(@dLong/2);
    set @c = 2*atn2(sqrt(@a),sqrt(1-@a))
    set @distance = @emr*@c;
    set @distance = @distance * 0.621371 -- i needed it in miles
    --print @distance
    return @distance;
    end 
    go
    
    
    --get all zipcodes within 2 miles, the hardcoded #'s would be passed in by C#
    select *
    from cityzips a where dbo.getDistance(29.76,-95.38,a.lat,a.long) <3
    order by zipcode
    
    0 讨论(0)
  • 2020-11-22 03:00

    Using PHP, you can calculate the distance using this simple function :

    // to calculate distance between two lat & lon
    
    function calculate_distance($lat1, $lon1, $lat2, $lon2, $unit='N') 
    { 
      $theta = $lon1 - $lon2; 
      $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
      $dist = acos($dist); 
      $dist = rad2deg($dist); 
      $miles = $dist * 60 * 1.1515;
      $unit = strtoupper($unit);
    
      if ($unit == "K") {
        return ($miles * 1.609344); 
      } else if ($unit == "N") {
          return ($miles * 0.8684);
        } else {
            return $miles;
          }
    }
    
    // function ends here
    
    0 讨论(0)
  • 2020-11-22 03:02

    Just add this to the beginning of your JavaScript code:

    google.maps.LatLng.prototype.distanceFrom = function(latlng) {
      var lat = [this.lat(), latlng.lat()]
      var lng = [this.lng(), latlng.lng()]
      var R = 6378137;
      var dLat = (lat[1]-lat[0]) * Math.PI / 180;
      var dLng = (lng[1]-lng[0]) * Math.PI / 180;
      var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
      Math.cos(lat[0] * Math.PI / 180 ) * Math.cos(lat[1] * Math.PI / 180 ) *
      Math.sin(dLng/2) * Math.sin(dLng/2);
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      var d = R * c;
      return Math.round(d);
    }
    

    and then use the function like this:

    var loc1 = new GLatLng(52.5773139, 1.3712427);
    var loc2 = new GLatLng(52.4788314, 1.7577444);
    var dist = loc2.distanceFrom(loc1);
    alert(dist/1000);
    
    0 讨论(0)
  • 2020-11-22 03:04

    If you want to calculate it yourself, then you can use the Haversine formula:

    var rad = function(x) {
      return x * Math.PI / 180;
    };
    
    var getDistance = function(p1, p2) {
      var R = 6378137; // Earth’s mean radius in meter
      var dLat = rad(p2.lat() - p1.lat());
      var dLong = rad(p2.lng() - p1.lng());
      var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) *
        Math.sin(dLong / 2) * Math.sin(dLong / 2);
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
      var d = R * c;
      return d; // returns the distance in meter
    };
    
    0 讨论(0)
  • 2020-11-22 03:04
    //JAVA
        public Double getDistanceBetweenTwoPoints(Double latitude1, Double longitude1, Double latitude2, Double longitude2) {
        final int RADIUS_EARTH = 6371;
    
        double dLat = getRad(latitude2 - latitude1);
        double dLong = getRad(longitude2 - longitude1);
    
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(getRad(latitude1)) * Math.cos(getRad(latitude2)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return (RADIUS_EARTH * c) * 1000;
        }
    
        private Double getRad(Double x) {
        return x * Math.PI / 180;
        }
    
    0 讨论(0)
提交回复
热议问题