当前位置: 首页 > news >正文

将 Shp 导入 PostGIS 空间数据的五种方式(全)

前言

在地理信息系统(GIS)开发与空间数据处理中,将 Shapefile(Shp) 导入 PostGIS 空间数据库是常见且基础操作。无论是数据分析、地图可视化,还是空间计算,高效的数据迁移能力直接影响工作的流畅性。

本文将介绍五种方法实现 Shp 数据导入到 PostGIS 空间数据库,这几种方式各有其特点和优势,读者可根据需求自行尝试。

创建空间拓展

无论使用五种方式中任何一种,在进行数据导入之前,都需要先创建空间拓展

安装完成PostgreSQL数据库和PostGIS插件之后,新建一个数据库进行测试,例子中我创建的数据库名称为geodata。之后需要启用空间拓展,也就是在数据库查询中运行以下语句。只有成功创建空间拓展,才能存储和管理空间数据。对于一些应用来说,启用postgispostgis_topology就已经足够了。
:::block-1
– pg 空间拓展

CREATE EXTENSION postgis;

– pg 拓扑工具

CREATE EXTENSION postgis_topology;

– pg 路由

CREATE EXTENSION pgrouting;

CREATE EXTENSION fuzzystrmatch;

CREATE EXTENSION postgis_tiger_geocoder;

CREATE EXTENSION address_standardizer;
:::
成功创建空间拓展后,刷新数据库,可以看到在数据库中多了一个表spatial_ref_sys,表结构内容如下,可以看出这是一个有关坐标系统定义的表。

1. PostGIS Bundle 导入 Shp 到 PostGIS 空间数据库

PostGIS Bundle提供了高效的工具,可将Shapefile (Shp)空间数据快速导入 PostgreSQL/PostGIS 空间数据库,支持几何对象、属性数据及空间参考的完整迁移。无论是单文件导入还是批量处理,均可通过命令行或图形化工具轻松完成。PostGIS Bundle for PostgreSQL 是一套专为 PostgreSQL 数据库设计的空间数据库扩展包,它显著增强了 PostgreSQL 在地理空间数据处理方面的能力。PostGIS 支持多种空间数据类型,并且具有强大的空间索引能力和丰富的空间函数,在空间数据处理和分析方面具有强劲的优势,是为空间数据库的首选。

详情请参考文章:PostGIS Bundle 导入 Shp 到 PostGIS 空间数据库

打开PostGIS Bundle插件,点击View connection details,填写数据库连接信息。用户名为postgres,填写密码、主机地址、端口号以及创建用于导入Shp的数据库,然后点击OK
:::block-1

  • Username:postgres
  • Password:your password
  • Server Host:localhost
  • Port:5432
  • Database:geodata
    :::

2. shp2pgsql 导入 Shp 到 PostGIS 空间数据库

shp2pgsqlPostGIS自带的命令行工具,用于将Shapefile文件声称SQL脚本导入到PostGIS空间数据库。

详情请参考文章:shp2pgsql 导入 Shp 到 PostGIS 空间数据库

shp2pgsql命令行工具与PostGIS工具集成在一起,无需单独下载。该命令行工具可以在安装路径下的bin目录中找到。

也可以打开shp2pgsql图形界面工具,也就是上一节中的PostGIS Bundle for PostgreSQL来导入Shp数据。

(1)直接导入到数据库:
:::block-1
shp2pgsql -s 4326 -I -W “UTF-8” C:\Users\hasee\Desktop\conutries\countries.shp public.countries | psql -U postgres -d geodata
:::
其中postgres数据库用户名,geodata为数据库名称。

(2)通过SQL导入数据库:
:::block-1
shp2pgsql -s 4326 -I -W “UTF-8” C:\Users\hasee\Desktop\conutries\countries.shp public.countriesSQL>C:\Users\hasee\Desktop\conutries\countries.sql
:::

3. ogr2ogr 导入 Shp 到PostGIS空间数据库

ogr2ogr属于GDAL库的一部分,是一款功能强大的开源命令行工具,主要用于处理和转换地理空间数据。它支持多种矢量数据格式转换,包括 ESRI Shapefile、GeoJSON、KML、GML、PostgreSQL/PostGIS、GeoPackage 等,是地理信息系统 (GIS) 数据处理的必备工具。

详情请参考文章:ogr2ogr 导入 Shp 到PostGIS空间数据库

ogr2ogr可以作为包含在QGIS中的一部分进行下载:https://qgis.org/download也可以直接下载OSGeo4W,然后在OSGeo4W Shell命令行执行导入语句。OSGeo4W Shell命令行执行以下语句可将Shp数据导入到PostGIS目标数据库。

:::block-1
ogr2ogr -f PostgreSQL PG:“dbname=geodata host=127.0.0.1 user=postgres port=5432 password=123456” C:\Users\hasee\Desktop\region\province.shp -nln province -nlt MULTIPOLYGON -lco GEOMETRY_NAME=geom -lco FID=gid -lco SPATIAL_INDEX=GIST
:::

  • ogr2ogr

可执行文件名称。根据需要设置,可以将可执行文件添加到PATH中,也可以使用可执行文件的完整路径。

  • -nln

nln选项表示新图层名称"new layer name",即在目标数据库中要创建的表名。

  • -nlt

nlt选项表示新图层类型"new layer type"。特别是对于Shapfile文件的输入,新的图层类型通常是"multi-part geometry",因此需要提前告知系统使用"MultiPolygon"而不是"Polygon"作为几何体类型。

  • -lco

lco选项表示图层创建选项"layer create option"。不同的驱动程序有不同的创建选项,这里显示PostgreSQL驱动程序选项。
:::block-1

  • GEOMETRY_NAME:设置几何图形列的列名。为了与数据库中几何字段标准名称相对应,可以使用"geom"
  • **FID:**设置主键列名。为了与数据库准名称相对应,可以使用"gid"
  • **PRECISION:**控制数字字段在数据库中的表示方式。加载Shapefile文件时的默认值是使用数据库"数字"类型,这比"整数"和"双精度"等简单数字类型更精确,但有时更难使用。使用"NO"来关闭"数字"类型。
    :::

4. QGIS DB Manager 导入 Shp 到 PostGIS 空间数据库

QGIS DB Manager 属于 QGIS 的数据库管理工具,允许用户直接连接、管理和操作多种类型的空间数据库, 包括 PostgreSQL/PostGIS、SpatiaLite、Oracle。利用此工具可以方便的导入导出空间数据,并且具备空间可视化能力。

详情请参考文章:QGIS DB Manager 导入 Shp 到 PostGIS 空间数据库

(1)下载QGISQGIS下载地址:https://qgis.org/download

QGIS DB Manager属于QGIS的数据库管理工具,它集成在QGIS软件包中,无需单独下载。

在使用QGIS DB Manager前,请确保已经安装完成PostGIS空间插件,并且为目标数据库创建空间拓展

(2)连接数据库如下图填写数据库连接信息:

Name:自定义名称,如下可以是数据库名称Service:服务实例名称,可选参数Host:主机地址Port:端口号Database:数据库名称

5. GeoTools 将 Shp 导入PostGIS 空间数据库

GeoTools 在空间数据转换处理方面具有强大的能力,能够高效、简洁的操纵 Shp 数据。特别是与空间数据库PostGIS 相结合,更能展示出其空间数据处理的优势,借助 GeoTools,我们可以实现 Shp 数据高效入库。

(1)环境搭建在进行GeoTools开发前,需要先完成一些准备工作。俗话说,工欲善其事,必先利其器,只有将前期工作做好了,才能更好的推进往后的开发工作。

以下是环境搭建的一些软件工具,包括JDKMaven以及IDE
:::block-1

  • JDK:当前例子中使用的JDK版本为11,需要先行下载,并设置好环境变量。
  • Maven:当前例子中使用的Maven版本是3.6.3,需要先行下载,并配置好仓库地址。
  • IDE:当前例子中使用的IDEIDEA 2020.3,需要先行下载,并进行项目配置。
  • GeoTools:当前例子中使用的版本是34-SNAPSHOT
    :::
    (2)下载依赖在以前依赖的基础上,需要下载以下两个包。对于其他依赖,请参考之前的文章。
<!-- postgis-jdbc -->
<dependency><groupId>org.geotools.jdbc</groupId><artifactId>gt-jdbc-postgis</artifactId> <version>${geotools.version}</version>
</dependency>
<!-- PostgreSQL 驱动 -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.7.3</version>
</dependency>

(3)·········

详情请参考文章:GeoTools 将 Shp 导入PostGIS 空间数据库

OpenLayers示例数据下载,请回复关键字:ol数据

全国信息化工程师-GIS 应用水平考试资料,请回复关键字:GIS考试

【GIS之路】 已经接入了智能助手,欢迎关注,欢迎提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 !

相关文章:

  • 数据集全解析:从基础概念到实践应用的完整指南
  • 消息队列kafka的基础概念和部署
  • Lambda表达式的方法引用详解
  • PCB 通孔是电容性的,但不一定是电容器
  • GO 语言进阶之 Template 模板使用
  • 远程办公时代macOS访问解决方案:兼顾效率提升与安全防护的实用架构指南
  • 显存不够?节约显存高效微调语言模型的五种方法及实验
  • c++树状数组模板Fenwick (Binary Indexed) Trees
  • python3GUI--运维系统大屏 By:PyQt5(附下载地址)
  • 11.SPI和W25Q64
  • Gemini 的超长回复
  • CSS相关知识
  • 6个月Python学习计划 Day 4
  • 前端流行框架Vue3教程:26. 异步组件
  • 【25软考网工】第八章 (1)交换机基础
  • springboot 控制层调用业务逻辑层,注入报错,无法自动装配 解决办法
  • 在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化
  • c++总结-04-智能指针
  • 奈雪小程序任务脚本
  • Python与C++中浮点数的精度与计算误差(易忽略易错)
  • 公司网站域名和空间使用费/武汉做搜索引擎推广的公司
  • 辽宁模板网站建设公司/湖南正规seo优化
  • 有哪个网站可以做口腔执业助理医师题库/百度大数据搜索引擎
  • 网站制作的评价标准/seo搜索排名优化方法
  • 响应式网站建设有哪些好处/电商网站建设价格
  • 企业网站建设及维护/微商软文推广平台