`
cryolite
  • 浏览: 580545 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle Spatial空间操作符

阅读更多
Oracle Spatial支持许多空间操作符以进行空间邻近分析,这些空间操作符类似于关系操作符(<、>和=),可以在SQL的WHERE子句中使用。
与几何操作不同的是操作符进行空间操作的对象必须有空间索引才行,也就是说空间操作符是与空间索引绑定的(具体来讲:至少空间操作符的第一个参数——table_geometry必须有空间索引)。

空间操作符的语法
<spatial_operator>
(
  table_geometry      IN SDO_GEOMETRY (或者 ST_GEOMETRY),
  query_geometry      IN SDO_GEOMETRY (或者 ST_GEOMETRY),
  [, parameter_string IN VARCHAR2
     [, tag           IN NUMBER ]]
)
= 'TRUE'

table_geometry: 空间操作符要运用到的表几何体数据列;
query_geometry: 查询位置,可以是另一个表的几何体数据列,也可以是一个绑定的变量,或者是一个动态创建的几何体对象;
parameter_string: 指定特定的空间操作符参数,有些操作符中是可选的;
tag:在某些特定空间操作符上需要的数值,相关参数只能在parameter_string参数中指定。

此外还有些限定:
1. table_geometry列必须已经空间索引列;
2. 操作符应该总是等于字符串'TRUE',所以,别考虑FALSE了;
3. 要操作的数据库表的列要么是oracle原生的SDO_GEOMETRY类型,要么是ST_GEOMETRY类型及其子类型(例如ST_POINT, ST_LINESTRING或者ST_POLYGON)


空间操作符的语义
当在SQL语句中使用空间操作符时,Oracle会找出那些空间操作符计算为TRUE的数据行。想想id>=20
一个例子:
SELECT COUNT(*)
FROM branches b, customers c
WHERE  b.id=1
AND SDO_WITHIN_DISTANCE
(c.location, b.location, 'DISTANCE=0.5 UNIT=MILE') = 'TRUE';


空间操作符如何计算
因为空间操作符依赖于空间索引,实际上大多数情况下,计算是一种两阶段过滤机制。

如图所示,空间操作符首先是要空间索引进行第一次计算,即primary filter。


空间操作符分类
按邻近分析的类型可分为:
1. 位置查询:从指定查询位置找出所有特定距离内的所有数据,即within distance操作符(SDO_WITHIN_DISTANCE);

2. 邻近查询:找出指定查询位置附近最近的那些邻居,即最近邻居(nearest-neighbor)操作符(SDO_NN);

3. 相交查询:找出与指定查询位置相交的所有邻居(Find neighbors that interact with or relate to a query location):主要操作符是SDO_RELATE,更简单的有SDO_FILTER(只是MBR的计算,因此也不需要Geometry Engine操作),此类操作符主要用于区域分析。此外还有对SDO_RELATE的简化版,如SDO_ANYINTERACT, SDO_CONTAINS, SDO_COVERS, SDO_COVEREDBY, SDO_EQUAL, SDO_INSIDE, SDO_ON, SDO_OVERLAPS, 和SDO_TOUCH
相交的分类模型,一个几何体由三部分组成:边界、内部和外部,
对于点:边界就是一个边界点
对于线:边界就是首尾两端的端点,
对于多边形:边界就是边界环 ring

SDO_RELATE操作符中定义的几种相交类型,Q即为查询几何体,A对应着数据表中的几何体字段。
这些相交类型分类是根据几何体之间内部和边界的情况进行分类的


空间连接(Spatial Joins)
对于两个都要空间信息的表进行空间操作符操作是很耗时的,例如:
SELECT COUNT(DISTINCT ct.id)
FROM competitors comp, customers ct
WHERE SDO_WITHIN_DISTANCE(ct.location, comp.location, 'DISTANCE=200 UNIT=METER') = 'TRUE';

查询结果1145,查询时间为6.11秒。

使用SDO_JOIN可以提高这类查询的效率。
SDO_JOIN
(
table1                    IN VARCHAR2,
col1                      IN VARCHAR2,
table2                    IN VARCHAR2,
col2                      IN VARCHAR2
[, parameter_string       IN VARCHAR2    DEFAULT NULL
[, preserve_join_order    IN NUMBER      DEFAULT 0
[, table1_partition       IN VARCHAR2    DEFAULT NULL,
[ , table2_partition      IN VARCHAR2    DEFAULT NULL]]]]
)
RETURNS SDO_ROWIDSET

返回值是一组ROWID对(<rowid1,rowid2>)的集合。
前面的查询改为:
SELECT COUNT(DISTINCT ct.id)
FROM competitors comp, customers ct,
     TABLE(
         SDO_JOIN(
             'competitors', 'location',
             'customers', 'location',
             'DISTANCE=200 UNIT=METER'
         )
     ) jn
WHERE ct.rowid=jn.rowid2 AND comp.rowid = jn.rowid1;

同样的结果,查询速度缩短到1.343秒。
  • 大小: 30.2 KB
  • 大小: 26.5 KB
分享到:
评论

相关推荐

    Oracle Spatial空间索引 解析

    3. 查询和分析算子及函数:为了实现对空间数据的有效查询与分析,Oracle Spatial提供了一系列特定的操作符和函数。这些工具不仅包括基本的空间操作,如距离计算、面积计算等,还支持空间关系的查询,例如点与多边形...

    Oracle Spatial用户指南

    Oracle Spatial提供了丰富的空间函数和操作符,如SDO_CONTAINS、SDO_RELATE等,用于执行空间关系查询。同时,它还支持空间分析,如缓冲区分析、最近邻查找、网络分析等,以满足各种地理空间应用的需求。 五、地理...

    Oracle Spatial9i介绍

    除了基本的数据存储之外,Oracle Spatial还提供了丰富的函数和操作符,可以用于执行空间数据之间的各种运算,如距离计算、空间关系判断等。这些操作使得开发者可以在SQL语句中直接处理空间数据,而无需编写额外的...

    oracle spatial 用户指南

    SPL允许用户使用标准SQL语句,结合地理空间函数和操作符,来查询和检索满足特定空间条件的数据。 5. **Geocoding**: 这是将地址转换为精确经纬度坐标的过程。Oracle Spatial提供了geocoding服务,使得用户可以将...

    Oracle Spatial Developer's Guide

    3. SQL扩展:熟悉SQL语法扩展,如SDO_GEOM函数和操作符,用于空间查询和分析。 4. 性能优化:了解如何设计高效的空间索引,以及调整数据库参数以提升空间操作的性能。 5. 安全性:学习如何设置权限和角色,确保空间...

    Oracle Spatial

    Oracle Spatial还提供了一套强大的空间函数和操作符,用于执行空间分析。例如,你可以计算两个地理对象之间的距离,找出位于特定区域内的对象,或者检查对象是否相互重叠。这些函数极大地丰富了SQL查询的能力,使得...

    Oracle_Spatial_的空间查询处理机制分析及优化

    原理部分会深入探讨Oracle Spatial如何使用空间索引、空间函数和空间操作符来提升查询效率,而技术支持部分则会涉及具体的优化策略,如如何选择合适的索引类型、如何构建和维护空间索引、以及如何利用Oracle提供的...

    Oracle Spatial空间数据库简介.ppt

    Oracle Spatial提供了丰富的空间函数和操作符,用于定义和检查空间对象之间的关系,例如“相交”、“包含”、“重叠”等。这些功能对于地理分析和决策支持至关重要。 6. 空间聚集函数: 类似于传统的数据库聚集...

    oracle spatial.zip

    在“oraclespatial.pdf”中,你可能会找到以下关键知识点: 1. **Oracle Spatial 概述**:这部分会介绍 Oracle Spatial 的核心功能,包括支持的空间数据类型、空间索引和查询语言(如 SQL 函数和操作符)。 2. **...

    采用Oracle Spatial基于OCI接口存取空间数据.pdf

    Oracle Spatial的架构包括模式(MDSYS),空间索引机制,以及一系列用于处理空间操作的函数和操作符。模式定义了空间数据的存储、语法和语义规则;空间索引机制则提高了空间查询的性能;而函数和操作符集则支持空间...

    Oracle Spatial 中文介绍

    3. **空间操作符**:Oracle Spatial 提供了一系列空间操作符,如 **Inside**、**Contains**、**Touch**、**Disjoint**、**Covers**、**CoveredBy**、**Equal**、**OverlapBoundary** 和 **WithinDistance** 等,这些...

    ORACLE SPATIAL 用户指南和参考.pdf

    - **查询与分析**:利用Oracle Spatial提供的函数和操作符来进行空间查询和分析。 ### 五、Oracle Spatial的技术特点 1. **高性能**:通过高效的空间索引技术实现快速的空间数据访问。 2. **可扩展性**:支持大量...

    基于Oracle Spatial多源异构空间数据一体化存储及管理方法研究.pdf

    - **空间分析的操作符和函数**:Oracle Spatial提供了丰富的操作符和函数用于处理空间数据,这包括空间关系、空间测量、空间变换等操作。 - **管理工具**:Oracle Spatial还包含了一系列的管理工具,这些工具支持...

    Oracle Spatial最佳实践

    Oracle Spatial 提供了丰富的函数和操作符来执行复杂的空间查询。 - **空间关系查询**:使用 `SDO_RELATE` 函数来确定两个几何体之间的空间关系,如相交、包含等。 - **距离查询**:使用 `SDO_DISTANCE` 函数来...

    基于Oracle Spatial技术的地理信息管理与优化.pdf

    【空间邻近分析】是Oracle Spatial提供的功能之一,通过使用空间操作符(如距离计算、缓冲区分析等),可以快速查找空间上相邻或接近的对象,这对于地理空间决策支持和事件检测非常重要。这提高了系统的稳定性和数据...

    GIS数据的一体化存储管理在Oracle Spatial中的实现方法.pdf

    3. **操作符和函数**:这些是执行空间查询和操作的基础,如区域相交、空间合并和连接等。 4. **管理工具**:提供了一系列工具用于创建、维护和管理空间数据,确保数据的有效管理。 Oracle Spatial 支持两种表达...

    ORACLE 10 g spatial的使用方法简介

    9. 组件构成:Oracle Spatial包含了描述空间数据的方案、空间索引机制、用于查询和分析的空间操作符和函数,以及管理模块。这些组件共同协作,确保高效、准确地处理空间数据。 通过Oracle 10g Spatial,开发者和...

    利用OCI与OLE开发Oracle空间数据库.pdf

    - **操作符和函数集**:用于处理空间区域的交集、合并和连接等操作。 - **管理工具**:帮助用户管理和维护空间数据。 Oracle Spatial支持两种空间元素的模型: - **关系模型**:使用多行记录和Number类型的字段表示...

    Oracle9i空间数据存储的研究.pdf

    对象数据类型、特定的索引方法以及这些类型上的操作符共同构成了Oracle Spatial的对象-关系模型,简化了空间实体的存储和操作。 2. 空间数据的存储模式: Oracle Spatial提供了多种方式来存储空间数据,确保高效和...

Global site tag (gtag.js) - Google Analytics