php百度地图距离排序,百度地图计算两点之间距离

这篇博客介绍了在Android SDK中计算两点间距离的两种方法,包括从2.0.0版本开始提供的DistanceUtil接口以及适用于不同情况的勾股定理计算和球面大圆劣弧长度计算。示例代码展示了如何使用这些方法来计算两个GeoPoint对象之间的距离。
摘要由CSDN通过智能技术生成

路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法。

如果是计算任意两点的距离,自2.0.0版本开始,Android SDK为开发者提供了计算距离的接口(DistanceUtil),具体使用方法如下:

1.GeoPoint p1LL = new GeoPoint(39971802, 116347927);

2.GeoPoint p2LL = new GeoPoint(39892131, 116498555);

3.double distance = DistanceUtil.getDistance(p1LL, p2LL);

如果开发者使用的是1.3.5及以前的版本,在计算任意两点之前的距离时,有如下两种方法:一种利用勾股定理计算,适用于两点距离很近的情况;一种按标准的球面大圆劣弧长度计算,适用于距离较远的情况。

1.static double DEF_PI = 3.14159265359; // PI

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

3.static double DEF_PI180= 0.01745329252; // PI/180.0

4.static double DEF_R =6370693.5; // radius of earth

5.public double GetShortDistance(double lon1, double lat1, double lon2, double lat2)

6.{

7.double ew1, ns1, ew2, ns2;

8.double dx, dy, dew;

9.double distance;

10.// 角度转换为弧度

11.ew1 = lon1 * DEF_PI180;

12.ns1 = lat1 * DEF_PI180;

13.ew2 = lon2 * DEF_PI180;

14.ns2 = lat2 * DEF_PI180;

15.// 经度差

16.dew = ew1 - ew2;

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

18.if (dew > DEF_PI)

19.dew = DEF_2PI - dew;

20.else if (dew < -DEF_PI)

21.dew = DEF_2PI + dew;

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

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

24.// 勾股定理求斜边长

25.distance = Math.sqrt(dx * dx + dy * dy);

26.return distance;

27.}

28.public double GetLongDistance(double lon1, double lat1, double lon2, double lat2)

29.{

30.double ew1, ns1, ew2, ns2;

31.double distance;

32.// 角度转换为弧度

33.ew1 = lon1 * DEF_PI180;

34.ns1 = lat1 * DEF_PI180;

35.ew2 = lon2 * DEF_PI180;

36.ns2 = lat2 * DEF_PI180;

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

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

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

40.if (distance > 1.0)

41. distance = 1.0;

42.else if (distance < -1.0)

43. distance = -1.0;

44.// 求大圆劣弧长度

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

46.return distance;

47.}

48.double mLat1 = 39.90923; // point1纬度

49.double mLon1 = 116.357428; // point1经度

50.double mLat2 = 39.90923;// point2纬度

51.double mLon2 = 116.397428;// point2经度

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值