[osgearth]oe學習的一些經驗(別人的)


參考:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=5484&extra=page%3D1&_dsign=70b153d8

 

 

1.        通過earth文件創建圖層時,可以指定多個影像數據源和多個高程數據源,數據源的順序決定渲染順序,在earth文件中處於最前的在渲染時處於最底層渲染;所以如果有高低精度不同的影響數據或者高程數據,在創建earth文件時要將粗精度的數據放在上方xml節點,高精度的放在其下面的節點;
2.        osgEarth自帶多種驅動器,不同的驅動器驅動不同的數據源,自己也可以擴展驅動器讀取相應的數據;
3.        可以通過profile屬性指定數據的投影方式或者數據分頁方式以及地理空間延展;osgEarth通過profile創建數據四叉樹,每個四叉樹節點數據瓦片通過TileKey類來標示;一個地形數據能否正常工作要看創建它的驅動器是否能夠創建和對應profile兼容的數據瓦片;比如,如果要生成地球數據,就需要指定global-geodetic 或者global-mercator profile,相應的數據源要能夠在這種profile下生成相應的地形數據;
4.        通過earth文件,最基本的也是最主要的功能是我們可以指定生成地形的坐標屬性(地理坐標或投影坐標)影像數據、高程數據、矢量數據、模型數據、以及緩沖位置,通過這些基本要素就可以輕易生成我們想要的地形;
5.        osgEarth只能使用16或32位的高程數據源;
6.        如果直接使用原始的影像、高程以及矢量數據,可以用GDAL驅動器,在這種情況下需要注意幾個性能的問題。第一,將數據源預先進行坐標變換,變換為目標地形坐標,否則osgEarth會對源數據進行坐標投影變換,這將降低數據的加載及處理速度。如果預先已經將數據源進行正確的坐標變換,osgEarth就可以省略這個步驟,從而提高其實時處理速度;第二,預先對影像數據進行瓦片處理,比如tiff格式的影像數據,它是逐行掃描存儲的,而osgEarth是每次讀取一個瓦片數據,如果預先對影像數據進行瓦片處理,在動態過程中osgEarth就不需要每次讀取整個大塊影像數據然后提取其需要的瓦片數據,而可以直接讀取相應的瓦片數據即可,這樣就大大提高了瓦片數據的讀取速度。可以通過gdal_translate工具對影像數據進行瓦片處理;第三,創建金字塔數據集可以使osgEarth讀取數據更加高效,可以用gdaladdo工具創建金字塔數據集;總之,要想提高osgEarth的處理效率,就要預先創建高效的數據瓦片結構,除了用gdal、vpb等工具外,也可以通過osgEarth的數據緩沖機制創建預處理的瓦片數據集。比如我們可以創建一個如下的earth文件將數據緩沖到指定的目錄:
<map name="bluemarble" type="geocentric" version="2">

    <!--Add a reference to the image -->
   <image name="bluemarble" driver="gdal">
        <url>c:/data/bluemarble.tif</url>
    </image>

    <options>
       <!--Tell osgEarth to cache the tiles in a TMS format-->
     <cache type="tms">
           <path>c:/osgearth_cache</path>
            <!--Tell osgEarth to cache the tiles to JPG to save disk space-->
          <format>jpg</format>
       </cache>
  </options>
</map>
這種緩沖方式只能緩沖在執行該文件時瀏覽過的地形數據,而不能自動緩沖所有的數據,要想自動緩沖所有的數據,就需要用到osgEarth自帶的一個工具,osgearth_seed,通過osgearth_seed --max-level 7 bluemarble.earth將數據全部緩沖到指定位置,通過這種方式緩沖后,我們就擁有了一個完整的TMS數據源,我們可以直接通過文件目錄的方式訪問該數據源,也可以將該數據源拷貝到我們自己的本地web服務目錄下。詳情見http://osgearth.org/wiki/DataPreparation。除此之外還可以用MapTiler以及TileCache工具創建瓦片數據源,用它創建的瓦片數據源也可以直接在osgEarth下使用;
7.        可以通過兩種方式將osgEarth集成到我們自己的osg應用程序中,第一種就是直接通過earth文件的方式,直接將earth文件讀入作為一個osg節點加入場景即可,另外一種方式就是通過osgEarth的API。通過API的方式大體需要以下幾個步驟:創建map對象——創建影像數據層——創建高程數據層——將影像數據層以及高程數據層加入到map對象——根據前面創建的map對象創建mapNode節點——將mapNode節點加入到場景;示例見http://osgearth.org/wiki/DevelopersGuide。無論是通過earth文件創建的地形還是通過API創建的地形,我們都可以在運行時對其進行修改,如果是用earth文件創建的地形,需要先找到該earth文件對應的mapNode,通過以上兩種方式創建的mapNode,我們可以對地形進行修改操作,如添加新的影像、高程數據,移除特定的影像、高程數據,重新制定影像、高程數據的順序等;
8.        如果我們的地形用的是地心坐標系,可以會碰到當相機距離地面非常近的時候地形被裁減掉的問題,要解決這個問題我們可以通過設置相機的遠近裁剪比率或者創建AutoClipPlaneHandler來解決。AutoClipPlaneHandler可以動態監視相機,當相機距離地面很近時動態調整相機的近裁減面;
9.        在地形上放置模型對象時可以使用ObjectPlacer類,通過該類可以直接通過經緯度坐標進行模型的放置操作;
10.        osgEarth的目標是能夠在osg中開發基於地理信息的應用,能夠方便地瀏覽地理模型數據,能夠與開放標准的地理數據兼容;osgEarth渲染地形的模式分為兩種:實時在線模式(直接使用原始數據渲染生成)以及離線模式(數據預處理成瓦片數據或地形數據庫);
11.        osgEarth使用於以下幾種情況的應用:快速方便地運行地形地圖數據;使用開放標准的地形地圖數據,如WMS、TMS、WCS等;通過Web服務的方式集成本地存儲的地形地圖數據;系統要求以瘦客戶端的方式運行;經常處理隨着時間改變的數據;集成商業數據;
12.        在使用osgEarth自帶的漫游器EarthManipulator時,如果給漫游器設置一個矩陣或者給漫游器設置一個TetherNode然后再解除,然后再移動相機位置,這時計算出的Center會有一個跳躍,然后才正常,造成這個問題的原因是給漫游器設置了參考節點(通過SetNode函數)造成的,設置了參考節點后漫游器要根據參考節點重新計算Center和相機姿態等參數,在以上兩種情況發生時,在重新計算Center時出現了偏差,要想避免以上兩種情況下造成的移動異常,可以不讓相機結合參考節點重新計算Center,即將Pan函數中的recalculateCenter注釋掉即可;
13.        Map的類型分為geocentric和projected兩種類型,即地心方式和投影方式,要建立圓形地球就用geocentric類型,用這種類型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)兩種模式;
14.        Earth文件詳解:
<!—type 屬性可以是geocentric和projected兩種模式,分別對應地心坐標系和平面投影坐標系,默認是地心坐標模式。Version是osgEarth的主版本號,必須有版本號-->
<map  name=”myMap”  type=”geocentric”/”projected”  version=”2”>

<!—定義地圖各圖層的運行時顯示屬性-->
<options>

<!—定義數據緩沖機制,緩沖類型有三種,tms、sqlite3以及tile cache,默認是tms,如果將cache_only設為true,osgEarth將只加載緩沖的數據,不加載任何非緩沖的數據,默認是false-->
<cache type=”tms”/”sqlite3”/”tilecache” cache_only=”false”>

<!—緩沖數據存放目標目錄,適用於tms以及tilecache 兩種類型,直接指定緩沖目錄-->
<path>C:/myCache</path>

<!—緩沖數據存放目標文件,適用於sqlite3,指定數據庫文件名-->
<path>C:/myCache.db</path>

<!—緩沖目標文件類型,適用於tms以及tilecache兩種類型,如果沒有指定類型,將默認用影像數據或高程數據的類型-->
<format>jpg</format>

<!—tms類型,僅適用於tms類型,注意如果該類型是google,索引就是反的-->
<tms_type>google</tms_type>

<!—緩沖文件最大值,單位是MB,不知道該屬性是否只是適用於sqlite3,有待確定-->
<max_size>300</max_size>
</cache>

<!—坐標投影屬性,該屬性相當於渲染數據的地理空間上下文,它決定了系統以哪種方式將世界坐標數據投影到屏幕像素。為了正確渲染影像數據以及高程數據,osgEarth需要知道數據源的profile以及渲染時的profile以進行必要的轉換。-->
<profile name=”myProfile”>

<!—空間參考系統初始化字符串,該字符串的值可以參考PROJ4或WKT,下面是用PROJ4定義的WGS84投影 profile,srs以及作用范圍的定義同樣適用於平面投影模式-->
<srs>prog=latlong +ellps=WGS84 +datum=WGS84</srs>

<!—如果只想讓該profile作用在某個區域,可以給其指定范圍-->
<xmin>-10.2</xmin>
<xmax>-10</xmax>
<ymin>20</ymin>
<ymax>30</ymax>

<!—由於WGS84比較著名,所以可以用下面的簡化方式代替上面的定義-->
<profile>global-geodetic</profile>

<!—另外一個著名的球體投影就是墨卡托投影(yahoo、google、微軟、openstreetmap都是用的這種投影方式),這種投影方式的優點是可以在任何緯度或者預留區域正確地顯示文本信息,可以用下面的簡化方式定義-->
<profile>global-mercator</profile>

<!—也可以不用簡化方式,簡化方式使用默認的橢球體,也可以通過定義srs自己定義橢球體-->
<srs>+proj=latlong +a=6800000 +b=6800000</srs>

<!—定義垂直空間參考系統,相當於垂直高程大地基准-->
<vsrs>egm96-meters</vsrs>
</profile>

<!—定義地形引擎如何渲染影像數據和高程數據-->
<terrain>

<!—定義如何從上層高程數據采集當前層需要的高程數據,比如如果影像數據可以分割到17層,而高程數據到7層,那么8-17層的高程數據就需要從第7層去采集,下面的屬性就指定了以何種方式去采集相應的高程值,一共有四種采集方式,分別是nearest(采集最近相鄰點)、bilinear(雙線插值)、average(平均值插值)、triangulate(根據相鄰的四個點插值)-->
<elevation_interpolation>nearest/bilinear/average/triangulate</elevation_interpolation>

<!—定義是否開啟地形表面的光照,默認是開啟-->
<lighting>true</lighting>

<!—定義如何加載地形數據(數據加載策略),可以定義加載模式mode,分為standard(標准加載模式)、sequential(順序加載模式)以及preemptive(優先級加載模式),默認是標准加載模式,preemptive加載模式不同於順序加載模式,當需要加載最高級瓦片時需要從最低級開始逐層加載,而preemptive模式可以直接跳過中間級直接加載最高級,同時還可以設定不同數據的加載優先級,比如可以設定優先加載影像數據而后加載高程數據等,這樣可以在視覺上得到優化處理。此外還可以指定加載數據時每個CPU創建的線程數量(loading_threads_per_core)或者加載數據使用的總的線程數量(loading_threads),以及編譯地形數據即構建地形瓦片所使用的線程數量(compile_threads),注意,加載數據時每個CPU創建的線程數量和加載數據使用的總的線程數量不能同時指定,只能指定其中一種-->
<loading_policy mode=”preemptive” loading_threads_per_core=”3” compile_threads=”2” ></loading_policy>

<!—定義多個影像數據疊加時如何集成最終的影像數據,一共有四種方式,分別是auto(自動)、multitexture(多重紋理)、texture_array(紋理數組)、multipass(多通道),默認是auto方式,這種方式是系統自動選擇一種紋理組合方法,它首先檢測硬件所支持的各種方法然后選擇第一種。Multitexture方式會為每個影像層指定它自己的影響紋理單元然后通過GPU進行組合,允許的最大紋理層的數量要受GPU的限制,texture_array是使用一個二維紋理數組通過GPU進行組合,multipass方式是通過創建多個渲染通道進行紋理的組合,這種方式沒有紋理層數量的限制,但會影像系統的性能,因為它要給每個紋理層創建一個渲染通道-->
<compositor>auto/multitexture/texture_array/multipass</compositor>

<!—定義地形瓦片分割的最大層數-->
<max_lod>10</max_lod>

<!—定義瓦片范圍系數,也就是瓦片Lod范圍的最大值系數,系統默認是根據瓦片的寬度與該系數相乘作為范圍最大值,該值默認是4,通過該系數可以對不同的地形圖層的lod可見范圍進行控制以提高效率,特別是對於帶有文本的圖層或者測繪標記圖層,可以將該系數設小以大大提高系統的渲染性能-->
<min_tile_range_factor>4.5</min_tile_range_factor>

<!—定義瓦片數據的采樣率,通過設定不同的采樣率以得到不同精細程度的地形瓦片,默認是1.0,詳情可參考osgTerrain-->
<sample_ratio>1.2</sample_ratio>

<!—定義地形瓦片邊緣率,osgTerrain會在不同的瓦片之間繪制邊緣以防止不同的瓦片之間出現縫隙,該值默認是0.02,如果該值太小,在不同瓦片之間就可能會出現縫隙,如果太大,可能會造成不必要的渲染而影響系統的渲染性能,對於高度變化比較大的地形或者是做了高程誇張的地形可以盡量將該值設的大一些,以免出現縫隙-->
<skirt_ratio>0.05</skirt_ratio>

<!—定義高程誇張系數,默認是1.0,也就是正常渲染高程的真實高度-->
<vertical_scale>2.0</vertical_scale>

<!—定義邊緣緩沖率,就是地形瓦片的延展率,比如將地形做鑲嵌或者重投影時為了能夠准確覆蓋到所有的瓦片數據需要將瓦片范圍進行適當的放寬,如果設定0.2,放寬的倍數就是1.02-->
<edge_buffer_ratio>0.02</edge_buffer_ratio>
</terrain>

<!—指定是否對整個map啟用光照-->
<lighting>true</lighting>
</options>

<!—指定影像數據,在同一個map中image的name必需是唯一的;在image下的子要素,有些是公共的,有些是針對特定的driver的。我們可以給影像數據指定driver(驅動器),不同的驅動器用於驅動不同的影像數據源;可以指定cacheid(影像數據緩沖標識),一個影像緩沖標示對應特定的緩沖目錄或緩沖數據庫文件,如果不指定,系統會根據驅動器創建默認的緩沖標識;可以指定影像數據細分的最小層數min_level以及最大層數max_level;可以指定可見范圍min_range以及max_range,該值是影像數據塊距離相機的距離(單位是米),當影像圖層數據塊不在該范圍內時圖層將不顯示,等同於lod節點的可見范圍;可以指定該影像數據的加載權重loading_weight,詳情可見loading_policy,權重越大,加載的優先級越高;可以指定影像瓦片數據黑名單文件名blacklist_filename,當系統請求影像數據瓦片時,如果包含該瓦片的影響文件不存在,系統就會把該請求的數據瓦片放入到一個黑名單中,這樣可以避免再次請求該無效數據,從而提高數據請求的效率。如果黑名單中沒有任何記錄,該黑名單就處於被禁用狀態,也不會影像系統性能。-->
<image name=”myImage”>

<!—指定該影像數據使用的profile,給該數據源指定profile后將覆蓋map的全局profile,默認情況下,影像驅動器會自動判斷數據源應該使用的profile,如果我們覺得驅動器無法自動判斷得到數據源的profile時就要手動指定profile;-->
<profile>global_geodetic</profile>

<!—指定無數據頁nodata_image,某些影像數據服務器,如果客戶端請求的某些層上沒有請求的相應影像數據,就會顯示無數據提示,通過設定該屬性可以讓系統也顯示無數據的狀態提示圖片信息-->
<nodata_image>someURL</nodata_image>

<!—指定無數據信息圖片的透明背景色-->
<transparent_color>0 0 255 200</transparent_color>

<!—指定該圖層是否啟用數據緩沖,默認是啟用的-->
<cache_enabled>true</cache_enabled>

<!—指定緩沖數據文件格式,為該數據源指定緩沖格式后將覆蓋該map的全局緩沖格式,如果不指定,系統將默認使用源數據的文件格式-->
<cache_format>png</cache_format>

<!—指定影像數據的不透明度,默認是1.0,完全不透明,值越小越透明-->
<opacity>0.5</opacity>

<!—指定是否啟用該圖層,默認是啟用-->
<enabled>true</enabled>

<!—指定該影像數據被分割時單個瓦片的大小(像素的寬、高)-->
<tile_size>40</tile_size>

<!—指定最大瓦片緩沖個數,指定該值是為了提高瓦片拼接的效率,默認值是16-->
<l2_cache_size>20</l2_cache_size>
</image>

//特定驅動器屬性設置,驅動器分為影像/高程驅動器、模型驅動器、特征驅動器、緩沖驅動器以及地形引擎驅動器5大類;
//影像/高程驅動器
<!—agglite驅動器,該驅動器將矢量數據柵格化為位圖然后然后將其轉換為地形瓦片紋理層-->
<image name=”myAggliteImage” driver=”agglite”>

<!—定義矢量特征(features)數據,矢量數據的屬性定義都要通過特征節點features來定義,矢量特征數據也要指定自己的驅動器,它不直接創建矢量數據幾何體,只是用來讀取矢量數據,目前矢量數據驅動器主要是ogr及GDAL,支持的矢量數據文件格式就是驅動器支持的所有文件格式 -->
<features name=”myWorld” driver=”ogr”>

<!—指定矢量數據源的位置-->
<url>../data/world.shp</url>

<!—指定讀取數據源的某一層,只有數據源包含多個層時才可用-->
<layer></layer>

<!—指定預處理幾何體緩沖,所有的矢量幾何體都將作為面對象進行緩沖,相當於后台緩沖,通過預先在后台多處理一部分矢量數據,從而在顯示區域發生變化時載入數據比較快,從而降低給視覺造成的數據顯示延遲-->
<buffer distance=”0.02”/>

<!—指定驅動器要驅動的文件類型-->
<ogr_driver>ESRI Shapefile</ogr_driver>

</features>

<!—指定數據繪制的風格,如顏色、透明度、紋理貼圖等等,這種風格的設置一般是用於矢量數據的繪制,osgEarth可以通過兩種方式定義風格,一種是CSS(重疊樣式表),一種是SLD(通過xml指定樣式,還在開發中),當給數據指定風格時,可以各整個數據層指定通過的風格,也可以將數據分解成多個類class,然后給每個類指定不同的風格(數據源需要能夠分解成不同的類)-->
<!—指定線的風格,顏色、寬度、透明度-->
<style type="text/css">
        element {
            stroke: #FF0000;
            stroke-width: 2.0;
            stroke-opacity: 0.5;
        }
    </style>
<!—指定面的風格-->
<style type="text/css">
        element {
            fill: #FF0000;
            fill-opacity: 0.5;
        }
    </style><!—分解成不同的類分別設置不同的風格,下面是根據frence變量進行類的划分並設置不同的風格-->
<features name="world" driver="ogr">
           <url>data/world.shp</url>
           <ogr_driver>ESRI Shapefile</ogr_driver>
       </features>

       <class name="french-speaking">
           <query>
               <expr> french="true" </expr>
           </query>
           <style type="text/css">
               world {
                   fill: #FFFF00;
                   fill-opacity: 0.5;
               }
           </style>
       </class>

       <class name="non-french-speaking">
           <query>
               <expr> french="false" </expr>
           </query>
           <style type="text/css">
               world {
                   fill: #FF0000;
                   fill-opacity: 0.5;
               }
           </style>
       </class>
<!—指定繪制的幾何體類型,點、線、面-->
<geometry_type>line</geometry_type>

//ArcGIS驅動器,是從ESRI的服務器讀取影像數據

//復合驅動器,可以將多個影像數據源(可以使用各自不同的驅動器)復合成一個邏輯圖層,其實是一個偽裝的驅動器,不是真實的驅動器
<image name="grouped layer" driver="composite">

    <image name="component 1" driver="tms">
        ...
    </image>

    <image name="component 2" driver="wms">
        ...
    </image>

    ...

</image>
//GDAL驅動器,使用該驅動器,指定源數據url時可以指定文件也可以指定某個目錄(不必將所有的文件都打包成一個文件),如果指定了目錄,還可以指定要加載該目錄下某些類型的文件(通過指定擴展名),此外,如果指定的是目錄,系統遞歸遍歷該目錄下的所有文件將要加載的文件生成一個邏輯圖層,需要注意的是,該目錄下所有的數據必須是統一的坐標系統以及同樣的波段和波段插值;基於性能的考慮,最好對源數據預先進行分塊分級處理以及坐標重投影預處理,這樣可以大大提高系統在運行時的性能。如果系統讀取到的源數據與運行時要求的投影方式不匹配,系統就會在運行時對數據進行重投影,這樣就會降低系統性能,如果想在這種情況下提高系統性能,可以讓系統緩存重投影后的數據:
<cache reproject_before_caching="true">
        <path>/files/my_cache_folder</path>
    </cache>

<image name="boston_inset" driver="gdal">
        <url>../data/boston-inset.tif</url>
        <tile_size>256</tile_size>
    </image>

//通過指定目錄的方式加載高程數據示例:
<heightfield name="terrain" driver = "gdal">

      <!--To load the files in a directory, just point the URL to a directory instead of a file-->
      <url>..\data\terrain</url>
     
      <!--Tell the GDAL driver to just look for tifs.  Other files types will be ignored.-->
      <extensions>tif</extensions>  

      <!—對於高程數據,最好將tile_size設置為32或者64,默認情況下tile_size的值是256-->
      <tile_size>32</tile_size>

    </heightfield>

<!—指定數據分層的最大層數,如果不指定,系統將自動計算最大層數,這種方式特別適用於緩存自動計算的瓦片數據時-->
<max_data_level>10</max_data_level>

//osg驅動器,直接通過osg的文件讀寫插件讀取相應類型的影響數據或高程數據

//tilecache驅動器,讀取tilecache磁盤緩存數據,通過tilecache工具可以從WMS服務器創建或緩存地圖數據到磁盤,然后通過該驅動器進行離線讀取。
<image name="world" driver="tilecache">
    <url>F:/data/tilecache/mapdata</url>
    <layer>world</layer>
    <format>jpeg</format>
  </image>

//tileservice驅動器,從NASA服務器讀取數據

//tms驅動器,通過tms服務的方式讀取數據

//wms驅動器,通過wms服務的方式讀取數據

//VPB驅動器,從vpb生成的地形數據庫讀取相應的影像和高程數據,注意,osgEarth只能讀取適用VPB使用—terrain選項創建的地形數據庫。這樣一來我們就可以同時使用vpb的地形數據庫以及原始的影像、高程數據,可以在不改變現有vpb地形數據的基礎上在已有的vpb地形上疊加另外的影像數據。
<!—指定在用vpb生成地形數據庫時(--splits選項)使用的主分割層-->
<primary_split_level>5</primary_split_level>

<!—指定在用vpb生成地形數據庫時使用的次分割層-->
<secondary_split_level>11</secondary_split_level>

<!—指定vpb地形數據使用的profile-->
<profile>global-geodetic</profile>

<!—指定vpb地形數據庫使用的目錄結構,分為nested, task, 以及 flat三種類型. 默認是 flat類型 -->

<!—指定使用vpb中影像數據層layer,默認是第0層-->
<layer>0</layer>

//模型驅動器
// feature_geom驅動器,該驅動器就是將矢量數據創建成幾何對象進行渲染
<!—定義特征數據-->
<features></features>
<!—定義風格-->
<style></style>
<!—定義分類(為不同分類指定不同的風格)-->
<class></class>

<!—定義高度偏移,生成幾何體前將數據相對海平面偏移特定高度主要是為了解決z-fighting的問題-->
<height_offset>10000</height_offset>

<!—指定生成的最大三角形的大小(三角形邊的最大長度,單位是度,僅用於地心坐標地形上),通過控制三角形大小能夠很好的將非凸多邊形構成的三角形映射成橢球體,默認值是5.0-->

//feature_overlay驅動器,該驅動器采用osgSim::OverlayNode將矢量數據作為投影紋理覆蓋到地形上。這種覆蓋節點的方式對於平面投影坐標模式是很適合的,但對於球體地心坐標來說有一定限制,通過覆蓋節點的方式將矢量數據投影成紋理只能覆蓋不到一半地球大小,而且在背面會顯示穿透效果。
<features></features>
<!—定義風格-->
<style></style>
<!—定義分類(為不同分類指定不同的風格)-->
<class></class>

<!—指定紋理單元,默認是auto-->
<texture_unit>1</texture_unit>

<!—指定覆蓋紋理的大小,默認是1024-->
<texture_size>2048</texture_size>

<!—指定覆蓋節點的基准高度,默認是0-->
<base_height>100</base_height>

//feature_stencil驅動器,該驅動器采用模板緩沖技術將矢量數據覆蓋到地形上
<features></features>
<!—定義風格-->
<style></style>
<!—定義分類(為不同分類指定不同的風格)-->
<class></class>

<!—指定擠壓距離,即在模板體的各個方向對其進行擠壓,這是為了防止對於那些覆蓋范圍比較大的幾何體容易造成z-fighting問題而做的處理,如果存在單個特征數據幾何體覆蓋的區域范圍特別大,就要增加該值,默認值是300000-->
<extrusion_distance>400000</extrusion_distance>

<!—定義高程數據,高程數據的定義屬性以及子要素基本與影像數據相同,特別需要注意的是,在定義瓦片大小時,默認值是256,這個值對於影像數據是合適的,但對於高程數據來說太大,應該將其設為比較小的值,比如32,否則會降低系統性能-->
<elevation name="srtm" driver="wms">
   <url>http://localhost/cgi-bin/mapserv.exe?map=srtm30_plus.map</url>
<layers>srtm30plus</layers>
<format>tiff</format>
<tile_size>32</tile_size>
</elevation> 

<!—定義模型數據,屬性包括名稱、驅動器driver、最小可視范圍值min_range(層次節點LOD范圍)、最大可視范圍值max_range、是否以覆蓋方式覆蓋到地形上overlay,對於指定的可視范圍值,如果指定了gridding,該范圍將作用於被分割的一個個的網格而不是模型幾何體本身-->
<model name="roads" driver="feature_stencil">
<features name="roads" driver="ogr">
<url>../data/roads-utm.shp</url>
</features>

<!—指定網格划分,模型數據源允許我們將非地形數據圖層添加到地形地形圖上,某些驅動器可以將矢量數據或者特征數據轉換為幾何體或者覆蓋層,對於海量特征數據或者覆蓋區域范圍特別大的數據如果不對其進行優化處理,將嚴重影響系統性能,其中方式之一就是對其進行網格划分,對於不同的驅動器,網格划分實現的方式也不一樣,自帶的模型特征數據驅動器,比如feature_stencil和feature_geom驅動器就可以將幾何體數據划分為一個個的小網格-->
<!—指定一個單元格的最大值cell_size,包括寬和高;指定裁切技術,即如何決定某些數據屬於哪個單元格,共有兩種方式:crop切割方式以及centroid形心方式,crop切割方式是將幾何體根據格網進行切割,不同的部分分別屬於不同的網格即可,centroid形心方式是判斷幾何體的形心,形心落在哪個網格,就認為該幾何體屬於哪個網格-->
<gridding cell_size="1000" culling_technique="crop"/>
<style type="text/css">
roads { 
        stroke: #ffff00;
        stroke-width: 10;
     }
</style>

<!—指定幾何體類型-->
<geometry_type>line</geometry_type>
</model>

<!—指定overlay覆蓋數據層,該層就是model的一個別名,等同於將model的overlay屬性設為true-->


<!—指定地形數據的邊緣標准化,指定該屬性是為了讓不同高程的瓦片數據之間的高程能夠准確的融合,默認是啟用的-->
<normalize_edges>true</normalize_edges>

<!—指定代理服務器地址和端口,如果想讓osgEarth通過代理服務器訪問某數據服務器,可以設定相應的代理服務器地址以及端口-->
<proxy_host>80.80.12.123</proxy_host>
<proxy_port>80</proxy_port>

</map>

Earth文件的完整示例見earthFile-template.earth文件
15.        注意,earth文件名不能有”-”橫線


免責聲明!

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



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