且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

计算两个纬度,经度点之间的距离? (半正矢公式)

更新时间:2023-02-01 23:12:54

链接可能对您有所帮助,因为它详细介绍了使用半正矢公式来计算距离。

节选:

  

该脚本[在Javascript]计算两个点之间的大圆距离 -   的,也就是说,在地球表面的最短距离 - 采用   半正矢的公式。

 函数getDistanceFromLatLonInKm(LAT1,lon1,LAT2,lon2){
  VAR R = 6371; //半径在千米的地球
  VAR DLAT = deg2rad(LAT2-LAT1);下面// deg2rad
  VAR dLon = deg2rad(lon2-lon1);
  VAR一个=
    Math.sin(DLAT / 2)* Math.sin(DLAT / 2)+
    Math.cos(deg2rad(LAT1))* Math.cos(deg2rad(LAT2))*
    Math.sin(dLon / 2)* Math.sin(dLon / 2)
    ;
  变种C = 2 * Math.atan2(的Math.sqrt(a)中,的Math.sqrt(1-a))的;
  VAR D = R *℃; //在公里距离
  返回D组;
}

功能deg2rad(度){
  返回度*(Math.PI / 180)
}
 

How do I calculate the distance between two points specified by latitude and longitude?

For clarification, I'd like the distance in kilometers; the points use the WGS84 system and I'd like to understand the relative accuracies of the approaches available.

This link might be helpful to you, as it details the use of the Haversine formula to calculate the distance.

Excerpt:

This script [in Javascript] calculates great-circle distances between the two points – that is, the shortest distance over the earth’s surface – using the ‘Haversine’ formula.

function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = deg2rad(lat2-lat1);  // deg2rad below
  var dLon = deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}