1. 程式人生 > >用shp2pgsql把shp檔案匯入到資料庫

用shp2pgsql把shp檔案匯入到資料庫

把shp檔案匯入空間資料庫中,用postgresql圖形化介面pgAdmin中的外掛可以很方便的匯入,但有時候會提示dbf檔案無法開啟或匯入錯誤(有的是生成SQL語句過程中科學計數法問題造成),這時候我們用PostGis自帶的shp2pgsql先生成sql語句檔案修改下就可能成功匯入資料庫。下面是shp2pgsql的命令語法引數及例項:
PostGis版本: 1.5
用法: shp2pgsql [<options>] <shapefile> [<schema>.]<table> >檔案.sql
OPTIONS:
●-s <srid>
 設定srid,預設為-1
●(-d|a|c|p)互斥選項:
     -d  重新建立表,並插入資料。
     -a  在同一個表中增加資料
     -c  建立新表,並插入資料。(預設)
     -p  只建立表
●-g <geocolumn> 指定要建立的表的空間欄位名稱(在追加資料時有用)
●-D  使用dump方式,預設是生成sql
●-G  Use geography type (requires lon/lat data).
●-k  保持PostgreSQL識別符號方式
●-i  使用int4型別dbf檔案裡的integer型別
●-I  在空間欄位上建立索引
●-S  Generate simple geometries instead of MULTI geometries.
●-W <encoding> shape檔案屬性列的字元格式。預設是ascII
●-N <policy> 指定geometries為空時的操作(insert,skip,abort)
●-n  只匯入dbf檔案
●-?  顯示幫助

例項:把D盤下city.shp檔案匯入mygis資料庫city表中
1、C:\Program Files\PostgreSQL\9.0\bin> shp2pgsql -g the_geom -W GBK d:\city.shp city>d:\city.sql
   Shapefile type: Point
   Postgis type: POINT[2]
2、C:\Program Files\PostgreSQL\9.0\bin>psql -U postgres -h localhost -d mygis -p 5432 -f D:\city.sql

   postgis=# \i  d:/city.sql  (注:不要寫成d:\city.sql否則提示:d:: Permission denied)

3、C:\Program Files\PostgreSQL\9.0\bin>shp2pgsql -g the_geom -W GBK d:\city\res2_4m.shp city|psql -U postgres -h localhost -p 5432 -d mygis

注:國家基礎地理中心下載的縣級行政區將資料轉換為sql的時候,匯入資料庫時會出錯SQL語句插入錯誤,原因是資料中出現了很多科學計數法表示的資料,而postgis的insert語句是不能解析這種格式的資料的:'9.5043288e-005000'。
我們需要把這種格式轉換為:'9.5043288e-5'::numeric這種格式就可以了,這個工作可以由UltraEdit的正則表示式來完成。