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


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

1.背景

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

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空間數據算法和顯示的支持。

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倉庫地址

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 數據類型用於存儲在 DB2、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/

                                                                如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                 

 


免責聲明!

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



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