简析服务端通过geotools导入SHP至PG的方法
文章版權(quán)由作者李曉暉和博客園共有,若轉(zhuǎn)載請于明顯處標(biāo)明出處:http://www.cnblogs.com/naaoveGIS/
1.背景
項(xiàng)目中需要在瀏覽器端直接上傳SHP后服務(wù)端進(jìn)行數(shù)據(jù)的自動入PG庫以及發(fā)布至geoserver。本方法是以geotools為開發(fā)工具實(shí)現(xiàn)入庫,以geoserver manager來實(shí)現(xiàn)服務(wù)的自動發(fā)布。這里著重描述geotools編寫SHP入庫的方法。
2.Geotools介紹
2.1總體介紹
Geotools是Java語言編寫的開源GIS工具包,其功能涵蓋了地理信息數(shù)據(jù)讀寫、處理、坐標(biāo)轉(zhuǎn)換、查詢分析、格式化輸出等多個方面。該項(xiàng)目已有十多年歷史,生命力旺盛,代碼非常豐富,包含多個開源GIS項(xiàng)目,并且基于標(biāo)準(zhǔn)的GIS接口。Geotools主要提供各種GIS算法,各種數(shù)據(jù)格式的讀寫和顯示。在顯示方面要差一些,只是用Swing實(shí)現(xiàn)了地圖的簡單查看和操作。但是用戶可以根據(jù)Geotools提供的算法自己實(shí)現(xiàn)地圖的可視化。OpenJump和udig就是基于Geotools的。
??? Geotools用到的兩個較重要的開源GIS工具包是JTS和GeoAPI。前者主要是實(shí)現(xiàn)各種GIS拓?fù)渌惴?#xff0c;也是基于GeoAPI的。但是由于兩個工具包的GeoAPI分別采用不同的Java代碼實(shí)現(xiàn),所以在使用時需要相互轉(zhuǎn)化。Geotools又根據(jù)兩者定義了部分自己的GeoAPI,所以代碼顯得臃腫,有時容易混淆。由于GeoAPI進(jìn)展緩慢,Geotools自己對其進(jìn)行了擴(kuò)充。另外,Geotools現(xiàn)在還只是基于2D圖形的,缺乏對3D空間數(shù)據(jù)算法和顯示的支持。
Geotools The Open Source Java GIS Toolkit的相關(guān)學(xué)習(xí)網(wǎng)站如下:
http://geotools.org/?? Geotools官方網(wǎng)站
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整體架構(gòu)
?
org.geotools.data包負(fù)責(zé)地理數(shù)據(jù)的讀寫(如:ShapefileReader用于讀取shpfile數(shù)據(jù))。
org.geotools.geometry包負(fù)責(zé)提供對JTS的調(diào)用接口,以將地理數(shù)據(jù)封裝成JTS中定義的幾何對象(Geometry)。
org.geotools.feature包負(fù)責(zé)封裝空間幾何要素對象(Feature),對應(yīng)于地圖中一個實(shí)體,包含:空間數(shù)據(jù)(Geometry)、屬性數(shù)據(jù)(Aitribute)、參考坐標(biāo)系(Refereneedsystem)、最小外包矩形(EnveloPe)等屬性,是GlS操作的核心數(shù)據(jù)模型。
2.3geotools中的核心Jar說明
a.GT核心庫
?
其中紅色的包含了要素定義、SHP讀取、EPSG獲取等相關(guān)方法的jar。
b.hsqldb
?
需要配合gt-epsg-hsql來使用,可以查詢對應(yīng)的epsg編碼。
c. Image I/O-Ext
?
支持跟GIS有關(guān)的圖片格式。
d.jts
?
JTS提供了這些空間數(shù)據(jù)類Point、MultiPointLineString、LinearRing(封閉的線條)、MultiLineString (多條線)、PolygonMultiPolygon 、?GeometryCollection(包括點(diǎn),線,面)。JTS包結(jié)構(gòu)為計(jì)算交點(diǎn)(noding包)、幾何圖形操作(operation包)、平面圖(planargraph包)、多邊形化(polygnize包)、精度(precision)、工具(util包)。
e.jsr、vecmath
?
做投影相關(guān)運(yùn)算時需要這兩個jar: jsr-275-1.0-beta-2.jar和vecmath-1.3.1.jar。
f. opengis庫
?
h.其他各類jar
包含數(shù)據(jù)庫驅(qū)動的jar,log4j,XML解析的jar等等。可以實(shí)現(xiàn)讀取不同數(shù)據(jù)庫的數(shù)據(jù),對xml格式的文件比如SLD的解析等等。
3.SHP各文件的簡介
shape文件由ESRI開發(fā),一個ESRI(Environmental Systems Research Institute)的shape文件包括一個主文件,一個索引文件,和一個dBASE表,其中主文件的后綴就是.shp。
主文件是一個直接存取,變量記錄長度文件,其中每個記錄描述一個有它自己的vertices列表的shape。
索引文件中,每個記錄包含對應(yīng)主文件記錄離主文件頭開始的偏移。
dBASE表包含記錄的feature的特征。幾何和屬性間的一一對應(yīng)關(guān)系是基于記錄數(shù)目的。在dBASE文件中的屬性記錄必須和主文件中的記錄是相同順序的。
?
4.ST_Geometry函數(shù)
ST_Geometry SQL 數(shù)據(jù)類型用于存儲在 DB2、Informix、Oracle 和 PostgreSQL 的地理數(shù)據(jù)庫中。此數(shù)據(jù)類型可在地理數(shù)據(jù)庫中使用,另外還可通過 SQL 訪問第三方應(yīng)用程序的簡單要素類幾何。ST_Geometry 執(zhí)行空間的 OGC 和 ISO SQL 多媒體規(guī)范。
Oracle中安裝了SDE后,能支持ST_Geometry函數(shù)。Oracle Spatial版本則有其自帶的SDO_Geometry相關(guān)函數(shù)。這里,我們在PostgreSQL上安裝了PostGIS,使其支持ST_Geometry函數(shù)。對于空間數(shù)據(jù)的描述,PG中支持標(biāo)準(zhǔn)的OpenGIS的兩種空間數(shù)據(jù)組織格式:Well-Known Text (WKT) 和 Well-Known Binary (WKB) 。
PostGIS在線文檔:http://postgis.net/docs/manual-1.4/
空間函數(shù)文檔:http://postgis.net/docs/manual-1.4/ch04.html
5.具體實(shí)現(xiàn)
5.1讀取所有格式SHP并入庫
?
5.2讀取SHP的DBF文件
?
?
?
??? -----歡迎轉(zhuǎn)載,但保留版權(quán),請于明顯處標(biāo)明出處:http://www.cnblogs.com/naaoveGIS/
??????????????????????????????????????????????????????????????? 如果您覺得本文確實(shí)幫助了您,可以微信掃一掃,進(jìn)行小額的打賞和鼓勵,謝謝 ^_^
?
轉(zhuǎn)載于:https://www.cnblogs.com/naaoveGIS/p/6098515.html
總結(jié)
以上是生活随笔為你收集整理的简析服务端通过geotools导入SHP至PG的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小练习
- 下一篇: maven项目project facet