原文參考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creationhtml
本人翻譯水平有限。。。node
加載earth地圖文件編程
osg::Node* globe = osgDB::readNodeFile("myglobe.earth");
最簡單的方式api
API編程式的地圖建立函數
用API建立一個地圖的基本步驟是:工具
1.建立一個地圖對象(Map object)
2.在你認爲合適的地方添加圖像層和高程層
3.建立一個能夠繪製「地圖對象」的MapNode
4.將MapNode添加進場景圖。this
你能夠在任什麼時候候向地圖添加層:google
#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)url
在運行時使用MapNodespa
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(); }