使用Geoserver和Google Earth打造三維GIS展示系統


轉自:http://blog.csdn.net/iwillsw/article/details/4733300

給圖層添加高度數據,需要根據實體幾何類型分別處理。對於面,例如行政區界或建築物,需要創建一個高度模板文件。
對於線(點),例如架空電纜,高程將直接從圖形數據中讀取。
GeoServer 1.7.1及以上版本支持輸出三維面的KML(KMZ),1.7.6及以上版本支持輸出三維線(點)的KML(KMZ)。

發布三維面圖層:

用Geoserver發布三維面的過程非常簡單,測試中我們使用Geoserver自帶的示例圖層topp:states。

1、用記事本新建一個文本文件(高度模板文件),命名為height.ftl
2、在文件中加入一行腳本,格式為${ATTRIBUTE.value},ATTRIBUTE是屬性字段的名稱。
例如states圖層有屬性字段 PERSONS,記錄每個州的人口, 輸入 ${PERSONS.value?number/100},把高度和人口數建立關系。
3、將 height.ftl 復制到Geoserver的/data/featureTypes/states/目錄下
4、進入Geoserver地圖預覽頁面,找到topp:states,選擇KML,打開Google Earth瀏覽效果。

效果圖1



官方原文見:http://geoserver.org/display/GEOSDOC/04-Height+Templates

作為練習,可以根據官方文檔
http://demo.opengeo.org:8080/display/GEOSDOC/05-Super+Overlays+and+Extrudes+with+Building+Data,
發布紐約曼哈頓的建築物,瀏覽三維城市效果。

效果圖2



發布三維線圖層:

三維線不使用height.ftl文件,因為一條線有兩個以上的節點,每個節點可能有不同的高度值, 高程直接存放在圖形數據(Geometry)的Z坐標中。
Oracle Spatial、PostgreSQL(PostGIS)等數據庫都支持存儲三維坐標。

Geoserver可以直接發布三維線,測試中使用Oracle Spatial(10g)和PostgreSQL(8.3)作為數據源。
1、在Oracle Spatial(10g)或PostgreSQL(8.3)中存入包含Z坐標的三維線數據,作為測試,可用直接SQL語句插入數據。
2、在Geoserver中發布該圖層。
3、進入Geoserver地圖預覽頁面,找到剛才發布的圖層,選擇KML,打開Google Earth瀏覽效果。

需要注意的是,默認KML(KMZ)在Google Earth中的實際效果是三維面。
經過查閱KML文檔,要實現三維線,需要在KML鏈接后加上可選參數format_options=extrude:0,例如將
http://192.98.151.200:8080/geoserver/wms/kml?layers=topp:TESTL
改為
http://192.98.151.200:8080/geoserver/wms/kml?layers=topp:TESTL&format_options=extrude:0

效果圖3


Google KML Version 2.2已經獲得OGC批准,成為國際標准的數據存儲格式。ESRI、INTERGRAPH、MAPINFO在其最新版本軟件中提供KML格式輸出支持。
Google定義的KML不僅可以包含三維高程數據,還能加入四維時間數據。

本文只涉及三維數據的發布和展示,相關技術文檔請參考Google KML和Geoserver KML頁面。
Google KML頁面:http://code.google.com/apis/kml/documentation/
Geoserver KML頁面:http://geoserver.org/display/GEOSDOC/KML+KMZ+Output http://geoserver.org/display/GEOSDOC/Google+Earth+Features
本文涉及的軟件環境為:Geoserver 1.7.7、Geoserver 2.0、Google Earth 5.1、Oracle 10.2.0.3、PostgreSQL


免責聲明!

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



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