摘要
翻译至PostGis 2.4.4 Dev Manual 4.4.2 有删减。英文水平有限,错漏之处敬请告知。
shp2pgsql 是PostgreSQL提供的入库工具。能够将 ESRI Shape file转换成可插入PostGIS/PostgreSQL的SQL语句。虽然PostGIS提供了可视化的入库工具shp2pgsql-gui,但易用性欠佳。我们可以通过熟悉shp2pgsql然后开发易用的shape file入库工具。
shp2pgsql-gui

用法
shp2pgsql包含多个命令参数,用于指定导入配置。参数列表如下:
以下四个为互斥选项
-c
创建新的表结构并填充数据。默认选项。
-a
将shp文件中的数据导入已存在的数据表中。使用此选项文件必须具有相同的字段和数据类型。
-d
创建新表和导入数据前,删除数据库中已存在的表。
-p
只生成创建表结构的SQL代码,不导入任何数据。当需要分离表结构创建和数据导入时,使用此项。
其他参数
-?
查看帮助信息
-D
使用PostgreSQL “dump”格式输出数据。可以和-a、-c及-d结合使用。“dump”加载速度比“insert”快很多,可以用于大数据量的数据集处理。
-s <[<FROM_SRID>]
以指定的SRID创建表结构并填充数据。可以为给定的FROM_SRID指定任意的shp文件,此时空间数据会被重投影到目标SRID。FROM_SRID不能用-D来指定。
-k
保持标识符大小写(列,模式和属性 )。shp中的属性字段都是大写。
-i
强制所有整型数据为标准32位整数,即使DBF头文件标名也不创建64位的bigints
-I
在空间数据列上创建GiST空间索引。
-m
指定一个文件包含长列名与DBF列名(译者注:DBF文件支持的列名长度不大于10)的映射.文件内容是一个或多个两行名称,以空格分隔,前后无空格。例如:
1
2
3 > COLUMNNAME DBFFIELD1
> AVERYLONGCOLUMNNAME DBFFIELD2
>
-S
创建简单的几何对象而不是MULTI几何对象。只有shp数据中所有feature都为简单对象时才能成果(比如MULTIPOLYGON只包含一个面,MULTIPOINT只包含一个点)。
-t
强制输出具有指定维度的空间几何数据。使用以下字符串表示维度:2D、3dz、3SM、4d。
如果输入shp文件维度小于指定维度,输出数据中缺少的维度将以0填充。如果输入的shp文件维度大于指定维度,多余维度将被舍去。
-w
以WKT格式输出,而不是WKB。请注意,由于精度损失可能导致数据偏移。
-e
在不使用事务的情况下独立执行每个语句。这样,当一部分几何图形产生错误时,仍然可以加载其余数据。注意,这不能和-D一起使用,因为“dump”格式总是使用事务。
-W
指定输入矢量文件(DBF文件)的编码格式。使用时,所有的DBF数据都会从指定编码转换成UTF-8。输出的SQL文件将包含一条命令:SET CLIENT_ENCODING to UTF8,这样后台就能将数据从UTF-8转换成数据库内部使用的任意编码。
-N
空几何类型的处理策略(插入*、跳过或终止)
-n
只导入DBF文件的数据。如果矢量文件没有对应的.shp图形就,将自动切换到该模式,只导入DBF。所以只有矢量文件完整且只希望导入属性表不导入几何图形的情况才需要使用该模式。
-G
在WGS84经纬度参考(SRID=4326)中使用geography类型,而不是geometry。
-T
为新创建的表指定表空间。除非使用了-X参数,否则索引仍将使用默认表空间。关于何时使用自定义表空间PostgreSQL文档有详细说明。
-X
为新创建的表索引指定表空间。适用于主键索引,当使用-I参数时也适用于GIST空间索引
示例
使用shp2pgsql创建SQL文件并导入数据库的过程如下所示:
1 | # shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql |
使用UNIX管道可以在 一个命令中完成矢量数据转换和入库:
1 | # shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb |
了解更多
了解更多关于PostGIS的内容请参阅以下链接:
最后更新: 2018年03月28日 21:35