百度地图计算两坐标点之间距离计算

我就是我 2022-03-31 09:50 941阅读 0赞

public class BaiDuMap {

` static`double DEF_PI = 3.14159265359 ; // PI

` static`double DEF_2PI= 6.28318530712 ; // 2*PI

` static`double DEF_PI180= 0.01745329252 ; // PI/180.0

` static`double DEF_R = 6370693.5 ; // radius of earth

` //适用于近距离`

` public`static double GetShortDistance( double lon1, double lat1, double lon2, double lat2)

` {`

` double`ew1, ns1, ew2, ns2;

` double`dx, dy, dew;

` double`distance;

` // 角度转换为弧度`

` ew1 = lon1 * DEF_PI180;`

` ns1 = lat1 * DEF_PI180;`

` ew2 = lon2 * DEF_PI180;`

` ns2 = lat2 * DEF_PI180;`

` // 经度差`

` dew = ew1 - ew2;`

` // 若跨东经和西经180 度,进行调整`

` if`(dew > DEF_PI)

` dew = DEF_2PI - dew;`

` else`if (dew < -DEF_PI)

` dew = DEF_2PI + dew;`

` dx = DEF_R Math.cos(ns1) dew; `// 东西方向长度(在纬度圈上的投影长度)

` dy = DEF_R * (ns1 - ns2); `// 南北方向长度(在经度圈上的投影长度)

` // 勾股定理求斜边长`

` distance = Math.sqrt(dx dx + dy dy);`

` return`distance;

` }`

` //适用于远距离`

` public`static double GetLongDistance( double lon1, double lat1, double lon2, double lat2)

` {`

` double`ew1, ns1, ew2, ns2;

` double`distance;

` // 角度转换为弧度`

` ew1 = lon1 * DEF_PI180;`

` ns1 = lat1 * DEF_PI180;`

` ew2 = lon2 * DEF_PI180;`

` ns2 = lat2 * DEF_PI180;`

` // 求大圆劣弧与球心所夹的角(弧度)`

` distance = Math.sin(ns1) Math.sin(ns2) + Math.cos(ns1) Math.cos(ns2) * Math.cos(ew1 - ew2);`

` // 调整到[-1..1]范围内,避免溢出`

` if`(distance > 1.0 )

` distance = `1.0 ;

` else`if (distance < - 1.0 )

` distance = -`1.0 ;

` // 求大圆劣弧长度`

` distance = DEF_R * Math.acos(distance);`

` return`distance;

` }`

` public`static void main(String[] args) {

` double`mLat1 = 39.90923 ; // point1纬度

` double`mLon1 = 116.357428 ; // point1经度

` double`mLat2 = 39.90923 ; // point2纬度

` double`mLon2 = 116.397428 ; // point2经度

` double`distance = BaiDuMap.GetShortDistance(mLon1, mLat1, mLon2, mLat2);

` System.out.println(distance);`

` }`

}

发表评论

表情:
评论列表 (有 0 条评论,941人围观)

还没有评论,来说两句吧...

相关阅读