簡析服務端經過geotools導入SHP至PG的方法

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/html

1.背景

項目中須要在瀏覽器端直接上傳SHP後服務端進行數據的自動入PG庫以及發佈至geoserver。本方法是以geotools爲開發工具實現入庫,以geoserver manager來實現服務的自動發佈。這裏着重描述geotools編寫SHP入庫的方法。java

2.Geotools介紹

2.1整體介紹

Geotools是Java語言編寫的開源GIS工具包,其功能涵蓋了地理信息數據讀寫、處理、座標轉換、查詢分析、格式化輸出等多個方面。該項目已有十多年曆史,生命力旺盛,代碼很是豐富,包含多個開源GIS項目,而且基於標準的GIS接口。Geotools主要提供各類GIS算法,各類數據格式的讀寫和顯示。在顯示方面要差一些,只是用Swing實現了地圖的簡單查看和操做。可是用戶能夠根據Geotools提供的算法本身實現地圖的可視化。OpenJump和udig就是基於Geotools的。
    Geotools用到的兩個較重要的開源GIS工具包是JTS和GeoAPI。前者主要是實現各類GIS拓撲算法,也是基於GeoAPI的。可是因爲兩個工具包的GeoAPI分別採用不一樣的Java代碼實現,因此在使用時須要相互轉化。Geotools又根據二者定義了部分本身的GeoAPI,因此代碼顯得臃腫,有時容易混淆。因爲GeoAPI進展緩慢,Geotools本身對其進行了擴充。另外,Geotools如今還只是基於2D圖形的,缺少對3D空間數據算法和顯示的支持。web

Geotools The Open Source Java GIS Toolkit的相關學習網站以下:算法

http://geotools.org/   Geotools官方網站
http://docs.geotools.org/latest/javadocs/          Geotools API在線文檔
http://docs.codehaus.org/display/GEOTDOC/Home Geotools用戶指南
http://repo.opengeo.org                              Geotools的maven倉庫
http://download.osgeo.org/webdav/geotools/        maven倉庫地址sql

2.2總體架構

 

org.geotools.data包負責地理數據的讀寫(如:ShapefileReader用於讀取shpfile數據)。數據庫

org.geotools.geometry包負責提供對JTS的調用接口,以將地理數據封裝成JTS中定義的幾何對象(Geometry)。瀏覽器

org.geotools.feature包負責封裝空間幾何要素對象(Feature),對應於地圖中一個實體,包含:空間數據(Geometry)、屬性數據(Aitribute)、參考座標系(Refereneedsystem)、最小外包矩形(EnveloPe)等屬性,是GlS操做的核心數據模型。微信

2.3geotools中的核心Jar說明

a.GT核心庫數據結構

 

其中紅色的包含了要素定義、SHP讀取、EPSG獲取等相關方法的jar。架構

b.hsqldb

 

須要配合gt-epsg-hsql來使用,能夠查詢對應的epsg編碼。

c. Image I/O-Ext

 

支持跟GIS有關的圖片格式。

d.jts

 

JTS提供了這些空間數據類Point、MultiPointLineString、LinearRing(封閉的線條)、MultiLineString (多條線)、PolygonMultiPolygon 、 GeometryCollection(包括點,線,面)。JTS包結構爲計算交點(noding包)、幾何圖形操做(operation包)、平面圖(planargraph包)、多邊形化(polygnize包)、精度(precision)、工具(util包)。

e.jsr、vecmath

 

作投影相關運算時須要這兩個jar: jsr-275-1.0-beta-2.jar和vecmath-1.3.1.jar。

f. opengis庫

 

h.其餘各種jar

包含數據庫驅動的jar,log4j,XML解析的jar等等。能夠實現讀取不一樣數據庫的數據,對xml格式的文件好比SLD的解析等等。

3.SHP各文件的簡介

shape文件由ESRI開發,一個ESRI(Environmental Systems Research Institute)的shape文件包括一個主文件,一個索引文件,和一個dBASE表,其中主文件的後綴就是.shp。

主文件是一個直接存取,變量記錄長度文件,其中每一個記錄描述一個有它本身的vertices列表的shape。

索引文件中,每一個記錄包含對應主文件記錄離主文件頭開始的偏移。

dBASE表包含記錄的feature的特徵。幾何和屬性間的一一對應關係是基於記錄數目的。在dBASE文件中的屬性記錄必須和主文件中的記錄是相同順序的。

 

4.ST_Geometry函數

ST_Geometry SQL 數據類型用於存儲在 DB二、Informix、Oracle 和 PostgreSQL 的地理數據庫中。此數據類型可在地理數據庫中使用,另外還可經過 SQL 訪問第三方應用程序的簡單要素類幾何。ST_Geometry 執行空間的 OGC 和 ISO SQL 多媒體規範。

Oracle中安裝了SDE後,能支持ST_Geometry函數。Oracle Spatial版本則有其自帶的SDO_Geometry相關函數。這裏,咱們在PostgreSQL上安裝了PostGIS,使其支持ST_Geometry函數。對於空間數據的描述,PG中支持標準的OpenGIS的兩種空間數據組織格式:Well-Known Text (WKT) 和 Well-Known Binary (WKB) 。

PostGIS在線文檔:http://postgis.net/docs/manual-1.4/

空間函數文檔:http://postgis.net/docs/manual-1.4/ch04.html

5.具體實現

5.1讀取全部格式SHP併入庫

 

5.2讀取SHP的DBF文件

 

 

 

                      -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                 

相關文章
相關標籤/搜索