当前位置: 首页 > news >正文

Oracle_spatial的空间操作符介绍

空间操作符

一、主要空间操作符

1、SDO_FILTER

SDO_FILTER(geometry1, geometry2, param);

判断两个几何体是否有相交

SELECT c.mkt_id, c.name

 FROM cola_markets c

 WHERE SDO_FILTER(c.shape,

                  SDO_GEOMETRY(2003,

                               NULL,

                               NULL,

                               SDO_ELEM_INFO_ARRAY(1, 1003, 3),

                               SDO_ORDINATE_ARRAY(4, 6, 8, 8))) = 'TRUE';

2、SDO_JOIN

SDO_JOIN(table_name1, column_name1, table_name2, column_name2, params,

preserve_join_order) RETURN SDO_ROWIDSET;

 

SELECT /*+ ordered */

 a.name, b.name

 FROM TABLE(SDO_JOIN('COLA_MARKETS',

                      'SHAPE',

                      'COLA_MARKETS',

                      'SHAPE',

                      'mask=ANYINTERACT')) c,

       cola_markets a,

       cola_markets b

 WHERE c.rowid1 = a.rowid

   AND c.rowid2 = b.rowid

 ORDER BY a.name;

3、SDO_NN

SDO_NN(geometry1, geometry2, param [, number]);

在指定的距离内,按顺序返回离的最近的。

 

性能调优参数             

sdo_num_res 指定返回离指定点最近的两个市场

sdo_batch_size 指定了一次批量提取多少条记录进行对比

 

SELECT /*+ INDEX(c cola_spatial_idx) */

 c.mkt_id, c.name

 FROM cola_markets c

 WHERE SDO_NN(c.shape,

              sdo_geometry(2001,

                           NULL,

                           sdo_point_type(10, 7, NULL),

                           NULL,

                           NULL),

              'sdo_num_res=2') = 'TRUE';

 

SELECT /*+ INDEX(c cola_spatial_idx) */

 c.mkt_id, c.name

 FROM cola_markets c

 WHERE SDO_NN(c.shape,

              sdo_geometry(2001,

                           NULL,

                           sdo_point_type(10, 7, NULL),

                           NULL,

                           NULL),

              'sdo_batch_size=3') = 'TRUE'

   AND c.name < 'cola_d'

   AND ROWNUM <= 2;

4、SDO_NN_DISTANCE

SDO_NN_DISTANCE(number);

Number必须与sdo_nn操作符的最后一个参数保持一致。

 Sdo_nn操作符是通过计算距离来识别客户的,我们可以通过sdo_nn_distance辅助操作符来获取这些距离。

   在使用该操作符时,必须指定一个性能调优参数,sdo_num_res或sdo_batch_size,如果不知道如何设置sdo_batch_size的值,就将其设为0,索引会在内部使用合适的值。

SELECT /*+ INDEX(c cola_spatial_idx) */

 c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist

 FROM cola_markets c

 WHERE SDO_NN(c.shape,

              sdo_geometry(2001,

                           NULL,

                           sdo_point_type(10, 7, NULL),

                           NULL,

                           NULL),

              'sdo_num_res=2',

              1) = 'TRUE'

 ORDER BY dist;

5、SDO_RELATE

SDO_RELATE(geometry1, geometry2, param);

判断两个几何体的关系

SELECT a.gid

 FROM polygons a, query_polys B

 WHERE B.gid = 1

   AND SDO_RELATE(A.Geometry, B.Geometry, 'mask=touch') = 'TRUE'

UNION ALL

SELECT a.gid

 FROM polygons a, query_polys B

 WHERE B.gid = 1

   AND SDO_RELATE(A.Geometry, B.Geometry, 'mask=coveredby') = 'TRUE';

 

SELECT c.mkt_id, c.name

 FROM cola_markets c

 WHERE SDO_RELATE(c.shape,

                  SDO_GEOMETRY(2003,

                               NULL,

                               NULL,

                               SDO_ELEM_INFO_ARRAY(1, 1003, 3),

                               SDO_ORDINATE_ARRAY(4, 6, 8, 8)),

                  'mask=anyinteract') = 'TRUE';

 

6、SDO_WITHIN_DISTANCE

SDO_WITHIN_DISTANCE(geometry1, aGeom, params);

返回与指定点相距指定的距离内的某表的几何对象

SELECT c.name

 FROM cola_markets c

 WHERE SDO_WITHIN_DISTANCE(c.shape,

                           SDO_GEOMETRY(2003,

                                        NULL,

                                        NULL,

                                        SDO_ELEM_INFO_ARRAY(1, 1003, 3),

                                        SDO_ORDINATE_ARRAY(4, 6, 8, 8)),

                           'distance=10') = 'TRUE';

二、关系操作符

语法:

操作符OVERLAPBDYDISJOINT(geometry1, geometry2);

1、SDO_ANYINTERACT

2、SDO_CONTAINS

3、SDO_COVEREDBY

4、SDO_COVERS

5、SDO_EQUAL

6、SDO_INSIDE

7、SDO_ON

8、SDO_OVERLAPBDYDISJOINT

9、SDO_OVERLAPBDYINTERSECT

10、SDO_OVERLAPS

11SDO_TOUCH

 

空间函数与操作符的对比

1、 空间操作符使用的表必须有空间索引;

空间操作符执行速度比函数快,因此可以采用操作符的情况下就使用操作符

相关文章:

  • 用JavaScript代码实现Excel表格的办法
  • 今天开始学习python
  • Robotium入门
  • permutation II (boss出来了)
  • Nginx在Window下的使用笔记
  • linux编程之GDB调试
  • 数组、指针
  • 架构师速成8.2-架构师要懂产品
  • Javascript设计模式学习之Observer(观察者)模式
  • python用sybase自带的sybpydb模块访问数据库
  • 三种对象传参和ModelDriven的原理
  • netty demo
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题...
  • SQL Server中查看哪些游标未释放
  • 网络传输文件的问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android Studio:GIT提交项目到远程仓库
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Babel配置的不完全指南
  • chrome扩展demo1-小时钟
  • Create React App 使用
  • gcc介绍及安装
  • IDEA常用插件整理
  • Joomla 2.x, 3.x useful code cheatsheet
  • MD5加密原理解析及OC版原理实现
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 电商搜索引擎的架构设计和性能优化
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 跳前端坑前,先看看这个!!
  • 自定义函数
  • 阿里云重庆大学大数据训练营落地分享
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (70min)字节暑假实习二面(已挂)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (六)激光线扫描-三维重建
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四) Graphivz 颜色选择
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)VC++中ondraw在什么时候调用的
  • .net的socket示例
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [BT]BUUCTF刷题第4天(3.22)
  • [BZOJ 3282] Tree 【LCT】
  • [C++]指针与结构体
  • [dart学习]第四篇:函数
  • [HDU3710]Battle over Cities