如何將谷歌地球(googleearth)的資料匯入PostgreSQL

德哥發表於2018-01-27

標籤

PostgreSQL , google earth , kml , ogc


背景

KML(Keyhole Markup Language) 是一種檔案格式,用於在地球瀏覽器(例如 Google 地球、Google 地圖和 Google 地圖移動版)中顯示地理資料。KML 使用包含巢狀的元素和屬性的結構(基於標記),並符合 XML 標準。

由於KML已經加入OGC標準,所以作為OGC的成員之一的PostGIS也是會支援KML格式的,通過st_geomfromkml可以將KML中的geometry分段匯入到PG資料庫中。

geometry ST_GeomFromKML(text geomkml);      

例子

SELECT ST_GeomFromKML(`      
		<LineString>      
			<coordinates>-71.1663,42.2614      
				-71.1667,42.2616</coordinates>      
		</LineString>`);      

除此之外,還可以使用ogr2ogr 將kml(kmz,依賴libkml)檔案轉換為esri格式,再通過shp2pgsql匯入到PostgreSQL.

參考:

http://www.bigfastblog.com/landsliding-into-postgis-with-kml-files

[轉]使用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

pic

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

作為練習,可以根據官方文件

http://demo.opengeo.org:8080/display/GEOSDOC/05-Super+Overlays+and+Extrudes+with+Building+Data,

釋出紐約曼哈頓的建築物,瀏覽三維城市效果。

效果圖2

pic

釋出三維線圖層:

三維線不使用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

pic

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+Outputhttp://geoserver.org/display/GEOSDOC/Google+Earth+Features

本文涉及的軟體環境為:Geoserver 1.7.7、Geoserver 2.0、Google Earth 5.1、Oracle 10.2.0.3、PostgreSQL

參考

http://www.opengeospatial.org/standards/kml

https://developers.google.com/kml/documentation/kml_tut

http://postgis.net/docs/ST_GeomFromKML.html


相關文章