把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的正则表达式来完成。