根据经纬度计算距离

SQL 计算距离
  1. SELECT
  2. *,
  3. 6378.138 * 2 * ASIN(
  4. SQRT(
  5. POW(
  6. SIN(
  7. (
  8. '.$lat.' * PI() / 180 lat * PI() / 180
  9. ) / 2
  10. ), 2
  11. ) + COS('.$lat.' * PI() / 180) * COS(lat * PI() / 180) * POW(
  12. SIN(
  13. (
  14. '.$lng.' * PI() / 180 lng * PI() / 180
  15. ) / 2
  16. ), 2
  17. )
  18. )
  19. ) *1000 AS distance
  20. FROM
  21. distance
  22. ORDER BY
  23. distance ASC

Javascript 计算距离
  1. function getDistance(lat1, lng1, lat2, lng2) {
  2. let radLat1 = toRadians(lat1);
  3. let radLat2 = toRadians(lat2);
  4. let deltaLat = radLat1 radLat2;
  5. let deltaLng = toRadians(lng1) toRadians(lng2);
  6. let dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
  7. return dis * 6378.137;
  8. function toRadians(d) { return d * Math.PI / 180;}
  9. }
  10. getDistance(39.54, 116.23, 38.85, 115.48) //100.43073284694667 //单位:公里

Java 计算距离
  1. private static final double EARTH_RADIUS = 6378137;//赤道半径
  2. private static double rad(double d){
  3. return d * Math.PI / 180.0;
  4. }
  5. public static double GetDistance(double lon1,double lat1,double lon2, double lat2) {
  6. double radLat1 = rad(lat1);
  7. double radLat2 = rad(lat2);
  8. double a = radLat1 radLat2;
  9. double b = rad(lon1) rad(lon2);
  10. double s = 2 *Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
  11. s = s * EARTH_RADIUS;
  12. return s; //单位:米
  13. }

Python 计算距离
  1. from math import sin, asin, cos, radians, fabs, sqrt
  2. def haversine(lon1, lat1, lon2, lat2): # 经度1, 纬度1, 经度2, 纬度2 (十进制度数)
  3. # 将十进制度数转化为弧度
  4. lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
  5. # haversine公式
  6. dlon = lon2 lon1
  7. dlat = lat2 lat1
  8. a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
  9. c = 2 * asin(sqrt(a))
  10. r = 6371 # 地球平均半径, 单位:为公里
  11. return c * r * 1000
  12. # 38352.523132 (m为单位:)
  13. print haversine(113.973129, 22.599578, 114.3311032, 22.6986848)