ArcSDE vs. Oracle Spatial 13
2010-06-08 17:28
246 查看
I. 空间关系运算
以上两个章节是必不可少的基础,涉及到空间数据在数据库中的存储和通过索引加速空间数据的获取。从这句话也可以看出,后续的章节并不是必须的,也就是说某些基于空间数据的应用可能并不需要诸如空间关系判断、几何对象处理等功能。这并不是说这些功能就用不着了,而是这些功能并不一定需要在数据库端执行。比如基于ArcSDE,这些空间算法和功能在ArcGIS的产品线中无处不在,很多时候都不会把这些功能放到数据库上去。 · Oracle Spatial
在Oracle Spatial中,主要的空间关系操作在下表中列出: 空间操作 | 描述 |
SDO_FILTER | 主过滤,判断哪些几何对象可能和给定的几何对象相交 |
SDO_JOIN | 基于一定空间关系的表连接 |
SDO_NN | 查询离某个几何对象最近的几何对象 |
SDO_NN_DISTANCE | 查询离某个几何对象最近的几何对象与当前对象的距离 |
SDO_RELATE | 判断两个几何对象是否满足某种空间关系 |
SDO_WITHIN_DISTANCE | 判断两个几何对象间距离是否小于某给定值 |
衍生自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 15
- ArcSDE vs. Oracle Spatial 3
- ArcSDE vs. Oracle Spatial 10
- ArcSDE vs. Oracle Spatial 17
- 《ArcSDE vs. Oracle Spatial》 PDF
- ArcSDE vs. Oracle Spatial 16
- ArcSDE vs. Oracle Spatial 5
- How does ArcSDE use Oracle Spatial? arcsde怎么使用oracle spatial
- Oracle Spatial & ArcSDE
- VS2013下C++调用ocilib访问oracle
- Greenplum技术浅析--vs oracle RAC
- HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库
- oracle VS mysql 的分页查询
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- oracle实验13:单行函数-数字函数
- oracle 03-13
- 不安装Oracle客户端进行的ArcSDE的直连配置步骤
- SQL Server vs Oracle 简单语法比较
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- VS13下遇到的编译错误:cl.exe exited with code 2