PostGIS:使用shp2pgsql、pgsql2shp、OGR2OGR函数进行数据导入、导出
数据导入与导出函数
数据库数据导入与导出可以通过多个函数完成,QGIS文档介绍了3个函数: shp2pgsql
、pgsql2shp
、OGR2OGR
,分别用于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>'" <表名或视图名>