日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPS两点的距离

發布時間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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也是用的同樣算法??

總結

以上是生活随笔為你收集整理的GPS两点的距离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。