[原][譯]從osgEarth2升級到osgEarth3的變化


本文由南水之源翻譯OE官方文檔

Upgrading from osgEarth 2.x to osgEarth 3.x

OsgEarth 3.x的目標是使SDK更容易用於開發人員

既是兩種使用OE的人都更方便:

1.通過API開發者

2.通過使用earth files腳本編寫地球模塊的使用者

(注:之前OE更適合 創建  xxx.earth 文件腳本修改地球環境)

 

OE3.x的主要目標是:

  • 將一切都視為一個“層”,這樣Map就可以成為幾乎所有數據的容器。
  • 使所有圖層類型更加明確,並減少對使用插件的依賴。
  • 通過避免“選項”結構模式,來簡化添加“層”的API。
  • 簡化創建新的或自定義層類型的方法。

地球文件更改

按照向下播放插件層類型的想法,地球文件中的層現在是顯式的。對於2.x中的GDAL層,應該有這樣的內容:

<image name="My Layer" driver="gdal">
    <url>file.tif</url>
</image>

在3.x中,層類型是顯式的,如下所示:

<GDALImage name="My Layer">
    <url>file.tif</url>
</GDALImage>

圖像和高程層類型仍然是分開的,並且使用顯式類型是很好的。3.xGDAL海拔層如下所示:

<GDALElevation name="My DEM">
    <url>dem.tif</url>
</GDALElevation>

下面是將舊設置映射到新的3.x格式的部分表:

2.x 3.x
<image driver="gdal"> <GDALImage>
<elevation driver="gdal"> <GDALElevation>
<image driver="tms"> <TMSImage>
<elevation driver="tms"> <TMSElevation>
<image driver="xyz"> <XYZImage>
<elevation driver="xyz"> <XYZElevation>
<image driver="wms"> <WMSImage>

復合層

2.x中的復合層在圖像或提升層中使用“復合”驅動程序。在3.x中有一個新的頭等艙CompositeImageCompositeElevation類型。以下是一個例子:

<Map>
    <CompositeImage name="combined">
        <layers>
            <TMSImage>
                <url>http://readymap.org/readymap/tiles/1.0.0/7/</url>
            </TMSImage>
            <GDALImage>
                <url>locallInset.tif</url>
            </GDALImage>
        </layers>
    </CompositeImage>
</Map>

特征源

特性層(包含特征數據的層)對於3.x並不是新的,但它們也是顯式的,就像上面的可見層類型一樣。例如,在osgEarth 2.x中,您可以定義一個簡單的特性層,如下所示:

<feature_model name="states">
    <features name="states" driver="ogr">
        <url>../data/usa.shp</url>
    </features>        
    <styles>
        <style type="text/css">
            states {
               stroke: #ffff00;
            }                    
        </style>
    </styles>        
</feature_model>

在osgEarth 3.x中,定義(使用嵌入式特性源)如下所示:

<FeatureModel name="US States">
    <OGRFeatures name="US-Data">
        <url>../data/usa.shp</url>
    </OGRFeatures>
    <styles>
        <style type="text/css">
            states {
               stroke:#ffff00;
            }                    
        </style>
    </styles>        
</FeatureModel>

或者,您可以將您的功能數據定義為一個單獨的層並引用它。這樣,多個可見層可以使用相同的特性源:

<OGRFeatures name="data:states">
    <url>../data/usa.shp</url>
</OGRFeatures>

<FeatureModel name="US States" features="data:states">
    <styles>
        <style type="text/css">
            states {
               stroke: #ffff00;
            }                    
        </style>
    </styles>        
</FeatureModel>

現在,即使是樣式表也可以是一個單獨的層。您可以重寫上面相同的內容:

<OGRFeatures name="data:states">
    <url>../data/usa.shp</url>
</OGRFeatures>

<Styles name="data:styles">
    <style type="text/css">
        states {
           stroke: #ffff00;
        }                    
    </style>
</Styles>  

<FeatureModel name="US States" features="data:states" styles="data:styles">         
</FeatureModel>

API變化

在2.x中,通過創建“選項”結構並將其傳遞給新層的構造函數,創建了映射層(和其他各種東西)。在3.x中,您不再需要這樣做;您只需創建一個新層並調用其setter函數即可。

下面是在osgEarth 2.x中創建WMS映像層的示例:

#include <osgEarthDrivers/wms/WMSOptions>
...
WMSOptions wms;
wms.url() = "http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi";
wms.format() = "png";
wms.layers() = "nexrad-n0r";
wms.srs() = "EPSG:4326";
wms.transparent() = true;

ImageLayerOptions wmsLayerOptions("WMS NEXRAD", wms);
wmsLayerOptions.cachePolicy() = CachePolicy::NO_CACHE;

ImageLayer* layer = new ImageLayer(wmsLayerOptions);
map->addLayer(layer);

在3.x中,API更直觀,沒有任何中間結構:

#include <osgEarth/WMS>
...
WMSImageLayer* wms = new WMSImageLayer();
wms->setURL("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi");
wms->setFormat("png");
wms->setLayers("nexrad-n0r");
wms->setSRS("EPSG:4326");
wms->setTransparent(true);
wms->options().cachePolicy() = CachePolicy::NO_CACHE;
map->addLayer(wms);

對所有層類型遵循相同的模式。見osgearth_map.cpp舉幾個例子。


免責聲明!

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



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