使用oracle作為數(shù)據(jù)源發(fā)布圖層到geoserver

? ? 最近要做一個地圖相關(guān)的項目,用oracle作為數(shù)據(jù)源,以前都是postgresql,沒用過oracle呀。上網(wǎng)一查,geoserver好像支持oracle。網(wǎng)上也有一些怎么講shp轉(zhuǎn)換到oracle的教程。按著教程一步步來,最后還是出現(xiàn)了一些問題,研究了半天終于發(fā)布成功,于是想把這次發(fā)布過程記錄下來,順便也能幫助有需要的同學。(當然本地先裝好oracle哦)

第一步:下載geoserver和oracle插件

到官網(wǎng)下載最新版


在首頁點download進入此頁面


選擇格式

我選的是web archive,就是war包,war包直接放到tomcat的webapp里面,就可以直接發(fā)布了,非常方便。在這個頁面往下拉找到Extensions,擴展。


下載oracle插件


選oracle,可以看到還有對別的數(shù)據(jù)庫的擴展,非常強大。

第二步:安裝插件

把下載好的war包在tomcat中發(fā)布一次(要是不會發(fā)布的話,建議先去學學Orz),發(fā)布一次是為了讓tomcat解壓geoserver,手動解壓貌似也可以。把下載的geoserver-oracle-plugin.zip解壓,將里面的gt-jdbc-oracle-X.X.jar包復(fù)制到geoserver目錄下web-info/lib目錄中,然后再把與你數(shù)據(jù)庫匹配的ojdbc驅(qū)動包也復(fù)制到這個目錄里,我用的oracle10g,在oracle目錄product/10.x.x/db_1/jdbc/lib里可以找到ojdbc14.jar。如果不復(fù)制ojdbc驅(qū)動,在選擇數(shù)據(jù)源的時候會沒有oracle-database-ng這個選項。復(fù)制完成后啟動geoserver,在數(shù)據(jù)存儲頁面,添加新的數(shù)據(jù)存儲:


新建數(shù)據(jù)存儲

看到圖中的oracle ng就說明我們安裝成功了。

第三步:為oracle安裝空間組件,Oracle_Spatial


這一步,我找到一篇文章,按照其中介紹安裝了Oracle_Spatial,很簡單,沒有遇到什么坑,我就不重復(fù)介紹了。文章鏈接。

第四步:下載工具shp2sdo

這個工具我在csdn上下載的,下載鏈接。下載后里面有三個版本,分別是linux,nt,sparc_solaris。

我是windows系統(tǒng)所以用了nt文件夾里面的shp2sdo.exe

第五步:將shp文件轉(zhuǎn)換為oracle腳本


終于進入正題了,在這一步我們要把需要發(fā)布的shp文件轉(zhuǎn)換成.sql文件和.ctl

文件,我先把shp2sdp.exe和我要轉(zhuǎn)換的圖層都復(fù)制到了一個文件夾里,這樣寫命令的時候比較方便。


我要轉(zhuǎn)換的圖層

好了,現(xiàn)在打開一個cmd命令行工具,先進入到這個目錄


進入目錄

D:\oracle\oracle_gis\beisanshi就是我的目錄啦。


輸入命令 :

shp2sdo [shp文件名] [表名] -i? id -s [坐標系編碼] -g MY_GEOMETRY -d

-i 是設(shè)置主鍵,-g 是給空間數(shù)據(jù)字段起個名字,不寫默認是geom,-d 是把dat數(shù)據(jù)文件合并到ctl文件里。

-s 是數(shù)據(jù)庫編碼。

這里就要注意拉,我踩的第一個坑就是這個坐標系編碼,一開始看網(wǎng)上的一些資料說直接填4326,我就無腦填了,結(jié)果最后發(fā)布后怎么看不到圖層。所以這里要按照自己shp文件的坐標系編碼填寫。如果你不知道你的shp文件的坐標系編碼怎么辦呢?沒關(guān)系,我當時也不知道自己的shp文件坐標系編碼,于是乎,我先在geoserver中發(fā)布了這個shp文件,在發(fā)布頁面geoserver會幫我們識別出圖層的坐標系,如下圖


geoserver識別坐標系編碼

上面可以看到,本機srs是unknown說明geoserver的數(shù)據(jù)庫中沒有跟這個坐標系匹配的編碼,但是后面我們可以看到坐標系的名字是 Xian_1980_3_Degree_GK_Zone_41,搜索一下這個坐標系,發(fā)現(xiàn)它的編碼是2365,于是在上面的頁面點擊查找,搜索2365這個編碼:


搜索2365編碼

發(fā)現(xiàn)果然有這個坐標系,只是名字跟剛才那個有點區(qū)別,但都是xian 1980 3 degree,應(yīng)該差不多,于是我的轉(zhuǎn)換命令就寫成了這樣:

D:\oracle\oracle_gis\beisanshi\shp2sdo zh zhuang -s 2365 -d

執(zhí)行成后是這樣的:


這是我們的文件夾里生成了兩個文件:zhuang.sql,zhuang.ctl,分別是建表腳本和數(shù)據(jù)腳本。好,到這里我們的第五步就完成了,勝利就在眼前!

第六步:執(zhí)行腳本建表并導(dǎo)入數(shù)據(jù)

首先打開sqlplus,輸入命令 @.../xxx.sql,就是@+我們生成的sql文件的全路徑,我這里是

@D:\oracle\oracle_gis\beisanshi\zhuang.sql


執(zhí)行sql文件

這時對應(yīng)shp文件的表就建好了:


圖層表

然后在命令行中輸入SQLLDR 用戶名/密碼 CONTROL=...\XXX.ctl就可以把數(shù)據(jù)恢復(fù)到表中,

我輸入的命令是:SQLLDR 用戶名/密碼 CONTROL=D:\oracle\oracle_gis\beisanshi\zhuang.ctl

如果數(shù)據(jù)很多會執(zhí)行一會,完成后是這樣的:


數(shù)據(jù)恢復(fù)成功

這是去數(shù)據(jù)庫里看一下數(shù)據(jù):


數(shù)據(jù)

可以看到已經(jīng)都在數(shù)據(jù)庫里了。但是現(xiàn)在的數(shù)據(jù)還需要轉(zhuǎn)換到與當前數(shù)據(jù)庫版本匹配,在sqlplus中執(zhí)行命令:

EXECUTE SDO_MIGRATE.TO_CURRENT('表名');

我這里就是:EXECUTE SDO_MIGRATE.TO_CURRENT('zhuang');


等待一會,提示完成。

如果不執(zhí)行這個步驟:發(fā)布后點擊地圖geoserver會報錯:Rendering process failed/ by zero

接下來,我們需要為空間字段建立索引,由于轉(zhuǎn)換的時候我沒有填-g選項所以表的空間字段名是geom,

create index zhuang_index on zhuang(geom) indextype is mdsys.spatial_indes;

等待索引創(chuàng)建,我們數(shù)據(jù)庫操作就結(jié)束啦,現(xiàn)在就剩下最后一步,發(fā)布!

第七步:發(fā)布圖層

運行g(shù)eoserver,新建數(shù)據(jù)源oracle ng:


配置數(shù)據(jù)源

劃紅線的是自己要填的東西,其他沒有特殊要求保持默認就好了,填完拉到最下面點保存,之后會直接跳到發(fā)布圖層的頁面:


發(fā)布圖層頁面

會出現(xiàn)一大堆可以發(fā)布的圖層,我們直接在右上角搜索我們自己的表名 zhuang。


然后點發(fā)布按鈕,進入發(fā)布圖層配置頁面:


直接拉到下面設(shè)置坐標系這里,第一個是自動識別的2386,我們轉(zhuǎn)換的時候設(shè)置的坐標系,第二個我們也選2365。

選好之后,點擊從數(shù)據(jù)中計算,可以算出邊框,在點擊下面的compute from native bounds,計算出經(jīng)緯度邊框:


計算完之后,把頁面拉到最上面點 發(fā)布 選項卡:


發(fā)布


拉到wms settings的位置,設(shè)置一下style:


style

我的圖層塊狀的所以選擇polygon,多邊形。

好了,別的都不用管了,拉到最下面直接點保存。完成!

最后一步:查看!

點geoserver頁面左側(cè)的Layer Preview,點擊我們剛發(fā)布的圖層查看效果:



好了,到此為止大功告成,還有什么問題,歡迎大家交流~~

版權(quán)所有,文章允許轉(zhuǎn)載,但必須以鏈接方式注明源地址,否則追究法律責任!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容