Shapefile导入Oracle
1. 概述
Shapefile是常用的空间数据文件格式,Oracle数据库是常用的关系型数据库
Oracle数据库包含空间数据库,可以在Oracle中进行空间数据的存储,更详细的信息可参考:
ESRI Shapefile格式的矢量数据导入到OracleSpatial空间数据库,主要有五种方法:
- 使用ArcGIS将shp数据导入Oracle(需要安装Oracle客户端或者服务端,本文未测试)
- 使用小工具shp2sdo将数据导入Oracle(需要安装Oracle客户端或者服务端)
- 使用GDAL中的ogr2ogr将shp矢量数据导入Oracle(需要安装驱动,本文未测试)
- 使用QGIS将数据导入Oracle
- SQL语句导入Oracle(需要编写代码,本文未编写)
2. 环境准备
笔者使用的Oracle使用docker安装,版本为21.3.0,docker地址为:
QGIS的版本为3.22.5
关于Shapefile文件,笔者使用的是GeoServer提供的美国各州的行政区划数据,下载地址:
数据的大致信息如下:

3. shp2sdo导入
这是一个Oracle官方提供的一个小工具,从这篇文章中:利用SHP2SDO将数据导入到Oracle数据中_地图匹配的博客-CSDN博客,找到了官方下载地址:
使用这个工具进行导入的步骤可以参考:
- 利用SHP2SDO将数据导入到Oracle数据中_地图匹配的博客-CSDN博客
- shp文件导入Oracle并发布到Geoserver - 蚂小蚁 - 博客园 (cnblogs.com)
- Oracle Spatial导入shp数据 - pengjw - 博客园 (cnblogs.com)
第一步解压工具,将适合的系统的工具版本复制到数据目录或者环境变量(或者其他位置也可):
笔者使用的是Windows系统,所以将shp2sdo_nt下的shp2sdo.exe复制到数据目录下
第二步转化数据,cmd下切换到数据目录,输入命令进行转化:
参考工具压缩包里的using_shp2sdo.txt,使用方法大致如下:
shp2sdo [-o] <shapefile> <tablename> -g <geometry column>
-i <id column> -n <start_id> -p -d
-x (xmin,xmax) -y (ymin,ymax) -s <srid>
其中shapefile和tablename必填,其他可选,笔者使用的命令如下:
shp2sdo.exe states states_shp2sdo -s 4326
- states是笔者文件名,不含后缀
将会生成三个文件,一个sql、一个ctl、一个dat文件
sql是建表文件,ctl和dat是数据文件
第三步是创建数据表,采用合适的方式运行sql中的代码即可(复制出来运行也可以)
笔者这里使用Oracle自带的SQL Plus运行sql文件:
sqlplus <user>/<password>@<orcl>
- 分别填用户名、密码和数据库名
在SQL Plus输入命令:
@<path>/states_shp2sdo.sql;
- 填写文件对应的路径
- 如果顺利的话将会显示创建成功,第一句的删除失败是因为初始没有这个表,不影响
完成后退出数据库:
quit;
第四步导入数据,使用Oracle自带的sqlldr导入ctl(和dat)数据
sqlldr <user>/<password>@<orcl> states_shp2sdo.ctl
- 分别填用户名、密码和数据库名
第五步升级数据进行适配,参考工具压缩包里的using_shp2sdo.txt,对于Polygon图层需要进行转换:
进入数据库:
sqlplus <user>/<password>@<orcl>
- 分别填用户名、密码和数据库名
转换数据:
EXECUTE SDO_MIGRATE.TO_CURRENT('states_shp2sdo','GEOM');
第六步创建空间索引,创建空间索引能加速空间查询,当然,这一步是可选的
在SQL Plus中执行:
CREATE INDEX index_states_shp2sdo ON states_shp2sdo(GEOM) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
至此已导入完成,可以使用图形化数据库管理软件进行查看,也可以直接查询数据:
SELECT * FROM STATES_SHP2SDO;
当然,也可以在QGIS中查看:

不得不说的是,这个方法已经逐渐废弃了,参考Oracle官方论坛:
4. ogr2ogr导入
ogr2ogr是GDAL下的一个子模块,可用于在文件格式之间转换简单要素数据,具体可参考:
ogr2ogr支持将ESRI Shapefile转换为数据库文件(如Oracle)
参考官方示例:
5. QGIS导入
首先将数据states.shp拖入QGIS中
然后连接Oracle数据库,并在菜单栏中点击Database下的DB Manager
选择Oracle,并点击Table下的Import Layer/File:

设置相关参数,即可完成

最后可以在QGIS(或者其他管理软件)中查看数据:

6. 关于ArcGIS导入
笔者使用的ArcGIS版本为10.4,Oracle版本为21.3.0,两者似乎是不适配的,难以进行测试,参考官网:
有关使用ArcGIS导入的可以参考:
7. 关于SQL语句导入
基本流程就是使用其他编程语言,解析Shapefile,编写相关的SQL语句,借助相关的Oracle connecter进行输入
8. 参考资料
[1]shp导入Oracle_zhzhx0318的博客-CSDN博客_shp数据导入oracle
[2]Oracle Spatial导入shp数据 - pengjw - 博客园 (cnblogs.com)
[3]shp文件导入Oracle并发布到Geoserver - 蚂小蚁 - 博客园 (cnblogs.com)
[4]利用SHP2SDO将数据导入到Oracle数据中_地图匹配的博客-CSDN博客
[5]shp导入Oracle_zhzhx0318的博客-CSDN博客_shp数据导入oracle
[6]从 ArcGIS 连接到 Oracle—ArcMap | 文档
[7]Oracle Spatial — GDAL documentation
Shapefile导入Oracle的更多相关文章
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- 简析将shp导入Oracle并利用geoserver将导入的数据发布
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.环境准备 1.1 软件准备 首先要安装有支持空间数据的Oracle ...
- 使用Python 将shapefile导入mongodb
使用Python 将shapefile导入mongodb 随着big data时代的到来,各个行业都在考虑能不能把big data的思路.方法引入进来,GIS行业也不能免俗. 下面就介绍一下如何将sh ...
- 将现有的sql脚本导入 Oracle 数据库,中文乱码问题
将现有的sql 脚本导入 Oracle数据库 比如 在windows 系统下,可以写一个 bat 来实现直接导入 如:bat 中的内容如下,logs.log 将会记录执行日志 sqlplus user ...
- SQL Server 2012大数据导入Oracle的解决方案
在实际工作中需要把SQL Server中的表导入Oracle.之前尝试过直接用SQL Server的DTS进行都没问题.但这次因为数据量在千万级所以报虚拟内存不足.最后通过SQL Server导出tx ...
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- excel中的数据导入oracle方法
SQL_loader批量上传数据 1. 注释 在工作中,很多时候会遇到如下情况:需要将excel中的数据批量上传到ORACLE表中.如果是小数据量,如几十条至几百条,那么用plsql dev工具 ...
- 用Excel导入Oracle数据库plsql
打开plsql之后,在工具栏点击[tools]--[ODBC Imoprter] 选择导入文件的类型,这里是excel文件,所以选择Excel Files 输入连接数据库的用户名和密码 点击Conne ...
- window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁
内存泄露分析插件http://download.eclipse.org/mat/1.3/update-site/birt插件http://download.eclipse.org//birt/upda ...
- pl/sql 如何将Excel文件数据导入oracle的数据表?
1.准备导入数据的excel文件 注意:excel列名和数据表列名必须相同,excel文件sheet2和sheet3可以删除 1)excel文件格式 2)数据表格式 2.打开pl/sql ,找到工具- ...
随机推荐
- 【论文解读】NIPS 2021-HSWA: Hierarchical Semantic-Visual Adaption for Zero-Shot Learning.(基于层次适应的零样本学习)
作者:陈使明 华中科技大学
- Crane如何做到利用率提升3倍稳定性还不受损?
作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率.然而要达到理论上的节点负载目标是很的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源.下图展示了某个生产系统的CPU资源现状,从 ...
- 三个小任务掌握List、Set、Map
任务一: ArrayList.Vector 和 LinkedList 都实现了 List 接口,对它们分别进行如下操作后比 较它们的不同,然后形成初步耗时报告(三种不同 List 的耗时): 追加元素 ...
- 我做了第一个ChatGPT .net api聊天库
最近这个ChatGPT很火啊,看了B站上很多视频,自己非常手痒,高低自己得整一个啊,但是让我很难受的是,翻遍了github前十页,竟然没有一个C#的ChatGPT项目,我好难受啊!那能怎么办?自己搞一 ...
- 微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证
前言 昨天在某平台发表了一篇这系列的文章,结果不但提示说有违禁词(java也算?),然后文章审核通过后,文章还找不到,不到去哪了,表示很郁闷,去反应未果,确实有点尴尬了. 元素的可操作性验证 关于AP ...
- 或许是市面上最强的 Mock 工具
背景 在开发过程中,由于后端与前端并行开发,或者前端需要等待后台开发,难以保证对接效率,同时即使用开发好的 API 对接,也有可能一个 API 不通就阻塞了整个软件的对接工作.同时对软件的敏感度也很高 ...
- JavaScript:操作符:赋值运算符和空赋值(??=)
=号是赋值运算,即返回符号右边的结果,同时将结果赋值给符号左边的变量,考虑下面代码的运行结果: 赋值运算b = 1 + 1,做了两件事,先返回符号右边的结果,即2,这个2将参与a = 1 + 2的计算 ...
- Python实验报告(第7章)
实验7:面向对象程序设计 一.实验目的和要求 1.了解面向对象的基本概念(对象.类.构造方法): 2.学会类的定义和使用: 3.掌握属性的创建和修改: 4.掌握继承的基本语法. 二.实验环境 软件版本 ...
- [OpenCV实战]2 人脸识别算法对比
在本教程中,我们将讨论各种人脸检测方法,并对各种方法进行比较.下面是主要的人脸检测方法: 1 OpenCV中的Haar Cascade人脸分类器: 2 OpenCV中的深度学习人脸分类器: 3 Dli ...
- [OpenCV实战]4 OpenCV中的颜色空间
目录 1 不同的色彩空间 1.1RGB颜色空间 1.2 Lab色彩空间 1.3 YCrCb颜色空间 1.4 HSV颜色空间 2 如何使用这些颜色空间进行分割 2.1 获取特定颜色的颜色值 2.2 应 ...