oracle生成mif图层,使用oracle作为数据源发布图层到geoserver

最近要做一个地图相关的项目,用oracle作为数据源,以前都是postgresql,没用过oracle呀。上网一查,geoserver好像支持oracle。网上也有一些怎么讲shp转换到oracle的教程。按着教程一步步来,最后还是出现了一些问题,研究了半天终于发布成功,于是想把这次发布过程记录下来,顺便也能帮助有需要的同学。(当然本地先装好oracle哦)

第一步:下载geoserver和oracle插件

到官网下载最新版

08afbdc63848

在首页点download进入此页面

08afbdc63848

选择格式

我选的是web archive,就是war包,war包直接放到tomcat的webapp里面,就可以直接发布了,非常方便。在这个页面往下拉找到Extensions,扩展。

08afbdc63848

下载oracle插件

选oracle,可以看到还有对别的数据库的扩展,非常强大。

第二步:安装插件

把下载好的war包在tomcat中发布一次(要是不会发布的话,建议先去学学Orz),发布一次是为了让tomcat解压geoserver,手动解压貌似也可以。把下载的geoserver-oracle-plugin.zip解压,将里面的gt-jdbc-oracle-X.X.jar包复制到geoserver目录下web-info/lib目录中,然后再把与你数据库匹配的ojdbc驱动包也复制到这个目录里,我用的oracle10g,在oracle目录product/10.x.x/db_1/jdbc/lib里可以找到ojdbc14.jar。如果不复制ojdbc驱动,在选择数据源的时候会没有oracle-database-ng这个选项。复制完成后启动geoserver,在数据存储页面,添加新的数据存储:

08afbdc63848

新建数据存储

看到图中的oracle ng就说明我们安装成功了。

第三步:为oracle安装空间组件,Oracle_Spatial

这一步,我找到一篇文章,按照其中介绍安装了Oracle_Spatial,很简单,没有遇到什么坑,我就不重复介绍了。文章链接。

第四步:下载工具shp2sdo

这个工具我在csdn上下载的,下载链接。下载后里面有三个版本,分别是linux,nt,sparc_solaris。

我是windows系统所以用了nt文件夹里面的shp2sdo.exe

第五步:将shp文件转换为oracle脚本

终于进入正题了,在这一步我们要把需要发布的shp文件转换成.sql文件和.ctl

文件,我先把shp2sdp.exe和我要转换的图层都复制到了一个文件夹里,这样写命令的时候比较方便。

08afbdc63848

我要转换的图层

好了,现在打开一个cmd命令行工具,先进入到这个目录

08afbdc63848

进入目录

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

输入命令 :

shp2sdo [shp文件名] [表名] -i  id -s [坐标系编码] -g MY_GEOMETRY -d

-i 是设置主键,-g 是给空间数据字段起个名字,不写默认是geom,-d 是把dat数据文件合并到ctl文件里。

-s 是数据库编码。

这里就要注意拉,我踩的第一个坑就是这个坐标系编码,一开始看网上的一些资料说直接填4326,我就无脑填了,结果最后发布后怎么看不到图层。所以这里要按照自己shp文件的坐标系编码填写。如果你不知道你的shp文件的坐标系编码怎么办呢?没关系,我当时也不知道自己的shp文件坐标系编码,于是乎,我先在geoserver中发布了这个shp文件,在发布页面geoserver会帮我们识别出图层的坐标系,如下图

08afbdc63848

geoserver识别坐标系编码

上面可以看到,本机srs是unknown说明geoserver的数据库中没有跟这个坐标系匹配的编码,但是后面我们可以看到坐标系的名字是 Xian_1980_3_Degree_GK_Zone_41,搜索一下这个坐标系,发现它的编码是2365,于是在上面的页面点击查找,搜索2365这个编码:

08afbdc63848

搜索2365编码

发现果然有这个坐标系,只是名字跟刚才那个有点区别,但都是xian 1980 3 degree,应该差不多,于是我的转换命令就写成了这样:

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

执行成后是这样的:

08afbdc63848

这是我们的文件夹里生成了两个文件:zhuang.sql,zhuang.ctl,分别是建表脚本和数据脚本。好,到这里我们的第五步就完成了,胜利就在眼前!

第六步:执行脚本建表并导入数据

首先打开sqlplus,输入命令 @.../xxx.sql,就是@+我们生成的sql文件的全路径,我这里是

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

08afbdc63848

执行sql文件

这时对应shp文件的表就建好了:

08afbdc63848

图层表

然后在命令行中输入SQLLDR 用户名/密码 CONTROL=...\XXX.ctl就可以把数据恢复到表中,

我输入的命令是:SQLLDR 用户名/密码 CONTROL=D:\oracle\oracle_gis\beisanshi\zhuang.ctl

如果数据很多会执行一会,完成后是这样的:

08afbdc63848

数据恢复成功

这是去数据库里看一下数据:

08afbdc63848

数据

可以看到已经都在数据库里了。但是现在的数据还需要转换到与当前数据库版本匹配,在sqlplus中执行命令:

EXECUTE SDO_MIGRATE.TO_CURRENT('表名');

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

08afbdc63848

等待一会,提示完成。

如果不执行这个步骤:发布后点击地图geoserver会报错:Rendering process failed/ by zero

接下来,我们需要为空间字段建立索引,由于转换的时候我没有填-g选项所以表的空间字段名是geom,

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

等待索引创建,我们数据库操作就结束啦,现在就剩下最后一步,发布!

第七步:发布图层

运行geoserver,新建数据源oracle ng:

08afbdc63848

配置数据源

划红线的是自己要填的东西,其他没有特殊要求保持默认就好了,填完拉到最下面点保存,之后会直接跳到发布图层的页面:

08afbdc63848

发布图层页面

会出现一大堆可以发布的图层,我们直接在右上角搜索我们自己的表名 zhuang。

08afbdc63848

然后点发布按钮,进入发布图层配置页面:

08afbdc63848

直接拉到下面设置坐标系这里,第一个是自动识别的2386,我们转换的时候设置的坐标系,第二个我们也选2365。

选好之后,点击从数据中计算,可以算出边框,在点击下面的compute from native bounds,计算出经纬度边框:

08afbdc63848

计算完之后,把页面拉到最上面点 发布 选项卡:

08afbdc63848

发布

拉到wms settings的位置,设置一下style:

08afbdc63848

style

我的图层块状的所以选择polygon,多边形。

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

最后一步:查看!

点geoserver页面左侧的Layer Preview,点击我们刚发布的图层查看效果:

08afbdc63848

08afbdc63848

好了,到此为止大功告成,还有什么问题,欢迎大家交流~~

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值