|
在网上找了一下,基本都那么一个公式,
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:
C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = R*Arccos(C)*Pi/180
这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile
根据上面的公式计算的结果与google earth、mapinfo的结果有差距,如下:
经度 纬度 计算距离 mapinfo距离 google earth距离
109.99309 39.81625
109.99456 39.81595 0.143603392 0.13 0.13
109.99323 39.8144 0.206140802 0.2064 0.21
109.99456 39.81485 0.209179973 0.1999 0.2
109.99693 39.819
110.00117 39.81976 0.410852166 0.3728 0.37
可以看出google earth 与mapinfo计算的距离是一致的,求精确计算的算法,谢谢。 |
|