根据经纬度计算距离
SQL 计算距离
SELECT*,6378.138 * 2 * ASIN(SQRT(POW(SIN(('.$lat.' * PI() / 180 — lat * PI() / 180) / 2), 2) + COS('.$lat.' * PI() / 180) * COS(lat * PI() / 180) * POW(SIN(('.$lng.' * PI() / 180 — lng * PI() / 180) / 2), 2))) *1000 AS distanceFROMdistanceORDER BYdistance ASC
Javascript 计算距离
function getDistance(lat1, lng1, lat2, lng2) {let radLat1 = toRadians(lat1);let radLat2 = toRadians(lat2);let deltaLat = radLat1 — radLat2;let deltaLng = toRadians(lng1) — toRadians(lng2);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)));return dis * 6378.137;function toRadians(d) { return d * Math.PI / 180;}}getDistance(39.54, 116.23, 38.85, 115.48) //100.43073284694667 //单位:公里
Java 计算距离
private static final double EARTH_RADIUS = 6378137;//赤道半径private static double rad(double d){return d * Math.PI / 180.0;}public static double GetDistance(double lon1,double lat1,double lon2, double lat2) {double radLat1 = rad(lat1);double radLat2 = rad(lat2);double a = radLat1 — radLat2;double b = rad(lon1) — rad(lon2);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)));s = s * EARTH_RADIUS;return s; //单位:米}
Python 计算距离
from math import sin, asin, cos, radians, fabs, sqrtdef haversine(lon1, lat1, lon2, lat2): # 经度1, 纬度1, 经度2, 纬度2 (十进制度数)# 将十进制度数转化为弧度lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])# haversine公式dlon = lon2 — lon1dlat = lat2 — lat1a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2c = 2 * asin(sqrt(a))r = 6371 # 地球平均半径, 单位:为公里return c * r * 1000# 38352.523132 (m为单位:)print haversine(113.973129, 22.599578, 114.3311032, 22.6986848)
