共计 4635 个字符,预计需要花费 12 分钟才能阅读完成。
Oracle Spatial 基本操作是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Spatial 主要通过元数据表、空间数据字段(即 sdo_Geometry 字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的程序包,让用户进行更深层次的 GIS 应用开发。Oracle
Spatial 使用空间字段 sdo_Geometry 存储空间数据,用元数据表来管理具有 sdo_Geometry 字段的空间数据表,并采用 R 树索引和四叉树索引技术来提高空间查询和空间分析的速度。
1、元数据表说明
Oracle
Spatial 的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标系以及坐标维数说明等信息。用户必须通过元数据表才能知道 Oracle 数据库中是否有 Oracle
Spatial 的空间数据信息。通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。元数据视图的基本定义为:
2、空间字段解析
Oracle
Spatial 的空间数据都存储在空间字段 sdo_Geometry 中,理解 sdo_Geometry 是编写 Oracle
Spatial 程序的关键。sdo_Geometry 是按照 Open GIS 规范定义的一个对象,其原始的创建方式如下所示。
①
sdo_Gtype
是一个 NUMBER 型的数值,用来定义存储几何对象的类型。sdo_Gtype 是一个 4 个数字的整数,其格式为 dltt,其中 d 表示几何对象的维数;l 表示三维线性参考系统中的线性参考值,当 d 为 3 维或者 4 维时需要设置该值,一般情况下为空;tt 为几何对象的类型,Oracle
Spatial 定义了 7 种类型的几何类型,目前,tt 使用了 00 到 07,其中 08 到 99 是 Oracle
Spatial 保留的数字,以备将来几何对象扩展所用。
②
sdo_Srid
sdo_Srid 也是一个 NUMBER 型的数值,它用于标识与几何对象相关的空间坐标系。如果 sdo_Srid 为空(null),则表示没有坐标系与该几何对象相关;如果该值不为空,则该值必须为 MDSYS.CS_SRS 表中 SRID 字段的一个值,在创建含有几何对象的表时,这个值必须加入到描述空间数据表元数据的 USER_SDO_GEOM_METADATA 视图的 SRID 字段中。对于我们通常使用国际标准的 Longitude/Latitude(8307),Oracle
Spatial 规定,一个几何字段中的所有几何对象都必须为相同的 sdo_Srid 值。
③ sdo_Point
sdo_Point 是一个包含三维坐标 X,Y,Z 数值信息的对象,用于表示几何类型为点的几何对象。如果 sdo_Elem_Info 和 SDO_ORDINATES 数组都为空,则 sdo_Point 中的 X,Y,Z 为点对象的坐标值,否则,sdo_Point 的值将被忽略(用 NULL 表示)。Oracle
Spatial 强烈要求用 sdo_Point 存储空间实体为点类型空间数据,这样可以极大的优化 Oracle
Spatial 的存储性能和查询效率。
④
sdo_Elem_Info
sdo_Elem_Info 是一个可变长度的数组,每 3 个数作为一个元素单位,用于表示坐标是如何存储在 SDO_ORDINATES 数组中的。本文把组成一个元素的 3 个数称为 3 元组。一个 3 元组包含以下 3 部分的内容:
◇
SDO_STARTING_OFFSET
SDO_STARTING_OFFSET
表明每个几何元素的第一个坐标在 SDO_ORDINATES 数组中的存储位置。它的值从 1 开始,逐渐增加。
◇
SDO_ETYPE
SDO_ETYPE 用于表示几何对象中每个组成元素的几何类型。当它的值为 1, 2,
1003 和 2003 时,表明这个几何元素为简单元素。如果 SDO_ETYPE 为 1003,表明该多边形为外环(第一个数为 1 表示外环),坐标值以逆时针存储;如果 SDO_ETYPE 为 2003,表明该多边形为内环(第一个数为 2 表示内环),坐标值以顺时针存储。当 SDO_ETYPE 为 4,
1005 和 2005 时,表明这个几何元素为复杂元素。它至少包含一个 3 元组用以说明该复杂元素具有多少个几何简单元素。同样,1005 表示多边形为外环,坐标值以逆时针存储;2005 表示多边形为内环,坐标值以顺时针存储。
◇
SDO_INTERPRETATION
SDO_INTERPRETATION 具有两层含义,具体的作用由 SDO_ETYPE 是否为复杂元素决定。如果 SDO_ETYPE 是复杂元素(4,
1005 和 2005),则 SDO_INTERPRETATION 表示它后面有几个子 3 元组属于这个复杂元素。如果 SDO_ETYPE 是简单元素(1, 2,
1003 和 2003),则 SDO_INTERPRETATION 表示该元素的坐标值在 SDO_ORDINATES 中是如何排列的。
需要注意的是,对于复杂元素来说,组成它的子元素是连续的,一个子元素的最后一个点是下一个子元素的起点。最后一个子元素的最后一个坐标要么与下一个元素的 SDO_STARTING_OFFSET 值减 1 所对应的坐标相同,要么是整个 SDO_ORDINATES 数组的最后一个坐标。
⑤
sdo_Ordinates
SDO_ORDINATES 是一个可变长度的数组,用于存储几何对象的实际坐标,是一个最大长度为 1048576,类型为 Number 的数组。
SDO_ORDINATES 必须与 sdo_Elem_Info 数组配合使用,才具有实际意义。SDO_ORDINATES 的坐标存储方式由几何对象的维数决定,如果几何对象为二维,则 SDO_ORDINATES 的坐标以 {
x1, y1, x2, y2, …} 顺序排列,如果几何对象为三维,则 SDO_ORDINATES 的坐标以 {x1, y1, z1, x2, y2, z2,
…} 的顺序排列。
3、空间索引技术:
Oracle
Spatial 提供 R 树索引和四叉树索引两种索引机制来提高空间查询和空间分析的速度。用户需要根据不同空间数据类型创建不同的索引,当空间数据类型比较复杂时,如果选择索引类型不当,将使 Oracle
Spatial 创建索引的过程变得非常慢。
三、将经纬度转化成地名
目前各类位置服务 LBS 最终返回的都是误差允许范围内的经纬度,如 GPS 车载终端,手机定位等移动设备,系统通过一定的技术算法可以将其转化成具体的地名或附近的地标。或根据需要返回当前位置用户关心的周边信息:如医院、宾馆、加油站、公交车站等内容。
1、空间数据到 Oracle
Spatial 的导入
当前专题空间数据库建立的过程包括技术设计、资料准备、数据获取和数据入库等内容。数据的获取常可利用现有的 GIS
专业软件如 GeoStar、MAPGIS、SUPERMAP、ARCGIS 等来实现,获得的数据通过某一空间数据引擎 (如 Easyloader) 上载到 Oracle
数据库中,实现利用 Oracle Spatial 存储、管理空间数据。MAPORA 引擎是把 MAPGIS 的明码格式通过编程实现空间数据上载 Oracle
Spatial 的一种方法。
2、定位服务的整个流程
3、Oracle
Spatial 关联用到的程序包:
◆ sdo_Geom.Relate(sdo_Geometry1,‘MASK’,
sod_Geometry2, tolerance
):用于判断一个几何体与另一个几何体的关系,我们用于判断当前点是否在某一个面 (省份面、县市面、乡镇面) 上。
◇
sdo_Geometry1,sdo_Geometry2 为空间数据对应的几何对象。
◇ Tolerance:
容许的精度范围;
◇
MASK=Anyinteract/Contains/Coveredby/Covers/Disjoint/
○ Anyinteract:
sdo_Geometry2 落在 sdo_Geometry1 面上包括在边上。
○ Contains:
sdo_Geometry2 完全包含在 sdo_Geometry1 几何对象中,并且两个几何对象的边没有交叉。
○ Coveredby:
sdo_Geometry1 完全包含在 sdo_Geometry2 中,并且这两个几何对象的边有一个或多个点相互重叠。
○ Covers:
sdo_Geometry2 完全包含在 sdo_Geometry1 中,并且这两个几何对象的边有一个或多个点相互重叠。
○ Disjoint:
两个几何没有重叠交叉点,也没有共同的边。
○ Equal: 两个几何是相等的。
○ Inside:
sdo_Geometry1 完全包含在 sdo_Geometry2 几何对象中,并且两个几何对象的边没有交叉。
○ On:
sdo_Geometry1 的边和内部的线完全在 sdo_Geometry2 上。
○ Overlapbdydisjoint:
两个几何对象交迭,但是边没有交叉。
○ Overlapbdyintersect:
两个几何对象交迭,并且边有部分交叉。
○ Touch: 两个几何对象有共同的边,但没有交叉。
◆ sdo_nn(
sdo_Geometry1, sdo_Geometry2,‘sdo_num_res’, Tolerance
):用于返回几何体 sdo_Geometry2 周边附近有什么其他几何体集。
◇
sdo_Geometry1,sdo_Geometry2 为空间数据对应的几何对象。
◇ Tolerance:
容许的精度范围;
◇ sdo_num_res=n: 表示返回 n 个几何体,=1 表示只返回一个。
◆
sdo_Geom.Within_Distance(sdo_Geometry1, Distance, sdo_Geometry2, Tolerance,
unit )用于判断几何体 sdo_Geometry2 在指定的距离 Distance 内周边附近有什么其他几何体集。
◇
sdo_Geometry1,sdo_Geometry2 为空间数据对应的几何对象。
◇ Tolerance:
容许的精度范围;
◇ Distance: 指定的距离;
◇ Unit: 用于表示距离的单位,可能是 Unit=M/
Unit=KM 等长度单位,但必须是 SDO_DIST_UNITS 表中列举出来的单位之一。
4、返回的信息:
返回的信息根据业务需要可以返回空间信息关联到的所有信息,然后用三段论方式组合成一段话,通过 SMS 等方式返回到移动终端。
◆
可以是当前位置的地名、城市地标、自定义地标、道路名称等位置信息;
◆
可以是当前位置的周边信息:医院、宾馆、加油站、公交车站等;
四、结束语
采用 Oracle
Spatial
存储、管理空间数据,易于解决数据共享、分布式处理、网络通信、开放式开发、并发控制、网络化集成、跨平台运行及数据安全恢复机制等方面的难题。
可以直接通过 Oracle
Spatial 具有强大空间分析
进行空间分析:最短路径分析、连通性分析、交通系统中最少换乘算法及其实现等。
LBS 业务具有广阔的发展前景,目前商用的 LBS 业争也达到了相当程度的渗透率。LBS 业务涉及的领域很多,需要移动通信领域与 GIS 领域相结合来共同实现。我国目前很重视 GIS 领域的发展,国内已经有相当多具有一定实力和发展潜力的 GIS 厂商。相信随着今后 LBS 业务需求的不断增长,以及我国 GIS 领域的不断发展完善,LBS 业务将得到更广泛的应用。
看完上述内容,你们掌握 Oracle Spatial 基本操作是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!