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. 基于EasyCode定制Mybatisplus全自动单表实现:新增/批量新增/修改/批量删除/分页查询/ID查询

    基于EasyCode定制Mybatisplus全自动单表实现CRUD接口 分页查询 ID查询 新增 批量新增 修改 批量删除 注意使用了MybatisPlus的自动填充功能,和insertBatchS ...

  2. re、base64的结合使用爬取豆瓣top250

    一.缘由 对于豆瓣的这个网站,记得使用了不少于三种的爬取和解析方式来进行的.今天的这种解析方式是我使用起来较为顺手,后来就更喜欢使用xpath解析,但是这两种也需要掌握. 二.代码展示 '''爬取豆瓣 ...

  3. Jmeter 模拟http发送zip文件

    发送zip文件的接口配置如下: 1.  在不知参数情况下使用fidder进行抓包操作,查看参数与MiME类型 2.  新建http取样器,并设置接口地址,进入文件上传设置参数与MIME类型 appli ...

  4. [图像处理] YUV图像处理入门2

    1 分离YUV420中YUV分量 本程序中的函数主要是将YUV420P视频数据流的第一帧图像中的Y.U.V三个分量分离开并保存成三个文件.函数的代码如下所示: /** * @file 1 yuv_sp ...

  5. [生命科学] 生物基础实验之DNA提取

    生物基础实验之DNA提取实验 基因组DNA的提取通常用于构建基因组文库.Southern杂交(包括RFLP)及PCR分离基因等.利用基因组DNA较长的特性,可以将其与细胞器或质粒等小分子DNA分离. ...

  6. shell端口监听异常邮箱告警

    业务场景:应用发布监听服务是否正常启动,因为服务器资源不够上不了prometheus.grafana,所以写的shell脚本监听.此脚本适用于初创公司及小微企业使用. 准备工作 除了shell脚本这里 ...

  7. P8474 「GLR-R3」立春

    简要题意 \(\tau(\sigma)\) 表示排列 \(\sigma\) 的逆序对个数,求: \[\sum_{i \in \operatorname{permutation(n)}}2^{\tau( ...

  8. Luogu P6394 樱花,还有你题解

    原题链接:樱花,还有你 $\scr{\color{DarkOrchid}{Solution}}$ Subtask1 这是一个送分的:总和都不到$n$,无论怎么收集,花瓣数肯定不到$n$,输出impos ...

  9. (20)go-micro微服务Elasticsearch使用

    目录 一 Elasticsearch介绍 二 Elasticsearch的主要功能及应用场景 1.Elasticsearch 主要具有如下功能: 2.Elasticsearch 的主要应用场景如下: ...

  10. ChatGPT开发实战

    1.概述 前段时间使用体验了ChatGPT的用法,感受到ChatGPT的强大,通过搜索关键字或者输入自己的意图,能够快速得到自己想要的信息和结果.今天笔者将深挖一下ChatGPT,给大家介绍如何使用C ...