1. 准備好Shape文件(不僅僅是.shp文悠揚,還要有其他相關數據文件,包括.shx、.prj、.dbf文件)。
2. 使用命令將Shape數據轉換為*.sql文件
shp2pgsql -s 3857 -c -W "GBK" CLLX.shp>CLLX.sql
-s 代表指定數據的SRID為3857
-c 代表數據將新建一個表,這里可能的選項是 -d 刪除舊的表,重新建表並插入數據; -a 向現有表中追加數據; -p 僅創建表結構,不添加數據,這四個參數是互斥的。
-W Shape文件中屬性的字符集,通常Postgresql的字符集是UTF-8,有時候可能Shape數據中的字符集是其他,就可能報“Unable to convert data value to UTF-8 (iconv reports "無效或不完整的多字節字符或寬字符"). Current encoding is "UTF-8". Try "LATIN1" (Western European)”錯誤,這時候指定正確的字符集即可解決方問題。
3.建立空間數據庫,並導入數據
3.1 登錄postgres用戶,建立空的數據庫,指定數據的所有者是gisdb用戶(或者你數據庫內的任意現有用戶)
CREATE DATABASE shp2pgsqldemo WITH OWNER=gisdb;
3.2 使用 \c shp2pgsqldemo; 切換到shp2pgsqldemo數據庫,並安裝PostGIS相關擴展(安裝PostGIS請參見這里)
\c shp2pgsqldemo; CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;
3.3 向數據庫導入使用Shape數據生成的.sql文件
psql -d shp2pgsqldemo -U gisdb -f /tmp/shp/CLLX.sql -W
4. 驗證數據
5.直接將Shape數據導入到數據表
shp2pgsql -s 3857 -c -W "GBK" /tmp/shp/CLLX.shp public.CLLX2 | psql -d shp2pgsqldemo -U gisdb -W
這里值的一提的是,剛才我們已經建了一個cllx表了,如果再導入可以使用 -d 參數刪了重建,我這里為了演示功能,使用 <SCHEMA>.<DBTABLE> 數據重新建了一個表 CLLX2 ,如下圖紅框中所示。另外在導入過程中需要輸入數據庫用戶的密碼,在紅色箭頭所示的地方,命令執行會中斷,等待輸入密碼,只需要輸入密碼后回車即可向下執行。
5.1驗證導入結果,發現有新建的cllx2表
共18條數據