shp2pgsql数据加载器转换ESRI的shapefile文件为SQL并插入到一个PostGIS/PostgreSQL数据库。加载器有几种操作模式,通过命令行标志区分.
除了shp2pgsql命令行加载器之外,还可以通过shp2pgsql-gui图形界面作为命令行加载器,对于一次性的非脚本加载非常好用,或者如果你是PostGIS新手,可以配置为一个插件(pgAdminIII)。
命令参数:
(c|a|d|p)这些是互斥的选项:
- c
创建一个新表并从shapefile
填充它。这是默认模式。
- a
将形状文件中的数据追加到数据库表中。注意,要使用此选项加载多个文件,这些文件必须具有相同的属性和相同的数据类型。
- d
在使用形状文件中的数据创建新表之前,删除数据库表。
- p
只生成表创建SQL代码,而不添加任何实际数据。如果需要将表创建和数据加载步骤完全分离,可以使用此方法。
- d
对输出数据使用PostgreSQL“转储”格式。它可以和-a, -c, -d结合。它的加载速度比默认的“insert
”SQL格式快得多。对非常大的数据集使用此方法。
- s
[< FROM_SRID >:] < SRID >
使用指定的SRID创建并填充几何表。可选地指定输入shapefile使用给定的FROM_SRID,在这种情况下,几何图形将被重新投影到目标SRID。
- k
保持标识符的大小写(列、模式和属性)。注意,Shapefile中的属性都是大写的。
- i
将所有整数强制为标准的32位整数,不要创建64位bigint,即使DBF头签名似乎可以这样做。
- I
在geometry列上创建GiST索引。
- m
-m a_file_name
指定一个文件,其中包含一组(长)列名到10个字符的DBF列名的映射。文件的内容是由两个名字组成的一行或多行,用空格隔开,没有首行或首行空格。例如:
COLUMNNAME DBFFIELD1
AVERYLONGCOLUMNNAME DBFFIELD2
- S
生成简单的几何图形而不是多个几何图形。只有当所有的几何图形实际上是单一的(即一个单壳的多多边形,或一个单顶点的多点)才能成功。
- t <维度>
强制输出几何图形具有指定的维数。使用以下字符串表示维数:2D, 3DZ, 3DM, 4D。
如果输入的维数少于指定的维数,则输出将用0填充这些维数。如果输入有更多指定的维度,不需要的维度将被删除。
- w
输出WKT格式,而不是WKB。注意,这可能会由于精度的损失而引入坐标偏移。
- e
单独执行每条语句,而不使用事务。这允许在存在一些生成错误的错误几何图形时加载大多数好的数据。注意,这不能与-D标志一起使用,因为“dump”格式总是使用事务。
- W <编码>
指定输入数据(dbf文件)的编码。使用时,dbf的所有属性都从指定的编码转换为UTF8。生成的SQL输出将包含一个SET CLIENT_ENCODING to UTF8
命令,以便后端能够将UTF8重新转换为数据库内部配置使用的任何编码。
- N <策略>
NULL几何图形处理策略(插入*、跳过、终止)
- n
只导入DBF文件。如果你的数据没有相应的shapefile,它会自动切换到这个模式,只加载dbf。因此,只有当您有一个完整的shapefile集,并且您只需要属性数据而不需要几何图形时,才需要设置这个标志。
- G
在WGS84 long lat (SRID=4326)
中使用地理类型代替几何(需要lon/lat
数据)
- T <表>
指定新表的表空间。索引仍然使用默认表空间,除非也使用-X参数。PostgreSQL文档对何时使用自定义表空间有很好的描述。
- X <表>
为新表的索引指定表空间。这适用于主键索引,如果还使用i,则适用于GIST空间索引。
一个使用加载器创建输入文件并上传它的示例会话可能是这样的:
# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql
# psql -d roadsdb -f roads.sql
转换和上传可以用UNIX管道一步完成:
shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb
对于GIS数据入库,除了使用上述方法,对于一次性入库,还可以通过QGIS进行操作,相关操作请查看本公众号QGIS相关文章。




对于GIS数据入库,除了使用上述方法,对于一次性入库,还可以通过QGIS进行操作,相关操作请查看本公众号QGIS相关文章。