數據導入與導出函數
數據庫數據導入與導出可以通過多個函數完成,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>'" <表名或視圖名>