尽管空间数据格式有一定的标准,但几乎每一个GIS软件都有自定义的数据格式,并且和可视化效果有较大程度的关联。这对空间数据的无损共享造成了极大的障碍。由于很多GIS软件是在空间数据标准发布之前就开发出来的,一些常用的GIS软件的空间数据格式便成为了事实上的标准格式之一,ESRI的.shp文件格式就是其中之一。Oracle Spatial并不识别这些格式,因此我们需要借助第三方转换工具将其转换成Oracle Spatial所支持的空间数据格式。在这里不打算讨论众多的转换工具,而只是简单介绍一下如何使用SHP2SDO将.shp文件转换成Oracle Spatial所支持的格式。SHP2SDO的用法如下:
图2-2 ArcGIS中显示的武汉光谷示例图(©OpenStreetMap contributors)
shp2sdo[-o]<shapefile><tablename>-g<geometry column>
-i<id column>-n<start_id>-p-d
-x(xmin,xmax)-y(ymin,ymax)-s<srid>
或
shp2sdo-r<shapefile><outlayer>-c<ordcount>-n<start_gid>-a-d
-x(xmin,xmax)-y(ymin,ymax)
shapefile ——输入的.shp文件名(不包括后缀)。
tablename——空间表名,如果不输入则表名与输入的文件名相同。
通用选项:
-o——转换到对象模型/关系模型(默认)。
-r——转换到关系模型格式。
-d——在Oracle控制文件中存储数据,如果没有则将数据存储到分开的文件中。
-x——X方向上的数据范围。
-y——Y方向上的数据范围。
-v——冗余输出。
-h or-?——输出帮助信息。
对象模型选项:
-g geom_column ——指定SDO_GEOMETRY所在列名,默认为GEOM。(www.xing528.com)
-i id_column ——用于几何计数的列名,如果没有声明,则没有关键列生产,如果没有名字声明,则用ID。
-n start_id ——ID的开始数字,默认为1。
-p ——将点存储在SDO_ORDINATES数组,否则存储在SDO_POINT中。
-s ——加载SRID,否则SRID为空。
-t ——加载误差容忍阈值,默认为0.000 000 05。
-8 ——写成8i的控制文件格式,否则为9i或以后版本。
-f ——几何对象采用10位数精度,默认为6位精度。
关系模型选项:
-c ordcount ——_SDOGOEM表中的纵坐标数,默认为16。
-n start_gid ——GID的开始数字,默认为1。
-a ——属性进入_SDOGEOM表,否则为分开的表。
运行如下命令:
SHP2SDO ovclines-g roads-x(-180,180)-y(-90,90)-s 8307-t 0.000 000 01
需要注意的是,这里的ovclines代表的是三个不同的输入文件,分别是ovclines.shp、ovclines.dbf和ovclines.shx。这三个文件分别包含ESRI的ovclines数据中的不同内容。-x及其参数表示经度范围为-180°到180°,-y及其参数表示纬度范围为-90°到90°。8307是WGS84的SRID,-t及其参数表示几何计算中采用的阈值是0.000 000 01。运行上面的命令后,输出三个文件:
ovclines.sql ——创建ovclines表,并加载空间元数据的SQL脚本文件。
ovclines.ctl ——SQL*Loader的控制文件。
ovclines.dat ——SQL*Loader的数据文件。
接下来的入库过程就是使用SQL*Loader加载这三个文件到空间数据库,具体操作过程见2.2。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。