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)

[2]About PostGIS | PostGIS

[3]基于PostGIS使用GeoServer发布数据量大的GPS轨迹路线图 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com)

[4]PostGIS教程二:PostGIS安装和创建空间数据库 - 知乎 (zhihu.com)

[5]5. Loading spatial data — Introduction to PostGIS

基于shp2pgsql将shape文件导入到postgresql中的更多相关文章

  1. 【开发者笔记】利用shp2pgsql将shape文件导入到postgresql中

    导入shp文件到postgresql中 1.首先,你需要让shp2pgsql命令可用,百度下载,加入环境变量即可. 下载地址:https://download.osgeo.org/postgis/wi ...

  2. kettle使用文件导入到Postgresql出现如下几种问题的总结

    1.kettle使用文件导入到Postgresql出现如下几种问题的总结: kettle使用文件导入到Postgresql出现如下几种问题的总结: .第一种错误,报错如ERROR: extra dat ...

  3. 怎么把centos虚拟机zip文件导入vm虚拟机中

    执行以上三步就可以将一个压缩的centoszip文件导入到虚拟机中

  4. docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中

    需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...

  5. Sqoop 将hdfs上的文件导入到oracle中,关于date类型的问题

    近期的项目中,需要将hadoop运行完成的结果(存在于hdfs上)导入到oracle中,但是在用sqoop导入hdfs中的日期字段'2016-03-01'时,sqoop报错,说date类型必须为'yy ...

  6. 将CSV格式的文件导入到数据中

    --创建表 create table t1( id number primary key, name ), score number, subject ) ) --创建控制文件 t1.ctl,以文本的 ...

  7. 将本地sql文件导入到mysql中

    cmd命令操作:先创建一个同名数据库,然后通过source导入sql文件 1.启动mysql 2.mysql -uroot -p 输入密码运行mysql 3.创建一个同名数据库 create data ...

  8. 关于Excel文件导入到Sqlserver2008中出现截断错误的解决办法

    出现错误的可能原因: 1.数据库字段Varchar长度不够: 2.不能用Text类型: 3.数据中可能存在换行符: 4.数据项文本过长,超过4000: 5.前8行的最大长度不够大,后面有超过的. 解决 ...

  9. CSV文件导入到数据库中读取数据详解(接着上个帖子)

    一.controller层 二.SERVICE层 @Overridepublic Result importJinjiangAssessResult(MultipartFile file) throw ...

  10. SQL Server:把CSV文件导入到SQL Server表中

    有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...

随机推荐

  1. 三道MISC的writeup

    (1)背时 描述:腐烂了,变异了,太背时了...... 附件为一个压缩包 解题思路: 1.打开压缩包,发现有一个描述:v(51wA:I7uABi#Bx(T 2.将v(51wA:I7uABi#Bx(T进 ...

  2. json 提取器将提取的所有id拼接成字符串

    1.添加json提取器,提取所有的id 2.添加调试后置处理器查看buildid_ALL值以及类型 当需要将提取的id拼接成字符串时,此时使用json提取器并勾选Compute concatenati ...

  3. Kagol:2022年最值得推荐的前端开源文章

    大家好,我是 Kagol,Vue DevUI 作者,从2020年开始一直专注于前端开源组件库的建设,在前端开源组件库.开源社区运营方面积累了一些经验,2020年主要的创作也是围绕前端组件库和开源两个主 ...

  4. 【深入浅出Sentinel原理及实战】「基础实战专题」零基础实现服务流量控制实战开发指南(2)

    你若要喜爱你自己的价值,你就得给世界创造价值. Sentinel的组成部分 Sentinel 主要由以下两个部分组成. Sentinel核心库(Java客户端) :Sentinel的核心库不依赖任何框 ...

  5. Windows下Mariadb中文乱码问题

    win10 在命令行使用Mariadb出现无法插入中文 并且之前正确插入的中文也无法正常显示了 ERROR 1366 (22007): Incorrect string value: '\xB1\xB ...

  6. Redis-03 Redis事务

    需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的 事务相关命令 MULTI 命令 开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令 EX ...

  7. cornerstone4.1破解版&#160;for&#160;mac

    百度网盘: https://pan.baidu.com/s/1l_0rHMF11mZsUP3qJrp7Uw  密码: 8ei9

  8. 基于windows系统使用GNVM进行node切换版本

    GNVM是什么? GNVM 是一个简单的 Windows 下 Node.js 多版本管理器,类似的 nvm nvmw nodist . 安装 进入官网,下载你所需要的包,直达链接 下载完成 放到我们的 ...

  9. 深入Typescript--03-Typescript中的类(努力加餐饭)

    Typescript中的类 一.TS中定义类 class Pointer{ x!:number; // 实例上的属性必须先声明 y!:number; constructor(x:number,y?:n ...

  10. windows消息处理机制

    三层机制 1.顶端就是Windows内核.Windows内核维护着一个消息队列,第二级控制中心从这个消息队列中获取属于自己管辖的消息,后做出处理,有些消息直接处理掉,有些还要发送给下一级窗体(Wind ...