shape导入工具

shp2oscar工具是将shapefile解析成SQL语句,并将SQL语句输出的终端,使用者可以将SQL语句通过重定向输出到文件,或者通过管道直接在ISQL中执行入库。

工具使用方式:

shp2oscar [<options>] <shapefile> [[<schema>.]<table>]

<shapefile>:指定shapefile的路径,一般指定.shp后缀的文件。

[[<schema>.]<table>]:参数会指定生成的SQL语句的模式名和表名,可以不指定,SQL语句的模式名和表名将用shapefile中的默认值。

参数描述(options)

-h/-?

获得工具的帮助信息,打印每个参数的作用。

-s

设置SRID值(空间参考系统),默认为0.不能和-D参数一起使用。

-d|a|c|p

-d 如果导入时数据库中有相同的表,则先删除,然后根据shaprefile文件中的定义重建。

-a 追加模式,不会创建表,要求表已经在数据库存在,将shapefile文件中的数据写入到表中;数据库中没有表或者表结构不一致会导致导入失败。

-c 直接创建表,不管数据库中有没有相同的表名,直接执行创建,并插入数据;如果数据库中有相同的表会导致加载失败,这种模式为默认模式。

-p 预加载模式,只在数据库中创建表,创建表前不会判断数据库中是否有相同的表,如果数据库中有相同的表会导致建表失败。

-g

指定是geometry/geography类型的列名,一般用在追加模式(-a),这样可以指定数据库中的那个列是空间数据类型。

不指定的情况下列名默认为小写字符串:geom,且在生成sql语句中,geom字段也会是小写,在大小写敏感的数据库中需要注意。

建议在指定-g时,设置为大写的GEOM,比如-g GEOM,且和-k参数配合使用,这样可以生成所有对象名称都是大写的SQL语句。

-D

将数据导出为postgresql的dump文件格式,默认为解析为标准的SQL语句。

-e

单独执行每条SQL语句,不把SQL语句放到一个事务中。不能与-D参数同时使用。

-G

使用geography的类型,需要lon/lat数据或者需要-s参数.

-k

是否保持大小写敏感。

不设置参数时(默认),工具默认会将对象名称(表名和模式名)转换成小写,设置此参数将保留导出时对象名的大小写。

-i

用int4类型代替integer整型类型。

-I

为空间数据类型列创建GIST索引。生成类似的语句:

CREATE INDEX ON "AANP" USING GIST ("geom");

备注:默认生成的SQL语句无索引名称,神通数据库后台可能不支持,但PG支持,神通数据库的后台正在开发此功能,如果创建无索引名称的语句失败, 可自行添加索引名称,建议规则为:表名_GIST_GEOM(GEOM为列名,根据需要变更)。

-m

指定一个文件,文件中包括了列名与10个字符DBF列名的映射。内容是一行或多行这种映射,比如:

COLUMNNAME DBFFIELD1

VERYLONGCOLUMNNAME DBFFIELD2

-S

生成简单几何图形而不是多个几何图形。

-t

<维度>强制几何体为“2D”、“3DZ”、“3DM”或“4D”之一

-w

输出WKT而不是WKB。请注意,这可能会导致坐标偏移。

-W

<编码>指定形状文件的字符编码属性列。(默认值:“UTF-8”),生成的SQL脚本中,一般会根据编码生成一个设置客户端编码的SQL语句:SET CLIENT_ENCODING TO UTF8;

-N

<策略>NULL几何图形处理策略(插入*、跳过、中止)。

-n

-n仅导入DBF文件。

-T

<表空间>指定新表的表空间,请注意,索引仍将使用默认表空间,除非还使用了-X参数。

-X

<表空间>指定表索引的表空间。这适用于主键、空间索引(采用了-I参数生成GIST索引情况下)。

使用举例

  • 生成SQL文件

shp2oscar -d -k -g GEOM -W UTF-8 /opt/AANP.shp > /opt/aanp.sql

  • ISQL中管道执行

shp2oscar -d -k -W UTF-8 /opt/AANP.shp | isql -Usysdba/szoscar55 -h localhost -d osrdb -p 2003

  • 生成有GIST索引SQL

shp2oscar -d -k -I -W UTF-8 /opt/AANP.shp

注意事项

由于神通数据库默认配置下对象名称(表名、列名、索引名等)是大小写不敏感的,对象名称在不加双引号的情况下,到数据库后都会变成大写的。

因此使用sh2oscar工具时,如果数据库是大小写不敏感的,则建议使用-k参数,将生成的SQL语句对象名称全部变成大写。

导入时,默认是以shape文件名称来生成的表名的,且表名的大小写也与shape文件名一致。