`
king_tt
  • 浏览: 2108896 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

获取两点(经纬度表示)间距离

 
阅读更多

经常有朋友或同事征询有关如何获取两点(经纬度表示)间距离的问题,现将解决方法写出来,以供自己和朋友查询、学习。

解决此问题的关键是要理解空间几何模型,在理解空间几何模型的基础上再利用数学公式求取两点之间的值。其解决步骤如下:

1、设两点分别为P1、P2,如果其值是用度分秒形式表示,则需将其转换成十进制度的形式,如P1点纬度为23度30分,则其纬度值转换成十进制度的形式为23.5度。如果值为十进制度的形式,则直接进入第二步。

2、分别将两点的经度、纬度值转换成弧度制形式,如P1纬度为23.5度,转换成弧度制则为:23.5*PI / 180。分别用P1latInRad、P1LongInRad、P2latInRad、P2LongInRad表示。

3、分别求取两点间的纬度差(dlat)与经度差(dlon);

4、求取两点间的正弦与余弦值,公式如下:

A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)*Sin2(dlon/2)(1)

5、求取两点的正切值,公式如下:

C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A))(2)

6、返回两点间的距离:公式如下:

D=EarthRadiusKm * C(3)

附C#源代码:

复制代码
1///<summary>
2///获取两点(经纬度表示)间的距离
3///</summary>
4///<paramname="p1Lat">第一点纬度值</param>
5///<paramname="p1Lng">第一点经度值</param>
6///<paramname="p2Lat">第二点纬度值</param>
7///<paramname="p2Lng">第二点经度值</param>
8///<returns>返回两点间距离</returns>
9publicdoubleGetDistance(doublep1Lat,doublep1Lng,doublep2Lat,doublep2Lng)
10{
11doubledLat1InRad=p1Lat*(Math.PI/180);
12doubledLong1InRad=p1Lng*(Math.PI/180);
13doubledLat2InRad=p2Lat*(Math.PI/180);
14doubledLong2InRad=p2Lng*(Math.PI/180);
15doubledLongitude=dLong2InRad-dLong1InRad;
16doubledLatitude=dLat2InRad-dLat1InRad;
17doublea=Math.Pow(Math.Sin(dLatitude/2),2)+Math.Cos(dLat1InRad)*Math.Cos(dLat2InRad)*Math.Pow(Math.Sin(dLongitude/2),2);
18doublec=2*Math.Atan2(Math.Sqrt(a),Math.Sqrt(1-a));
19doubledDistance=EarthRadiusKm*c;
20returndDistance;
21}
22
23///<summary>
24///RadiusoftheEarth
25///</summary>
26publicdoubleEarthRadiusKm=6378.137;//WGS-84
复制代码

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics