文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處: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/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^