原理:Haversine (半正矢)公式
haversine在三角函数中,称1/2(1-cosα)为角α的半正矢,记作havα, 即hav α=1/2(1一cosα)
程序:1、SQL实现。 2、JS代码实现
变换后的计算公式
这是Js实现
const calcDistanceByLocation = (lon1, lat1, lon2, lat2) => {
return 6378137 * 2 * Math.asin(
Math.sqrt(
Math.pow(Math.sin((lat2 * Math.PI / 180 - lat1 * Math.PI / 180) / 2), 2) +
Math.cos(lat2 * Math.PI / 180) *
Math.cos(lat1 * Math.PI / 180) *
Math.pow(Math.sin((lon2 * Math.PI / 180 - lon1 * Math.PI / 180) / 2), 2)
)
)
}
这是SQL实现
6378137 * 2 * ASIN(
SQRT(
POW( SIN(( Δlatitude * PI() / 180 - latitudeColumn * PI() / 180 ) / 2 ), 2 ) +
COS( Δlatitude * PI() / 180 ) * COS( latitudeColumn * PI() / 180 ) * POW( SIN(( Δlongitude * PI() / 180 - longitudeColumn * PI() / 180 ) / 2 ), 2 )
)
) AS distance
Δlatitude表示两坐标点纬度差,Δlongitude表示两坐标点经度差。
——Δ——Δ——Δ——Δ—分—Δ—割—Δ—线—Δ——Δ——Δ——Δ——Δ——