ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Shapefile导入Oracle

2022-08-02 01:34:26  阅读:201  来源: 互联网

标签:shp Shapefile 数据库 shp2sdo 导入 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提供的美国各州的行政区划数据,下载地址:

数据的大致信息如下:

image-20220731170909943

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中查看:

image-20220801231951731

不得不说的是,这个方法已经逐渐废弃了,参考Oracle官方论坛:

4. ogr2ogr导入

ogr2ogr是GDAL下的一个子模块,可用于在文件格式之间转换简单要素数据,具体可参考:

ogr2ogr支持将ESRI Shapefile转换为数据库文件(如Oracle)

参考官方示例:

5. QGIS导入

首先将数据states.shp拖入QGIS中

然后连接Oracle数据库,并在菜单栏中点击Database下的DB Manager

选择Oracle,并点击Table下的Import Layer/File

image-20220801232440047

设置相关参数,即可完成

image-20220801232912308

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

image-20220801233128873

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

标签:shp,Shapefile,数据库,shp2sdo,导入,Oracle,数据
来源: https://www.cnblogs.com/jiujiubashiyi/p/16542381.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有