PostGIS:使用shp2pgsql、pgsql2shp、OGR2OGR函数进行数据导入、导出

news/2025/2/9 1:37:24 标签: 数据库, postgresql, PostGIS

数据导入与导出函数

数据库数据导入与导出可以通过多个函数完成,QGIS文档介绍了3个函数: shp2pgsqlpgsql2shpOGR2OGR,分别用于shp导入数据库数据库文件导出为shp、数据转换为多种数据格式。

(1)shp2pgsql

在linux语法如下所示,其中:-s <SRID>指定空间参考系统标识符(SRID),-c表示将根据 Shapefile 的结构在数据库中创建一个新表,-D是一种更紧凑的 SQL 表示方式来存储数据,-I是在创建的新表上创建空间索引,<schema>.<table>指定了将 Shapefile 数据存储在 PostgreSQL 数据库中的模式和表名;然后将shp2pgsql的输出作为 psql 的输入,在psql中制定了数据库名称、主机名或者IP、用户名信息。

shp2pgsql -s <SRID> -c -D -I <path of shapefile> <schema>.<table> | \
psql -d <databasename> -h <hostname> -U <username> 

在window系统下需要分两步执行,代码参考如下:

shp2pgsql -s <SRID> -c -D -I <path to shapefile> <schema>.<table> > import.sql
psql psql -d <databasename> -h <hostname> -U <username> -f import.sql 
(2)pgsql2shp

pgsql2shp语法参考如下,

pgsql2shp -f <新的shp文件路径> -g <几何列名称> \
-h <主机名> -U <用户名> <数据库名称> <表名 | 视图名> 

此外,可以使用查询语句,这里的 "<查询>"指定要执行的 SQL 查询,查询结果将被导出为 Shapefile。

pgsql2shp -f <新的 Shapefile 路径> -g <几何列名称> \
-h <主机名> -U <用户名> "<查询>"
(3)OGR2OGR

ogr2ogr 是 GDAL 库的一部分,支持多种数据格式,包括但不限于 Shapefile、GML、GeoJSON、SQLite 等。在使用GDAL之前,可以使用gdalinfo --version查看是否安装了GDAL。官网具有详细的教程:https://gdal.org/en/stable/programs/ogr2ogr.html。

这个函数在之前也学习分享过,链接为:GDAL:矢量数据提取-转换-加载(ETL)过程 https://mp.weixin.qq.com/s/9mqrb2Ze0wHKpMA-LixcZA?token=1828476271&lang=zh_CN。在这个分享中,介绍了使用ogr2ogr 结合WHERE语句提取子集、使用CAST() 更改列的数据类型、重命名、SCV转SHP。

此外,QGIS文档中介绍了将表从 PostGIS 导出到 GML,它在这里指定了-f 参数,这个参数用来指定输出的格式。但我们可以省略这个参数,因此GDAL会根据拓展名来推断出要导出的格式。

ogr2ogr -f GML export.gml PG:'dbname=<databasename> user=<username>
        host=<hostname>' <Name of PostGIS-Table>
#转shp
ogr2ogr 输出Shapefile.shp PG:"dbname='<databasename>' user='<username>' host='<hostname>'" <表名或视图名> 

http://www.niftyadmin.cn/n/5845438.html

相关文章

zephyr devicetree

Syntax and structure — Zephyr Project Documentation Input files There are four types of devicetree input files: sources (.dts) includes (.dtsi) overlays (.overlay) bindings (.yaml) The devicetree files inside the zephyr directory look like this: …

65.棋盘 C#例子 WPF例子

这是一个不具备任何功能的UI设计&#xff0c;使用矩形和边界和文字块。通过这些可以自由的创建不同显示效果的内容。 棋盘展示&#xff1a; 代码展示&#xff1a; <Window x:Class"棋盘设计.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xam…

02.07 TCP服务器与客户端的搭建

一.思维导图 二.使用动态协议包实现服务器与客户端 1. 协议包的结构定义 首先&#xff0c;是协议包的结构定义。在两段代码中&#xff0c;pack_t结构体都被用来表示协议包&#xff1a; typedef struct Pack {int size; // 记录整个协议包的实际大小enum Type type; …

STM32G474--Whetstone程序移植(单精度)笔记

1 准备基本工程代码 参考这篇笔记从我的仓库中选择合适的基本工程&#xff0c;进行程序移植。这里我用的是stm32g474的基本工程。 使用git clone一个指定文件或者目录 2 移植程序 2.1 修改Whetstone.c 主要修改原本变量定义的类型&#xff0c;以及函数接口全部更换为单精度…

Android修行手册-五种比较图片相似或相同

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材…

【Leetcode 热题 100】136. 只出现一次的数字

问题背景 给你一个 非空 整数数组 n u m s nums nums&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 数据约束 1 ≤…

MCU应用踩坑笔记(ADC 中断 / 查询法)

问题描述 IC&#xff1a;SC92F7596,在使用过程中&#xff0c;发现一个问题&#xff0c;就是我们使用到了ADC功能&#xff0c;程序的代码如下&#xff1a; ADC采样周期200ms &#xff0c;采样个数&#xff1a;4 在使用过程中&#xff0c;因配置了ADC中断使能&#xff0c;在中断…

洛谷P8742 [蓝桥杯 2021 省 AB] 砝码称重(dp初始)

归纳蓝桥杯的这道题总结了一定对于dp的看法&#xff0c;虽然还没看到y总的动态规划&#xff0c;自己搜了搜上学期算法中学到的01背包问题。 首先动态规划问题最重要的是状态转移方程&#xff0c;将问题抽象成数学问题&#xff0c;列出方程就可以得解。 #include<cstdio> …