? ? 最近要做一個(gè)地圖相關(guān)的項(xiàng)目睬隶,用oracle作為數(shù)據(jù)源,以前都是postgresql页徐,沒用過oracle呀苏潜。上網(wǎng)一查,geoserver好像支持oracle变勇。網(wǎng)上也有一些怎么講shp轉(zhuǎn)換到oracle的教程窖贤。按著教程一步步來,最后還是出現(xiàn)了一些問題贰锁,研究了半天終于發(fā)布成功赃梧,于是想把這次發(fā)布過程記錄下來,順便也能幫助有需要的同學(xué)豌熄。(當(dāng)然本地先裝好oracle哦)
第一步:下載geoserver和oracle插件
到官網(wǎng)下載最新版
我選的是web archive授嘀,就是war包,war包直接放到tomcat的webapp里面锣险,就可以直接發(fā)布了蹄皱,非常方便。在這個(gè)頁面往下拉找到Extensions芯肤,擴(kuò)展巷折。
選oracle,可以看到還有對別的數(shù)據(jù)庫的擴(kuò)展崖咨,非常強(qiáng)大锻拘。
第二步:安裝插件
把下載好的war包在tomcat中發(fā)布一次(要是不會(huì)發(fā)布的話,建議先去學(xué)學(xué)Orz)击蹲,發(fā)布一次是為了讓tomcat解壓geoserver署拟,手動(dòng)解壓貌似也可以。把下載的geoserver-oracle-plugin.zip解壓歌豺,將里面的gt-jdbc-oracle-X.X.jar包復(fù)制到geoserver目錄下web-info/lib目錄中推穷,然后再把與你數(shù)據(jù)庫匹配的ojdbc驅(qū)動(dòng)包也復(fù)制到這個(gè)目錄里,我用的oracle10g类咧,在oracle目錄product/10.x.x/db_1/jdbc/lib里可以找到ojdbc14.jar馒铃。如果不復(fù)制ojdbc驅(qū)動(dòng),在選擇數(shù)據(jù)源的時(shí)候會(huì)沒有oracle-database-ng這個(gè)選項(xiàng)痕惋。復(fù)制完成后啟動(dòng)geoserver区宇,在數(shù)據(jù)存儲(chǔ)頁面,添加新的數(shù)據(jù)存儲(chǔ):
看到圖中的oracle ng就說明我們安裝成功了血巍。
第三步:為oracle安裝空間組件萧锉,Oracle_Spatial
這一步珊随,我找到一篇文章述寡,按照其中介紹安裝了Oracle_Spatial柿隙,很簡單,沒有遇到什么坑鲫凶,我就不重復(fù)介紹了禀崖。文章鏈接。
第四步:下載工具shp2sdo
這個(gè)工具我在csdn上下載的螟炫,下載鏈接波附。下載后里面有三個(gè)版本,分別是linux昼钻,nt掸屡,sparc_solaris。
我是windows系統(tǒng)所以用了nt文件夾里面的shp2sdo.exe
第五步:將shp文件轉(zhuǎn)換為oracle腳本
終于進(jìn)入正題了然评,在這一步我們要把需要發(fā)布的shp文件轉(zhuǎn)換成.sql文件和.ctl
文件仅财,我先把shp2sdp.exe和我要轉(zhuǎn)換的圖層都復(fù)制到了一個(gè)文件夾里,這樣寫命令的時(shí)候比較方便碗淌。
好了盏求,現(xiàn)在打開一個(gè)cmd命令行工具,先進(jìn)入到這個(gè)目錄
D:\oracle\oracle_gis\beisanshi就是我的目錄啦亿眠。
輸入命令 :
shp2sdo [shp文件名] [表名] -i? id -s [坐標(biāo)系編碼] -g MY_GEOMETRY -d
-i 是設(shè)置主鍵碎罚,-g 是給空間數(shù)據(jù)字段起個(gè)名字,不寫默認(rèn)是geom纳像,-d 是把dat數(shù)據(jù)文件合并到ctl文件里荆烈。
-s 是數(shù)據(jù)庫編碼。
這里就要注意拉竟趾,我踩的第一個(gè)坑就是這個(gè)坐標(biāo)系編碼耙考,一開始看網(wǎng)上的一些資料說直接填4326,我就無腦填了潭兽,結(jié)果最后發(fā)布后怎么看不到圖層倦始。所以這里要按照自己shp文件的坐標(biāo)系編碼填寫。如果你不知道你的shp文件的坐標(biāo)系編碼怎么辦呢山卦?沒關(guān)系鞋邑,我當(dāng)時(shí)也不知道自己的shp文件坐標(biāo)系編碼,于是乎账蓉,我先在geoserver中發(fā)布了這個(gè)shp文件枚碗,在發(fā)布頁面geoserver會(huì)幫我們識(shí)別出圖層的坐標(biāo)系,如下圖
上面可以看到铸本,本機(jī)srs是unknown說明geoserver的數(shù)據(jù)庫中沒有跟這個(gè)坐標(biāo)系匹配的編碼肮雨,但是后面我們可以看到坐標(biāo)系的名字是 Xian_1980_3_Degree_GK_Zone_41,搜索一下這個(gè)坐標(biāo)系,發(fā)現(xiàn)它的編碼是2365箱玷,于是在上面的頁面點(diǎn)擊查找怨规,搜索2365這個(gè)編碼:
發(fā)現(xiàn)果然有這個(gè)坐標(biāo)系陌宿,只是名字跟剛才那個(gè)有點(diǎn)區(qū)別,但都是xian 1980 3 degree波丰,應(yīng)該差不多壳坪,于是我的轉(zhuǎn)換命令就寫成了這樣:
D:\oracle\oracle_gis\beisanshi\shp2sdo zh zhuang -s 2365 -d
執(zhí)行成后是這樣的:
這是我們的文件夾里生成了兩個(gè)文件:zhuang.sql,zhuang.ctl,分別是建表腳本和數(shù)據(jù)腳本掰烟。好爽蝴,到這里我們的第五步就完成了,勝利就在眼前纫骑!
第六步:執(zhí)行腳本建表并導(dǎo)入數(shù)據(jù)
首先打開sqlplus蝎亚,輸入命令 @.../xxx.sql,就是@+我們生成的sql文件的全路徑先馆,我這里是
@D:\oracle\oracle_gis\beisanshi\zhuang.sql
這時(shí)對應(yīng)shp文件的表就建好了:
然后在命令行中輸入SQLLDR 用戶名/密碼 CONTROL=...\XXX.ctl就可以把數(shù)據(jù)恢復(fù)到表中颖对,
我輸入的命令是:SQLLDR 用戶名/密碼 CONTROL=D:\oracle\oracle_gis\beisanshi\zhuang.ctl
如果數(shù)據(jù)很多會(huì)執(zhí)行一會(huì),完成后是這樣的:
這是去數(shù)據(jù)庫里看一下數(shù)據(jù):
可以看到已經(jīng)都在數(shù)據(jù)庫里了磨隘。但是現(xiàn)在的數(shù)據(jù)還需要轉(zhuǎn)換到與當(dāng)前數(shù)據(jù)庫版本匹配缤底,在sqlplus中執(zhí)行命令:
EXECUTE SDO_MIGRATE.TO_CURRENT('表名');
我這里就是:EXECUTE SDO_MIGRATE.TO_CURRENT('zhuang');
等待一會(huì),提示完成番捂。
如果不執(zhí)行這個(gè)步驟:發(fā)布后點(diǎn)擊地圖geoserver會(huì)報(bào)錯(cuò):Rendering process failed/ by zero
接下來个唧,我們需要為空間字段建立索引,由于轉(zhuǎn)換的時(shí)候我沒有填-g選項(xiàng)所以表的空間字段名是geom设预,
create index zhuang_index on zhuang(geom) indextype is mdsys.spatial_indes;
等待索引創(chuàng)建徙歼,我們數(shù)據(jù)庫操作就結(jié)束啦,現(xiàn)在就剩下最后一步鳖枕,發(fā)布魄梯!
第七步:發(fā)布圖層
運(yùn)行g(shù)eoserver,新建數(shù)據(jù)源oracle ng:
劃紅線的是自己要填的東西宾符,其他沒有特殊要求保持默認(rèn)就好了酿秸,填完拉到最下面點(diǎn)保存,之后會(huì)直接跳到發(fā)布圖層的頁面:
會(huì)出現(xiàn)一大堆可以發(fā)布的圖層魏烫,我們直接在右上角搜索我們自己的表名 zhuang辣苏。
然后點(diǎn)發(fā)布按鈕,進(jìn)入發(fā)布圖層配置頁面:
直接拉到下面設(shè)置坐標(biāo)系這里哄褒,第一個(gè)是自動(dòng)識(shí)別的2386稀蟋,我們轉(zhuǎn)換的時(shí)候設(shè)置的坐標(biāo)系,第二個(gè)我們也選2365呐赡。
選好之后退客,點(diǎn)擊從數(shù)據(jù)中計(jì)算,可以算出邊框,在點(diǎn)擊下面的compute from native bounds萌狂,計(jì)算出經(jīng)緯度邊框:
計(jì)算完之后档玻,把頁面拉到最上面點(diǎn) 發(fā)布 選項(xiàng)卡:
拉到wms settings的位置,設(shè)置一下style:
我的圖層塊狀的所以選擇polygon粥脚,多邊形窃肠。
好了包个,別的都不用管了刷允,拉到最下面直接點(diǎn)保存。完成碧囊!
最后一步:查看树灶!
點(diǎn)geoserver頁面左側(cè)的Layer Preview,點(diǎn)擊我們剛發(fā)布的圖層查看效果:
好了糯而,到此為止大功告成天通,還有什么問題,歡迎大家交流~~
版權(quán)所有熄驼,文章允許轉(zhuǎn)載像寒,但必須以鏈接方式注明源地址,否則追究法律責(zé)任!