基于shp2pgsql将shape文件导入到postgresql中
1. 概述
Shapefile是常用的空间数据文件格式,PostgreSQL数据库是常用的关系型数据库
PostGIS是一个PostgreSQL的空间数据库扩展 ,提供空间信息服务功能,更详细的信息可参考:
本文所写的PostgreSQL指包含PostGIS的空间数据库
ESRI Shapefile格式的矢量数据导入到PostgreSQL空间数据库,主要有五种方法:
- 使用ArcGIS将shp数据导入PostgreSQL
- 使用工具shp2pgsql将数据导入PostgreSQL
- 使用GDAL中的ogr2ogr将shp矢量数据导入PostgreSQL
- 使用QGIS将数据导入PostgreSQL
- SQL语句导入PostgreSQL
本文主要写的是使用工具shp2pgsql将数据导入PostgreSQL
使用ArcGIS导入可以参考:
使用ogr2ogr导入可以参考:
使用QGIS导入可以参考:
使用SQL语句导入可以参考:
2. 环境准备
笔者使用的PostgreSQL(包含PostGIS)使用docker安装,PostgreSQL版本号为14,PostGIS版本号为3.2.2,docker地址为:
shp2pgsql的来自于PostGIS工具包,版本号为3.2.2(即,PostGIS 3.2.2 bundle),下载地址为:
有关工具包详细的说明可以参考:
数据来源为PostGIS官方教程,包含一些纽约城市数据,格式为Shapefile,下载地址为:
有关数据的详细说明可以参考:
数据大致情况如下:
注意:
- 这份文件的EPSG为26918
3. GUI导入
PostGIS工具包里含有shp2pgsql的GUI版本,如下图所示:
运行shp2pgsql-gui,进行数据导入
创建一个数据库,笔者这里使用pgAdmin进行连接和创建数据库nyc
- 创建时勾选postgis模板
创建后可以看到已经安装了空间扩展:
设置数据库参数:
确保数据库连接成功,然后添加shp文件:
针对笔者这份文件,需要将SRID改为26918
注释:OGC标准中的参数SRID,也是指的空间参考系统的ID,与EPSG一致
完成后点击Import
开始导入,直至导入完成,可以使用QGIS进行连接查看(也可以使用数据库客户端):
4. 命令行导入
shp2pgsql工具的使用可以参考官方指导手册:
一个简单的导入示例:
$ shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql
$ psql -d roadsdb -f roads.sql
可以参考:
笔者使用的psql是QGIS中带有的,位于QGIS安装目录的bin目录里
在psql中运行生成的sql主要有两者方式
- 使用psql登录,然后运行sql文件( 在psql里执行命令
\i <文件名>
来执行存储在外部文件中的 sql 语句) - 使用psql命令行参数来直接运行sql文件
有关psql命令参数的详细信息可以参考:
第一种方式,使用psql登录运行sql文件:
psql -d nyc -U postgres
输入密码以登录,然后执行sql文件:
\i E:/tmp/nyc_neighborhoods_cmd.sql
第二种方式,使用psql命令行参数来直接运行sql文件
需要先设置登录账户和密码的环境变量,笔者这里是cmd环境下(如果是shell下改为export
):
set PGUSER=postgres
set PGPASSWORD=postgres
然后使用命令行参数执行文件:
psql -d nyc -f E:/tmp/nyc_neighborhoods_cmd.sql
可以在QGIS中查看导入的结果:
5. 参考资料
[1]【开发者笔记】利用shp2pgsql将shape文件导入到postgresql中 - stagebo - 博客园 (cnblogs.com)
[3]基于PostGIS使用GeoServer发布数据量大的GPS轨迹路线图 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com)
[4]PostGIS教程二:PostGIS安装和创建空间数据库 - 知乎 (zhihu.com)
[5]5. Loading spatial data — Introduction to PostGIS
基于shp2pgsql将shape文件导入到postgresql中的更多相关文章
- 【开发者笔记】利用shp2pgsql将shape文件导入到postgresql中
导入shp文件到postgresql中 1.首先,你需要让shp2pgsql命令可用,百度下载,加入环境变量即可. 下载地址:https://download.osgeo.org/postgis/wi ...
- kettle使用文件导入到Postgresql出现如下几种问题的总结
1.kettle使用文件导入到Postgresql出现如下几种问题的总结: kettle使用文件导入到Postgresql出现如下几种问题的总结: .第一种错误,报错如ERROR: extra dat ...
- 怎么把centos虚拟机zip文件导入vm虚拟机中
执行以上三步就可以将一个压缩的centoszip文件导入到虚拟机中
- docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中
需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...
- Sqoop 将hdfs上的文件导入到oracle中,关于date类型的问题
近期的项目中,需要将hadoop运行完成的结果(存在于hdfs上)导入到oracle中,但是在用sqoop导入hdfs中的日期字段'2016-03-01'时,sqoop报错,说date类型必须为'yy ...
- 将CSV格式的文件导入到数据中
--创建表 create table t1( id number primary key, name ), score number, subject ) ) --创建控制文件 t1.ctl,以文本的 ...
- 将本地sql文件导入到mysql中
cmd命令操作:先创建一个同名数据库,然后通过source导入sql文件 1.启动mysql 2.mysql -uroot -p 输入密码运行mysql 3.创建一个同名数据库 create data ...
- 关于Excel文件导入到Sqlserver2008中出现截断错误的解决办法
出现错误的可能原因: 1.数据库字段Varchar长度不够: 2.不能用Text类型: 3.数据中可能存在换行符: 4.数据项文本过长,超过4000: 5.前8行的最大长度不够大,后面有超过的. 解决 ...
- CSV文件导入到数据库中读取数据详解(接着上个帖子)
一.controller层 二.SERVICE层 @Overridepublic Result importJinjiangAssessResult(MultipartFile file) throw ...
- SQL Server:把CSV文件导入到SQL Server表中
有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...
随机推荐
- 三道MISC的writeup
(1)背时 描述:腐烂了,变异了,太背时了...... 附件为一个压缩包 解题思路: 1.打开压缩包,发现有一个描述:v(51wA:I7uABi#Bx(T 2.将v(51wA:I7uABi#Bx(T进 ...
- json 提取器将提取的所有id拼接成字符串
1.添加json提取器,提取所有的id 2.添加调试后置处理器查看buildid_ALL值以及类型 当需要将提取的id拼接成字符串时,此时使用json提取器并勾选Compute concatenati ...
- Kagol:2022年最值得推荐的前端开源文章
大家好,我是 Kagol,Vue DevUI 作者,从2020年开始一直专注于前端开源组件库的建设,在前端开源组件库.开源社区运营方面积累了一些经验,2020年主要的创作也是围绕前端组件库和开源两个主 ...
- 【深入浅出Sentinel原理及实战】「基础实战专题」零基础实现服务流量控制实战开发指南(2)
你若要喜爱你自己的价值,你就得给世界创造价值. Sentinel的组成部分 Sentinel 主要由以下两个部分组成. Sentinel核心库(Java客户端) :Sentinel的核心库不依赖任何框 ...
- Windows下Mariadb中文乱码问题
win10 在命令行使用Mariadb出现无法插入中文 并且之前正确插入的中文也无法正常显示了 ERROR 1366 (22007): Incorrect string value: '\xB1\xB ...
- Redis-03 Redis事务
需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的 事务相关命令 MULTI 命令 开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令 EX ...
- cornerstone4.1破解版 for mac
百度网盘: https://pan.baidu.com/s/1l_0rHMF11mZsUP3qJrp7Uw 密码: 8ei9
- 基于windows系统使用GNVM进行node切换版本
GNVM是什么? GNVM 是一个简单的 Windows 下 Node.js 多版本管理器,类似的 nvm nvmw nodist . 安装 进入官网,下载你所需要的包,直达链接 下载完成 放到我们的 ...
- 深入Typescript--03-Typescript中的类(努力加餐饭)
Typescript中的类 一.TS中定义类 class Pointer{ x!:number; // 实例上的属性必须先声明 y!:number; constructor(x:number,y?:n ...
- windows消息处理机制
三层机制 1.顶端就是Windows内核.Windows内核维护着一个消息队列,第二级控制中心从这个消息队列中获取属于自己管辖的消息,后做出处理,有些消息直接处理掉,有些还要发送给下一级窗体(Wind ...