达梦数据库空间数据导入导出和简单使用方法
dmst2shp和dmshp2st是达梦数据库专为空间类型数据设计的一种数据导入导出工具。工具在数据库安装目录的bin目录下,导入工具为dmshp2st,能够将空间数据从shapefile文件中转成dmfldr能够识别的中间文件,并通过dmfldr将数据导入到达梦服务器中。导出工具为dmst2shp,能够将空间数据从达梦服务器直接导出到shapefile文件中。空间数据导入导出数据~流程图如下:
使用dmshp2st导入数据
使用dmshp2st工具需指定必要的参数, 调用格式如下:
。
dmshp2st keyword=value [keyword=value ...]
样例如下:
dmshp2st shapefile=d:\test table_name=t1 auto_overwrite=1
dmshp2st先将shapefile中的数据导入到中间文件*.dat等文件中,再将*.dat等文件导入到服务器中,中间文件可以被多次使用,或者导入到多个不同服务器中,还可以通过修改*.ctl内容筛选出需要导入的数据。
可以用help参数来显示dmshp2st各个参数的使用说明
:
格式: ./dmshp2st KEYWORD=value
例程: ./dmshp2st SHAPEFILE=/shapename
关键字 说明(默认值)
---------------------------------------------------------------------------------------
SHAPEFILE 导入shapefile的文件路径,包含三个同名文件(*.shp、*.shx、*.dbf)
TABLE_NAME 导入到指定的表中,默认与文件名同名
GEO_COLUMN 空间列名,默认为GEOM
ID_COLUMN 为表添加ID列名
START_ROW 从第几行开始导入,默认为1
SRID 空间参考坐标系,默认为0
BOX 边界矩形,在该矩形内的空间对象才允许被导入表中,
格式: BOX=(MINX,MINY,MAXX,MAXY),X、Y为矩形坐标,默认不过滤任何对象
LOG 生成的日志文件名
AUTO_OVERWRITE 是否覆盖所有同名文件(0) 0:否 1:是
SIMPLE 是否生成简单类型(0) 0:否 1:是
HELP 打印帮助信息
dmshp2st工具各个参数详细说明:
1、shapefile
空间数据的完整描述需要至少3个同名但不同后缀的文件(*.shp,*.shx,*.dbf),此参数指定上述3个文件的文件路径,无需附带后缀。程序从*.shp和*.shx中构造具体的空间对象数据,从*.dbf中构造表中非空间类型列的列数据。此选项为必选项。
2、table_name
指定数据将导入到哪张表,此参数为可选项,若未指定表名,则默认表名为shapefile文件名,程序会自动为表名添加双引号,表名长不得超过128个字节。
3、geo_column
指定空间数据列列名,此参数为可选项,若不指定列名,则空间列名默认设置为“geom”,至多允许指定一列空间列名,列名不得超过128字节。
4、id_column
为导入表添加id列,每条记录都有唯一的id号,此参数为可选项,默认不添加id列,id号从start_row开始,若导入过程中有数据被跳过,则相应的id号也会跳过。
5、start_row
指定从第几行开始导入数据,此参数为可选项。若不指定参数值,则默认值为1,若大1,则程序将跳过*.shp,*dbf部分数据,从指定行开始导入,start_row最大值不得超过2147483647。
6、srid
指定导入数据的空间参考坐标系,此参数为可选项,默认值为0。
7、box
指定一个边界矩形,与边界矩形不相交的空间对象将不会被导入。四个参数值为double类型,允许使用科学计数法表示。此参数为可选项,若未指定该参数,则默认不过滤任何空间对象。
8、log
指定日志文件路径,此参数为可选项,若未指定该参数,则默认不生成日志文件。日志文件记录了整个导入过程的细节。
9、auto_overwrite
是否允许覆盖同名文件,该参数为可选项。参数值可设为0或1,0表示不允许覆盖,1允许覆盖,默认为0。dmshp2st工具将自动生成中间文件(*.sql,*.dat,*.lob,*.ctl,*.log),若上述文件已存在,则需要此参数来确定是否需要覆盖同名文件。
10、simple
是否生成简单几何体,该参数为可选项。参数值可设为0或1,1表示简单几何体,0表示复合几何体,默认为0。shapefile文件空间类型与达梦服务器空间类型有所不同,shapefile中polyline及polygon类型对应着达梦的linestring,polygon和MultiLinestring,MultiPolygon,因此需要此参数来确定导入成何种类型。
11、help
打印帮助信息。
关键字 说明(默认值)
使用dmst2shp工具需指定必要的参数,调用格式为:
dmst2shp userid keyword=value [keyword=value ...]
实例如下:
dmshp2st SYSDBA/SYSDBA@192.168.0.1:5236 shapefile=d:\test sql="select * from t1" auto_overwrite=1
可以用help参数来显示dmst2shp各个参数的使用说明:
格式: dmst2shp.exe KEYWORD=value
例程: dmst2shp.exe SYSDBA/SYSDBA SQL="SELECT ID,LOCATION FROM T_GEO;" SHAPEFILE=c:\shapename
USERID 必须是命令行中的第一个参数
关键字说明(默认)
----------------------------------------------------------------------
USERID 用户名/口令 格式:USER/PWD@SERVER:PORT#SSLPATH@SSLPWD
SQL 生成shapefile的查询语句
SHAPEFILE 生成shapefile的文件路径,包含三个同名文件(*.shp、*.shx、*.dbf)
LOG 生成的日志文件名
AUTO_OVERWRITE 是否覆盖所有同名文件(0) 0:否 1:是
SIMPLE 是否生成简单类型(0) 0:否 1:是
HELP 打印帮助信息
dmshp2st工具各个参数详细说明:
1、userid
指定数据库的登录信息,包含用户名、密码、服务器地址、端口等信息,登录链接格式为:USER/PWD@SERVER:PORT#SSLPATH@SSLPWD,此参数为必选项且必须位于参数位置的第一个,关键字userid可以省略不写。
2、sql
指定查询语句,此参数为必选项。查询语句放在双引号内,它的结果将决定哪些数据将被导出到shapefile文件,查询结果必须包含一列空间列与至少一列普通列。
3、shapefile
指定导出文件的路径,此参数为必选项。dmst2shp将生成3个同名但不同后缀的文件(*.shp,*.shx,*.dbf),*.shp保存具体的空间数据,*.shx保存空间数据在*.shp里的偏移信息,*.dbf保存普通列数据,此参数无需指定后缀名。
4、log
指定导出过程产生的日志文件路径,此参数为可选项。日志文件记录了导出过程中的导出信息和错误信息以及统计信息。若未指定该参数,则默认不生成日志文件。
5、auto_overwrite
是否自动覆盖同名文件,此参数为可选项,参数值只能为0或1,0表示不覆盖同名文件,1表示覆盖,默认值为0。
6、simple
是否导出成简单几何体,此参数为可选项。参数值只能为0或1,0表示不生成简单几何体,1表示生成简单几何体,默认值为0。此参数针对达梦数据库中以Multi打头的空间类型数据。若指定simple为1,对于MultiPoint,则只会导出第一个点,其余点将被忽略;对于MultiLinestring和MultiPolygon,若其内部包含2个及以上简单几何体,则无法导出成简单几何体。
7、help
获取dmst2shp工具帮助信息。
示例
1、数据准备:
drop table t1 cascade;
create table t1(c1 int,c2 st_geometry);
insert into t1 values(1, dmgeo.st_geomfromtext('linestring(10 10, 10 20)',0));
insert into t1 values(2, dmgeo.st_geomfromtext('linestring (5 4, 5 5)',0));
commit;
2、数据导出
dmst2shp.exe SYSDBA/SYSDBA@192.168.0.1:5236 SQL="SELECT * FROM t1" SHAPEFILE=D:\test AUTO_OVERWRITE=1
导出程序将生成3个同名文件:test.shp、test.shx、test.dbf。
3、数据导入
dmshp2st.exe shapefile=d:\test table_name=t1 AUTO_OVERWRITE=1 ID_COLUMN=GID SRID=0 START_ROW=1
导入程序将生成4个同名文件:test.sql、test.ctl、test.dat、test.lob。再利用dmfldr工具将数据导入到达梦服务器中,因为空间类型是类类型,因此使用dmfldr时需要置enable_class_type标记为true,dmfldr具体使用方法请参照“快速数据加载”章节。
dmfldr.exe SYSDBA/SYSDBA@192.168.0.1:5236 CONTROL='D:\test.ctl' lob_directory='d:\' enable_class_type=true mode='in'
下面是简单sql使用语法
用户在使用DMGEO包之前,需要提前调用系统过程SP_INIT_GEO_SYS(1)创建DMGEO包。
drop table if exists test;
创建一个表,字段为空间数据类型(点)
create table test(a SYSGEO.ST_POINT);
向表中插入5条点空间数据
insert into test values(dmgeo.ST_PointFromText('point (110 50)' , 0));
insert into test values(dmgeo.ST_PointFromText('point (120 40)' , 0));
insert into test values(dmgeo.ST_PointFromText('point (115 45)' , 0));
insert into test values(dmgeo.ST_PointFromText('point (30 40)' , 0));
insert into test values(dmgeo.ST_PointFromText('point (200 40)' , 0));
commit;
select * from test;
查询test表中与面相交的点
select * from test where dmgeo.ST_INTERSECTS(a,
dmgeo.st_geomfromtext('polygon ((110 40, 110 50, 120 50, 120 40,110 40))', 0));