简析将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/
如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

简析将shp导入Oracle并利用geoserver将导入的数据发布的更多相关文章
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- ORACLE时间函数(SYSDATE)简析
ORACLE时间函数(SYSDATE)简析 分类: 原文地址:ORACLE时间函数(SYSDATE)简析 作者:skylway 加法 select sysdate,add_months(sysdate ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
- oracle数据库管理员简介、导入数据与导出数据
数据库管理员: sys和system的权限区别:sys:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行时至关重要的,由数据库 自己维护,任何用户都不能 ...
- AFNetworking封装思路简析
http://blog.csdn.net/qq_34101611/article/details/51698473 一.AFNetworking的发展 1. AFN 1.0版本 AFN 的基础部分是 ...
- 简析 __init__、__new__、__call__ 方法
简析 __init__.__new__.__call__ 方法 任何事物都有一个从创建,被使用,再到消亡的过程,在程序语言面向对象编程模型中,对象也有相似的命运:创建.初始化.使 用.垃圾回收,不同的 ...
- Linux 目录结构学习与简析 Part1
linux目录结构学习与简析 by:授客 QQ:1033553122 说明: / linux系统目录树的起点 =============== /bin User Bi ...
随机推荐
- 关于mySQL自连接的一些用法
自连接是连接的一种用法,但并不是连接的一种类型,因为他的本质是把一张表当成两张表来使用. 举例说明: 这是一张职员信息表,如果我要查询这张表中的每个职员的上司,那么必须使用自连接来查询.所以为了能实现 ...
- CSS外边距叠加问题
CSS外边距叠加就是margin-collapse,边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距,水平边 距永远不会重合.重叠结果计算规则:①.两个相邻的外边距都是正数时,折叠结果是它 ...
- System.Web.HttpContext.Current.Session为NULL解决方法
http://www.cnblogs.com/tianguook/archive/2010/09/27/1836988.html 自定义 HTTP 处理程序,从IHttpHandler继承,在写Sys ...
- Des与3Des加密解密
/// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...
- Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding
户端(PC浏览器或者手机浏览器)在接受到Tomcat的响应的时候,头信息通常都会带上Content-Length ,一般情况下客户端会在接受完Content-Length长度的数据之后才会开始解析.而 ...
- like语句百分号前置会使用到索引吗?
like语句百分号前置会使用到索引吗? 前几天看了这篇文章:谈SQL Server对like '%关键词%' 处理时的索引利用问题 看完了之后,我很想知道这篇文章是不是临时工写的?还是网站的主人写的, ...
- Remote Desktop Connection Manager
通过Remote Desktop Connection Manager(RDCMan),当前最新版本是 v2.7. 通过这款软件,我们便可以轻松的管理和访问数个RDP.左边的列表中我们可以创建总的分区 ...
- Android安全开发之ZIP文件目录遍历
1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在“../”的字符串,攻击者可以利用多个“../”在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接s ...
- Curator Framework的基本使用方法
Curator Framework提供了简化使用zookeeper更高级的API接口.它包涵很多优秀的特性,主要包括以下三点: 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题: ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...