osgEarth獲取經緯度和高程的幾種方法

2021-07-05 17:22:17 字數 1363 閱讀 4132

希望各位批評指正互相交流學習。這幾種方法在經度方面有不小的差別我會推薦大家使用經度相對較高的一種。

1、這種方法在重寫handle函式中用的最多了,先求得世界座標x、y、z,在把它們轉換成經緯度和高程資料

osgutil::linesegmentintersector::intersections inters1;

osg::vec3d m_temppoint1;

::handle(const osgga::guieventadapter& ea,osgga::guiactionadapter& aa)

}2、這種方法在知道經緯度座標時想求出這點的高程資料時用的比較多。

osg::ref_ptrm_pmapnode;

osg::vec3 vec; //經緯度座標

double height=0.0;

m_pmapnode->getterrain()->getheight(m_pmapnode->getmapsrs(),vec.x(),vec.y(),&height);

height 就是在相應經緯度座標下的高程。但是這種方法求出來的資料精度較低,因為我在我放置模型發現模型的位置有時候會存在較大誤差,當和下一種方法比較時發現

誤差最大達到幾百公尺,這還是挺驚人的特別是設定了高程誇張係數之後誤差又被放大幾倍,嚴重影響精度。

3、這種方法較上兩種方法精度都比較高,使用時發現能滿足要求。

double query_resolution = 0.00000001; 

double out_hamsl        = 0.0;

double out_resolution   = 0.0;

osgearth::elevationquery query(m_pmap.get());

query.getelevation(geopoint(m_pmapnode->getmapsrs(),103.50,31.50,0.0,osgearth::altitudemode::altmode_relative),

out_hamsl,

query_resolution, 

&out_resolution );

out_hamsl        就是經度在103.5°和維度在31.50°的高程,這裡注意一下query_resolution 這個引數,其實奧妙就在這裡,如果把它設定成0.1時,它表示資料獲取精度是0.1°所以獲得高程資料也是有較大誤差的,如果設定成0.00000001時,它表示的獲取精度是0.00000001°,所以這個引數設定小一些就能提高資料獲取精度滿足要求。如果大家在開發中需要獲取較高精度的高程資料比如放置乙個模型在地球上就可以使用這種方法。

osgearth中獲取經緯度和高程資料的方法肯定不止這幾種,這裡只是簡單地總結一下我使用過得幾種方法,希望能給大家帶來些用處。

iOS獲取經緯度

在ios8.0以上獲取經緯度時,需要申請授權,否則不能定位 第一步 在 homeviewcontroller.m inte ce homeviewcontroller cllocationmanagerdelegate 第二步 設定定位 void setuplocationmanager locat...

window phone 獲取經緯度資訊

ps 因為需要冷啟動至少也需要一分鐘以上,所以最好在公共類初始化,在需要呼叫的時候直接使用。geocoordinatewatcher 類提供基於座標的位置資料,其來自當前的位置提供程式。來自當前位置提供程式的基於座標的位置資料,該提供程式是計算機上優先級別最高的位置提供程式,其優先級別取決於一系列因...

Android中如何獲取經緯度

前提是 在這之前jingwd 方法被呼叫過了,比如放在oncreate 裡,因為這裡面 是具體的實現,下面是 private locationmanager locationmanager private string locationprovider 經緯度獲取 private void jing...