[原][譯][osgearth]API加載地球(OE官方文檔翻譯)


原文參考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creation

本人翻譯水平有限。。。

 

加載earth地圖文件

osg::Node* globe = osgDB::readNodeFile("myglobe.earth");

最簡單的方式

 

API編程式的地圖創建

用API創建一個地圖的基本步驟是:

1.創建一個地圖對象(Map object)
2.在你認為合適的地方添加圖像層和高程層
3.創建一個可以繪制“地圖對象”的MapNode
4.將MapNode添加進場景圖。

你可以在任何時候向地圖添加層:

#include <osgEarth/Map>
#include <osgEarth/MapNode>
#include <osgEarthDrivers/tms/TMSOptions>
#include <osgEarthDrivers/gdal/GDALOptions>

using namespace osgEarth;
using namespace osgEarth::Drivers;
...

// Create a Map and set it to Geocentric to display a globe
Map* map = new Map();

// Add an imagery layer (blue marble from a TMS source)
{
    TMSOptions tms;
    tms.url() = "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/satellite/";
    ImageLayer* layer = new ImageLayer( "NASA", tms );
    map->addImageLayer( layer );
}

// Add an elevationlayer (SRTM from a local GeoTiff file)
{
    GDALOptions gdal;
    gdal.url() = "c:/data/srtm.tif";
    ElevationLayer* layer = new ElevationLayer( "SRTM", gdal );
    map->addElevationLayer( layer );
}

// Create a MapNode to render this map:
MapNode* mapNode = new MapNode( map );
...

viewer->setSceneData( mapNode );

(注意:官方的文檔是OE2.4的,目前的API是OE2.9嘍,時間:2017年2月7日10:27:15)

 

在運行時使用MapNode

MapNode是在場景圖中繪制地圖的節點(node)

如果,你不是用API創建的MapNode,你需要先使用靜態函數get來獲取它:

// Load the map
osg::Node* loadedModel = osgDB::readNodeFile("mymap.earth");

// Find the MapNode
osgEarth::MapNode* mapNode = MapNode::get( loadedModel );

如果你有了MapNode,你就可以使用地圖了:

// Add an OpenStreetMap image source
TMSOptions driverOpt;
driverOpt.url() = "http://tile.openstreetmap.org/";
driverOpt.tmsType() = "google";

ImageLayerOptions layerOpt( "OSM", driverOpt );
layerOpt.profile() = ProfileOptions( "global-mercator" );

ImageLayer* osmLayer = new ImageLayer( layerOpt );
mapNode->getMap()->addImageLayer( osmLayer );

 你也可以刪除或重新訂制圖層:

// Remove a layer from the map.  All other layers are repositioned accordingly
mapNode->getMap()->removeImageLayer( layer );

// Move a layer to position 1 in the image stack
mapNode->getMap()->moveImageLayer( layer, 1 );

 

處理圖層

地圖包含紋理層和高程層對象,這些層包含一些可以在運行時調整的屬性

例如,你可以使用API打開,關閉,或者調整紋理層透明度等

ImageLayer* layer;
...
layer->setOpacity( 0.5 );  // makes the layer partially transparent

 

 

另加:

完整的osgearthviewer工具關於api加載的函數

/** @brief 創建場景 */
int Create()
{
    // create the map.創建一個地圖
    Map* map = new Map();

    // add a TMS imager layer:添加一個TMS圖片層
    TMSOptions imagery;
    imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/7/";
    map->addImageLayer(new ImageLayer("Imagery", imagery));

    // add a TMS elevation layer:添加一個高程圖
    TMSOptions elevation;
    elevation.url() = "http://readymap.org/readymap/tiles/1.0.0/9/";
    map->addElevationLayer(new ElevationLayer("Elevation", elevation));

    // make the map scene graph:
    MapNode* node = new MapNode(map);

    // initialize a viewer:
    osgViewer::Viewer viewer;
    viewer.setCameraManipulator(new EarthManipulator);
    viewer.setSceneData(node);

    // add some stock OSG handlers:
    viewer.addEventHandler(new osgViewer::StatsHandler());
    viewer.addEventHandler(new osgViewer::WindowSizeHandler());
    viewer.addEventHandler(new osgViewer::ThreadingHandler());
    viewer.addEventHandler(new osgViewer::LODScaleHandler());
    viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
    viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage()));

    return viewer.run();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM