簡析將shp導入Oracle並利用geoserver將導入的數據發布


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

1.環境准備

1.1 軟件准備

首先要安裝有支持空間數據的Oracle,其次有安裝版或免安裝版的geoserver,兩者都部署好后,我們將開始討論進一步需要配置的環境。

這里我使用由Oracle提供的shp2sdo來進行shp導入,同時使用由geoserver提供的可以連接Oracle數據源的插件來進行數據的發布。

Shp2sdo的下載地址為:http://down.51cto.com/data/223757

Geoserver的Oracle插件下載地址為:http://sourceforge.net/projects/geoserver/files/GeoServer。選擇與你的geoserver版本對應的插件版本進行下載,比如我的是:geoserver-2.2-oracle-plugin.zip。

1.2運行環境准備

1.2.1 數據庫環境配置

將shp2sdo.exe拷貝至Oracle環境變量所指的目錄(bin)下。比如我的是在:

                       

1.2.2 geoserver環境配置

將geoserver-2.2-oracle-plugin.zip解壓后可得如下文件:

 

a.如果是安裝版,將gt-jdbc-oracle.jar放入:[GEOSERVER_HOME]/server/geoserver/WEB-INF/lib;如果是免安裝版,將gt-jdbc-oracle.jar放入:In a war install this is [container]/webapps/geoserver/WEB-INF/lib

b.如果是安裝版,將ojdbc.jar放入:[GEOSERVER_HOME]/lib;我本人的是放入:F:\tomcat4Geoserver\lib。如果此文件放入的路徑不對,oracle將無法連接上。

2.將shp導入Oracle

2.1 具體步驟

2.1.1命令行指向要導入的shp文件

2.1.2利用shp2sdo將shp轉換為導入文件

2.1.2.1 命令行

先給出輸入的命令行:shp2sdo commhjt commhjttest –i id –s 4326 –g GEOMETRY –d

2.1.2.2具體解析

-i id_colum指定id序列列,默認是id,即作為生成數據的唯一性標志;      

-s 指定生成srid(即采用什么坐標),默認是null(雖默認為null,導入后值是0,因此要注意將插入的元數據表的該條記錄的srid更新為null,否則0值在MDSYS.CS_SRS表中沒有記錄,在后面會出錯); 這里我的shp是WGS84坐標,所以直接寫成4326。     

 -g  geometry column指定sdo_geometry,默認是GEOM;      

 -d 代表含義是將分解后的 ctl文件(控制文件)和data文件(數據存儲文件)合並到一個文件,數據存儲和控制都在ctl一個文件中。如果沒有該選項,則會有單獨的data文件生成,即ctl文件(控制文件)和data文件(數據存儲文件);

以上命令行在shp文件夾中生成了如下文件:

 

打開commhjttest.sql可以看到其是一個創建shp表即相關空間元數據的sql:

 

打開commhjttest.ctl,可以發現數據的插入都在其中:

 

2.1.3創建對應shp表並注冊到USER_SDO_GEOM_METADATA(利用commhjttest.sql)

首先登陸到數據庫中 :sqlplus dlgis/dlgis@stdcg

然后輸入:

SQL>@G:\shptest\commhjttest.sql  --創建表並注冊到USER_SDO_GEOM_METADATA

SQL>quit --退出數據庫

 

2.1.4通過sqlldr將數據導入到創建的表中(利用commhjttest.ctl)

sqlldr dlgis/dlgis@stdcg commhjttest --導入數據 (sqlldr即sql loader工具)

 

2.1.5將數據升級到與Oracle對應的版本上

首先再次連接到數據庫上,然后輸入:

SQL> execute sdo_migrate.to_current('commhjttest');

 

2.1.6為提高查詢速度,添加空間索引

SQL>CREATE INDEX INDEX_OPER_DATA_SPATIAL ON commhjttest(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS('LAYER_GTYPE=POLYGON') NOPARALLEL;

 

如果出現以上現象,說明該索引名稱可能之前就已經有使用,換一個名稱即可,如索引名更換為:INDEX_OPER_DATA_SPATIAL_COMM

 

2.1.7    查看導入結果

 

2.2注意

當我們用shp2sdo生成shp的導入數據時,如果寫的語句是:

 

即將空間參考默認為null時,最后生成索引時會報錯,錯誤如下:

 

原因是此時的元數據表USER_SDO_GEOM_METADATA中的SRID是0而不是null。當我們將此SRID變為null后,再生成索引即可成功。

 

3.通過geoserver發布Oracle中的數據

3.1 建立基於Oracle數據源的Store

進入geoserver的web頁面,點擊stores,選擇ORACLE NG:

 

 點擊保存即可。

3.2 發布數據

 

選擇要發布的數據,點擊publish,做相關配置即可:

 

 

3.3瀏覽發布的圖層服務

 

4.探討

雖然用Oracle提供的shp2sdo工具可以將shp數據導入,但是目前就我的操作來說,還相對復雜,培訓工程人員有一定的難度。如果想廣泛的推廣的話,應該要寫一個相關的導入工具才行。

謝謝博友其心塞淵的提醒,讓我知道了還有shp2sdo這樣的工具可以使用,再次感謝。

 

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

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

                                      


免責聲明!

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



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