ArcSDE vs. Oracle Spatial 13
来源:互联网 发布:网络拓扑的分层结构 编辑:程序博客网 时间:2024/05/21 19:36
I. 空间关系运算
以上两个章节是必不可少的基础,涉及到空间数据在数据库中的存储和通过索引加速空间数据的获取。从这句话也可以看出,后续的章节并不是必须的,也就是说某些基于空间数据的应用可能并不需要诸如空间关系判断、几何对象处理等功能。这并不是说这些功能就用不着了,而是这些功能并不一定需要在数据库端执行。比如基于ArcSDE,这些空间算法和功能在ArcGIS的产品线中无处不在,很多时候都不会把这些功能放到数据库上去。
· Oracle Spatial
在Oracle Spatial中,主要的空间关系操作在下表中列出:
空间操作
描述
SDO_FILTER
主过滤,判断哪些几何对象可能和给定的几何对象相交
SDO_JOIN
基于一定空间关系的表连接
SDO_NN
查询离某个几何对象最近的几何对象
SDO_NN_DISTANCE
查询离某个几何对象最近的几何对象与当前对象的距离
SDO_RELATE
判断两个几何对象是否满足某种空间关系
SDO_WITHIN_DISTANCE
判断两个几何对象间距离是否小于某给定值
其中SDO_RELATE操作比较特殊,它通过mask参数来判断几何对象间是否满足某种空间关系,但是事实上如果都用参数来指定空间关系的话使用上就不太方便,因此,Oracle Spatial还提供了基于SDO_RELATE不同参数代表的不同空间关系的一些操作,如下表:
衍生自SDO_RELATE的空间操作
描述
SDO_ANYINTERACT
任意部分有相交
SDO_CONTAINS
SDO_COVEREDBY
SDO_COVERS
SDO_EQUAL
SDO_INSIDE
SDO_ON
SDO_OVERLAPBDYDISJOINT
SDO_OVERLAPBDYINTERSECT
SDO_OVERLAPS
SDO_TOUCH
下面我们看一些空间关系操作的大概用法,比如我用一个三角形去查询所有满足“INSIDE”关系的几何对象,我们可以通过以下两种等价的方式操作:
SQL> select continent from continent where sdo_inside(geom, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0,180,-90,180,90,0,0)))='TRUE';
CONTINENT
---------------------------------------
Australia
SQL> select continent from continent where sdo_relate(geom, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0,180,-90,180,90,0,0)), 'mask=INSIDE')='TRUE';
CONTINENT
---------------------------------------
Australia
图 13 判断和图示三角形满足一定空间关系的几何对象
虽然有一些比较方便的SDO_RELATE的衍生操作,不过SDO_RELATE支持更灵活的空间关系判断,比如以下的SQL语句可以查询和上面的三角形满足“OVERLAPBDYDISJOINT”关系、“INSIDE”关系及同时满足这两种关系的几何对象:
SQL> select continent from continent where sdo_relate(geom, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0,180,-90,180,90,0,0)), 'mask=OVERLAPBDYDISJOINT')='TRUE';
CONTINENT
---------------------------------------
North America
SQL> select continent from continent where sdo_relate(geom, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0,180,-90,180,90,0,0)), 'mask=INSIDE')='TRUE';
CONTINENT
---------------------------------------
Australia
SQL> select continent from continent where sdo_relate(geom, SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(0,0,180,-90,180,90,0,0)), 'mask=INSIDE+OVERLAPBDYDISJOINT')='TRUE';
CONTINENT
---------------------------------------
North America
Australia
- ArcSDE vs. Oracle Spatial 13
- ArcSDE vs. Oracle Spatial 10
- ArcSDE vs. Oracle Spatial 12
- ArcSDE vs. Oracle Spatial 11
- ArcSDE vs. Oracle Spatial 14
- ArcSDE vs. Oracle Spatial 16
- ArcSDE vs. Oracle Spatial 15
- ArcSDE vs. Oracle Spatial 17
- ArcSDE vs. Oracle Spatial 18
- 《ArcSDE vs. Oracle Spatial》 PDF
- ArcSDE vs. Oracle Spatial 1
- ArcSDE vs. Oracle Spatial 2
- ArcSDE vs. Oracle Spatial 3
- ArcSDE vs. Oracle Spatial 5
- ArcSDE vs. Oracle Spatial 6
- ArcSDE vs. Oracle Spatial 7
- ArcSDE vs. Oracle Spatial 9
- ArcSDE vs. oracle Spatial 4
- ArcSDE SDK Java 快速实践 8
- ArcSDE vs. Oracle Spatial 10
- ArcSDE vs. Oracle Spatial 12
- ArcSDE vs. Oracle Spatial 11
- ArcSDE vs. Oracle Spatial 14
- ArcSDE vs. Oracle Spatial 13
- ArcSDE vs. Oracle Spatial 16
- ArcSDE vs. Oracle Spatial 15
- 正则表达式
- ArcSDE vs. Oracle Spatial 17
- 《ArcSDE SDK Java 快速实践》 PDF
- ArcSDE vs. Oracle Spatial 18
- 《ArcSDE vs. Oracle Spatial》 PDF
- 切片地图服务使用Flex API编辑和更新切图