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博客,找到了官方下载地址:

使用这个工具进行导入的步骤可以参考:

第一步解压工具,将适合的系统的工具版本复制到数据目录或者环境变量(或者其他位置也可):

笔者使用的是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>

其中shapefiletablename必填,其他可选,笔者使用的命令如下:

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的更多相关文章

  1. kettle将Excel数据导入oracle

    导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...

  2. 简析将shp导入Oracle并利用geoserver将导入的数据发布

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.环境准备 1.1 软件准备 首先要安装有支持空间数据的Oracle ...

  3. 使用Python 将shapefile导入mongodb

    使用Python 将shapefile导入mongodb 随着big data时代的到来,各个行业都在考虑能不能把big data的思路.方法引入进来,GIS行业也不能免俗. 下面就介绍一下如何将sh ...

  4. 将现有的sql脚本导入 Oracle 数据库,中文乱码问题

    将现有的sql 脚本导入 Oracle数据库 比如 在windows 系统下,可以写一个 bat 来实现直接导入 如:bat 中的内容如下,logs.log 将会记录执行日志 sqlplus user ...

  5. SQL Server 2012大数据导入Oracle的解决方案

    在实际工作中需要把SQL Server中的表导入Oracle.之前尝试过直接用SQL Server的DTS进行都没问题.但这次因为数据量在千万级所以报虚拟内存不足.最后通过SQL Server导出tx ...

  6. 利用TOAD实现把EXCEL数据导入oracle数据库

    利用TOAD实现把EXCEL数据导入oracle数据库 工具:   Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...

  7. excel中的数据导入oracle方法

    SQL_loader批量上传数据 1.    注释 在工作中,很多时候会遇到如下情况:需要将excel中的数据批量上传到ORACLE表中.如果是小数据量,如几十条至几百条,那么用plsql dev工具 ...

  8. 用Excel导入Oracle数据库plsql

    打开plsql之后,在工具栏点击[tools]--[ODBC Imoprter] 选择导入文件的类型,这里是excel文件,所以选择Excel Files 输入连接数据库的用户名和密码 点击Conne ...

  9. 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 ...

  10. pl/sql 如何将Excel文件数据导入oracle的数据表?

    1.准备导入数据的excel文件 注意:excel列名和数据表列名必须相同,excel文件sheet2和sheet3可以删除 1)excel文件格式 2)数据表格式 2.打开pl/sql ,找到工具- ...

随机推荐

  1. Kafka Connect学习

    一.基础介绍 1.概念 2.Debezium 为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台.可以消费数据库每一个行级别(row-level)的更改. ...

  2. 【Spark】Day05-内核解析:组件、流程、部署、运行模式、通讯架构、任务调度(Stage、task级)、两种Shuffle机制、内存管理、核心组件

    一.内核概述 内核:核心组件的运行机制.任务调度.内存管理.运行原理 1.核心组件 (1)Driver驱动器节点:执行main方法,将程序转化为作业job,在executor中调度任务task,跟踪并 ...

  3. java中的复合赋值运算符

    本文主要阐明复合赋值运算符 即 i = i+ 1.2 ==> i += 1.2: int i = 1; i += 1.2; System.out.println(i); // i == 2 注意 ...

  4. js的基本数据类型和引用数据类型及深拷贝浅拷贝

    1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.js数据类型分两种 (1)基本数据类型(值类型):Nu ...

  5. JavaScript:是一种什么样的编程语言?

    有关JavaScript的发展历程,百度百科上已经说得很清楚了,这里不赘述,只是想谈一下我刚刚接触JS的一些感触. 作为后端java开发者,初次学习JS的时候,真的觉得JS非常的不严谨,很混乱.由于它 ...

  6. Python函数用法和底层分析

    目录 Python函数用法和底层分析 函数的基本概念 Python 函数的分类 核心要点 形参和实参 文档字符串(函数的注释) 返回值 函数也是对象,内存底层分析 变量的作用域(全局变量和局部变量) ...

  7. Python3套接字(socket)通讯(TCP)

    最近写了一个工程,用作运维的,所以研究了一下Python的TCP通讯(服务器挂一个脚本,电脑挂一个脚本,就可以通过此通讯进行编码加密后传输取回想要的内容) 服务端: from socket impor ...

  8. flutter系列之:flutter中listview的高级用法

    目录 简介 ListView的常规用法 创建不同类型的items 总结 简介 一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通 ...

  9. [python] ​python-pinyin库

    python-pinyin库是一个汉字拼音转换工具,其主要功能有: 根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音风格. 安装命令为:pip instal ...

  10. Spark详解(07-1) - SparkStreaming案例实操

    Spark详解(07-1) - SparkStreaming案例实操 环境准备 pom文件 <dependencies>     <dependency>         &l ...