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. 干电池升压3.3V芯片

    PW5100适用于一节干电池升压到3.3V,两节干电池升压3.3V的升压电路,PW5100干电池升压IC. 干电池1.5V和两节干电池3V升压到3.3V的测试数据 两节干电池输出500MA测试: PW ...

  2. 乐观锁思想在JAVA中的实现——CAS

    更多技术干活尽在个人公众号--JAVA旭阳 前言 生活中我们看待一个事物总有不同的态度,比如半瓶水,悲观的人会觉得只有半瓶水了,而乐观的人则会认为还有半瓶水呢.很多技术思想往往源于生活,因此在多个线程 ...

  3. ChatGPT能做什么?ChatGPT保姆级注册教程

    最近 OpenAI 发布的 ChatGPT 聊天机器人很火,该聊天机器人可以在模仿人类说话风格的同时回答大量的问题. 在现实世界之中,例如数字营销.线上内容创作.回答客户服务查询,甚至可以用来帮助调试 ...

  4. 全网最全的linux上docker安装oracle的详细文档,遇到了n个问题,查了几十篇文章,最终汇总版,再有解决不了的,私聊我,我帮你解决

    目录 全网最全的linux上docker安装oracle的详细文档,遇到了n个问题,查了几十篇文章,最终汇总版,再有解决不了的,私聊我,我帮你解决 1. 拉取阿里镜像oracle 2. 创建初始化数据 ...

  5. 1.5.5 HDFS读写解析-hadoop-最全最完整的保姆级的java大数据学习资料

    目录 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 1.5.5.2 HDFS写数据流程 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 客户端通过Distribu ...

  6. 痞子衡嵌入式:低功耗&高性能边缘人工智能应用的新答案 - MCXN947

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦MCX系列MCU的新品MCXN947. 自 2015 年恩智浦和飞思卡尔合并成新恩智浦之后,关于它们各自的 Arm Cortex- ...

  7. 网络监测工具之Zabbix的搭建与测试方法(三) ---Zabbix Agent

    安装客户端 在官方网站下载最新版本zabbix agent v6.2.6,然后默认安装,其中配置服务端的界面如下图: 其他一律默认即可. 启用发现功能 如上图所示,开启发现规则,默认搜索zabbix ...

  8. python基础23 之初识面向对象

    人狗大战 # 编写代码简单实现人打狗 狗咬人的小游戏 """推导步骤1:代码定义出人和狗""" person1 = { 'name': 'j ...

  9. [Leetcode]移除链表元素

    题目 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li ...

  10. 让你的手,不再抽筋,速度:修改mac的快捷键,以及鼠标滑动

    我是资深️windows系统爱好者️ 最近开始尝试使用MAC系统进行代码运行测试,从配置环境,到写博客,一天按下了n次的复制粘贴快捷键, 妈耶,感觉要抽筋了 呜呜--- 这简直无法忍,我决定修改这个快 ...