GPS两点的距离
目前手頭的一個項目要用到GPS地理定位信息,很自然的就需要知道兩個地點之間的距離,于是上網找了一下,同樣自然的就有一些算法貼出來。。(網絡真是幫了大忙,省得我再去翻幾何書自己研究算法了!公式早都忘光了。)
算法如下:(我已經把它轉換為C++代碼)
namespace gps
{
#include <math.h>
?// 計算弧度
?double?rad(double d)
?{
??const double PI = 3.1415926535898;
??return d * PI / 180.0;
?}
?// 從兩個gps坐標點(經緯度)獲得兩點的直線距離,單位是米
?int?CalcDistance(float fLati1, float fLong1, float fLati2, float fLong2)
?{
??const float EARTH_RADIUS = 6378.137;
??double radLat1 = rad(fLati1);
??double radLat2 = rad(fLati2);
??double a = radLat1 - radLat2;
??double b = rad(fLong1) - rad(fLong2);
??double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
??s = s * EARTH_RADIUS;
??s = (int)(s * 10000000) / 10000;
??return s;
?}
}
需要對此算法的可靠性和準確性做個大致的驗證,于是,打開GoogleEarth!(想想沒有GoogleEarth的日子可怎么辦?)
隨便測試了三次,分別找了各種特點的3對點,因為要考慮一下對于比如“同一橫坐標”這種情形測試一下。
結果是:這個算法還是相當的準確的,誤差在千分之幾的樣子,而且誤差很有可能是我的操作帶來的,雖然我已經盡量減小操作的影響。還有一點,此算法倒數第二行代碼原來是C#的Math.Round()函數調用,我沒有仔細研究區別,直接改為了“s =?(int)(s * 10000000) / 10000;”,這樣也會帶來誤差。
抓圖看一下對比:
這是從googleearth上用標尺測量兩個地點之間的距離:結果是4317.14米。
?
把這兩個點的坐標代入算法進行計算,結果如下:
?
真tnnd準! ^^ 或許,googleearth也是用的同樣算法??
總結
- 上一篇: UTC时间戳-时间字符串之间互相转化
- 下一篇: RTSP、RTMP和HTTP协议的区别