shp数据导入到oracle并在geoserver中发布(使用shp2sdo工具)

本文章参考https://www.cnblogs.com/naaoveGIS/p/4199006.html

一、准备工作:

软件准备:

1、oracle(安装的时候选择支持OracleSpatial);

2、geoserver;

3、shp2sdo;

4、geoserver的Oracle插件(与geoserver版本一致)。

环境准备:

1、将shp2sdo压缩包解压,把shp2sdo_nt文件夹下的shp2sdo.exe拷贝至Oracle环境变量所指的目录下,方便后续直接调用shp2sdo命令;

 2、将geoserver-xx-oracle-plugin.zip包解压后,gt2-oracle jar 放到 [GEOSERVER_HOME]/server/geoserver/WEB-INF/lib/目录下, ojdbc14.jar放到[GEOSERVER_HOME]/lib目录下;

二、shp导入oracle步骤:

1、使用shp2sdo将shp转换为导入文件

①进入到要导入的shp文件目录下,执行 shp2sdo shp名 生成的表名 –i id –s 指定生成的epsgCode –g GEOMETRY –d,如图;

②查看在shp文件夹下生成*.ctl和*.sql两个文件,其中*.sql是一个与shp相关空间元数据的文件,而*.ct为插入的数据;

参数含义:

-i id_colum指定id序列列,默认是id,即作为生成数据的唯一性标志;      

-s 指定生成srid(即采用什么坐标),默认是null(虽默认为null,导入后值是0,因此要注意将插入的元数据表的该条记录的srid更新为null,否则0值在MDSYS.CS_SRS表中没有记录,在后面会出错);     

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

 -d 代表含义是将分解后的 ctl文件(控制文件)和data文件(数据存储文件)合并到一个文件,数据存储和控制都在ctl一个文件中。如果没有该选项,则会有单独的data文件生成,即ctl文件(控制文件)和data文件(数据存储文件);

2、创建对应shp表并注册到USER_SDO_GEOM_METADATA(利用*.sql文件)

①登录数据库,sqlplus 用户名/密码@实例名

②输入“@*.sql文件的路径创建表并注册到USER_SDO_GEOM_METADATA,如图:

3、通过sqlldr将数据导入到创建的表中(利用*ctl)

①退出数据库:exit

②进入到shp文件所在的目录,执行“sqlldr 用户名/密码@实例名 表名”命令导入数据

 

 4、将数据升级到与oracle对应的版本上

登录数据库

②输入execute sdo_migrate.to_current('表名');

 5、给表添加空间索引,没有空间索引在geoserver中无法显示:

CREATE INDEX INDEX_landusetest_SPATIAL ON landusetest(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS('LAYER_GTYPE=POLYGON') NOPARALLEL

出现上图现象,登录plsql,连接对应的数据库,查询该表的信息:select * from 表名,发现srid并未全部变为4326

 解决:将srid为1的行全部删除掉,我是在ArcMap中只选取了少许表中srid显示为4326的要素,然后重新执行上面的步骤,导入成功

附:可查询表的空间索引,DOMIDX_OPSTATUS为FAILED,则说明创建空间索引失败。

三、geoserver发布oracleSpatial数据

1、登录geoserver,新建Oracle数据源的存储:

 

2、输入oracle数据库的链接信息:

 3、从oracle数据源中选择导入的表,新建图层并发布:

 4、要选择计算数据集的bounds:

 5、浏览地图:

猜你喜欢

转载自www.cnblogs.com/wennyjane/p/12333586.html
今日推荐