OracleSpatial函数实例
Oracle Spatial中SDO_GEOMETRY类型:
CREATE TYPE SDO_GEOMETRY AS OBJECT(
SDO_GTYPE NUMBER,--几何类型,如点线面
SDO_SRID NUMBER,--几何的空间参考坐标系
SDO_POINT SDO_POINT_TYPE,--如果几何为点类型,则存储点坐标,否则为空
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,--定义如何理解SDO_ORDINATES中的坐标序列
SDO_ORDINATES SDO_ORDINATE_ARRAY--存储实际坐标,以X,Y以及不同点之间以逗号隔开
)
两个对象之间关系:
RELATE
SDO_GEOM.RELATE --确定两个对象的交互方式
eg:
SDO_GEOM.RELATE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,mask IN VARCHAR2, geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN VARCHAR2;
SDO_GEOM.RELATE(geom1 IN SDO_GEOMETRY,mask IN VARCHAR2,geom2 IN SDO_GEOMETRY, tol IN NUMBER)RETURN VARCHAR2;--tol容许的精度范围
mask:
ANYINTERACT:geom2落在geom1面上,包括边上
CONTAINS:geom2完全包含在geom1几何对象中,并且两个几何对象的边没有交叉
COVEREDBY:geom1完全包含在geom2中,并且两个几何对象的边有一个或多个点相互重叠
COVERS:geom2完全包含在geom1中,并且两个几何对象的边有一个或多个点相互重叠
DISJOINT:两个几何没有重叠交叉点,也没有共同的边
EQUAL:两个几何相等
INSIDE:geom1完全包含在geom2几何对象中,并且两个几何对象的边没有交叉
ON:geom1的边和内部的线完全在geom2上
OVERLAPBDYDISJOINT:两个几何对象交迭,但是边没有交叉
OVERLAPBDYINTERSECT:两个几何对象叫迭,并且边有部分交叉
TOUCH:两个结合对象有共同的边,但没有交叉
WITHIN_DISTANCE
SDO_GEOM.WITHIN_DISTANCE --确定两个几何是否在彼此指定的距离之内
eg:
SDO_GEOM.WITHIN_DISTANCE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,dist IN NUMBER, geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY[, units IN VARCHAR2]) RETURN VARCHAR2;
SDO_GEOM.WITHIN_DISTANCE(geom1 IN SDO_GEOMETRY,dist IN NUMBER,geom2 IN SDO_GEOMETRY,tol IN NUMBER[, units IN VARCHAR2]) RETURN VARCHAR2;
验证:
VALIDATE_GEOMETRY_WITH_CONTEXT
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT --确定几何是否有效,如果几何无效,则返回上下文信息
eg:
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(theGeometry IN SDO_GEOMETRY, theDimInfo IN SDO_DIM_ARRAY,conditional IN VARCHAR2 DEFAULT 'TRUE') RETURN VARCHAR2;
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(theGeometry IN SDO_GEOMETRY,tolerance IN NUMBER,conditional IN VARCHAR2 DEFAULT 'TRUE') RETURN VARCHAR2;
VALIDATE_LAYER_WITH_CONTEXT
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT --确定存储在列中的所有几何是否有效,并返回有关任何无效几何的上下文信息
eg:
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(geom_table IN VARCHAR2,geom_column IN VARCHAR2,result_table IN VARCHAR2,commit_interval IN NUMBER DEFAULT -1,conditional IN VARCHAR2 DEFAULT 'TRUE');
单对象操作:
SDO_ARC_DENSIFY
SDO_GEOM.SDO_ARC_DENSIFY --简化,将圆弧简化成由直线组成的近似多段线;将圆近似成N多边形
eg:
SDO_GEOM.SDO_ARC_DENSIFY(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY, params IN VARCHAR2) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_ARC_DENSIFY(geom IN SDO_GEOMETRY,tol IN NUMBER, params IN VARCHAR2) RETURN SDO_GEOMETRY;
SDO_AREA
SDO_GEOM.SDO_AREA --计算多边形的面积
eg:
SDO_GEOM.SDO_AREA(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY [, unit IN VARCHAR2]) RETURN NUMBER;
SDO_GEOM.SDO_AREA(geom IN SDO_GEOMETRY,tol IN NUMBER [, unit IN VARCHAR2]) RETURN NUMBER;
SDO_BUFFER
SDO_GEOM.SDO_BUFFER --在几何体外部或内部生成缓冲区
eg:
SDO_GEOM.SDO_BUFFER(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY,dist IN NUMBER[, params IN VARCHAR2]) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_BUFFER(geom IN SDO_GEOMETRY,dist IN NUMBER,tol IN NUMBER[, params IN VARCHAR2]) RETURN SDO_GEOMETRY;
SDO_CENTROID
SDO_GEOM.SDO_CENTROID --计算多边形的质心
eg:
SDO_GEOM.SDO_CENTROID(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_CENTROID(geom1 IN SDO_GEOMETRY,tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_CONVEXHULL
SDO_GEOM.SDO_CONVEXHULL --返回几何对象的凸包的多边形类型对象
eg:
SDO_GEOM.SDO_CONVEXHULL(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_CONVEXHULL(geom1 IN SDO_GEOMETRY, tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_LENGTH
SDO_GEOM.SDO_LENGTH --计算几何的长度或周长
eg:
SDO_GEOM.SDO_LENGTH(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY[, unit IN VARCHAR2][, count_shared_edges IN NUMBER]) RETURN NUMBER;
SDO_GEOM.SDO_LENGTH(geom IN SDO_GEOMETRY,tol IN NUMBER[, unit IN VARCHAR2] [, count_shared_edges IN NUMBER]) RETURN NUMBER;
SDO_MAX_MBR_ORDINATE
SDO_GEOM.SDO_MAX_MBR_ORDINATE --返回几何对象最小边界矩形的指定纵坐标的最大值
eg:
SDO_GEOM.SDO_MAX_MBR_ORDINATE(geom IN SDO_GEOMETRY,ordinate_pos IN NUMBER) RETURN NUMBER;
SDO_GEOM.SDO_MAX_MBR_ORDINATE(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY,ordinate_pos IN NUMBER) RETURN NUMBER;
SDO_MIN_MBR_ORDINATE
SDO_GEOM.SDO_MIN_MBR_ORDINATE --返回几何对象最小边界矩形的指定纵坐标的最小值
eg:
SDO_GEOM.SDO_MIN_MBR_ORDINATE(geom IN SDO_GEOMETRY,ordinate_pos IN NUMBER ) RETURN NUMBER;
SDO_GEOM.SDO_MIN_MBR_ORDINATE(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY,ordinate_pos IN NUMBER) RETURN NUMBER;
SDO_MBR
SDO_GEOM.SDO_MBR --返回几何对象最小边界矩形
eg:
SDO_GEOM.SDO_MBR(geom IN SDO_GEOMETRY[, dim IN SDO_DIM_ARRAY]) RETURN SDO_GEOMETRY;
SDO_POINTONSURFACE
SDO_GEOM.SDO_POINTONSURFACE --返回一个保证在多边形表面上的点
eg:
SDO_GEOM.SDO_POINTONSURFACE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_POINTONSURFACE(geom1 IN SDO_GEOMETRY,tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_VOLUME
SDO_GEOM.SDO_VOLUME --计算三维立体几何体的体积
eg:
SDO_GEOM.SDO_VOLUME(geom IN SDO_GEOMETRY,tol IN NUMBER[, unit IN VARCHAR2]) RETURN NUMBER;
双目标操作:
SDO_CLOSEST_POINTS
SDO_GEOM.SDO_CLOSEST_POINTS --计算两个几何之间的最小距离,并返回距离最小时在几何上的两点
eg:
SDO_GEOM.SDO_CLOSEST_POINTS(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY,tolerance IN NUMBER,unit IN VARCHAR2,dist OUT NUMBER,geoma OUT SDO_GEOMETRY,geomb OUT SDO_GEOMETRY);
SDO_DISTANCE
SDO_GEOM.SDO_DISTANCE --计算两个几何对象之间的距离
eg:
SDO_GEOM.SDO_DISTANCE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY[, unit IN VARCHAR2]) RETURN NUMBER;
SDO_GEOM.SDO_DISTANCE(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY,tol IN NUMBER [, unit IN VARCHAR2]) RETURN NUMBER;
SDO_DIFFERENCE
SDO_GEOM.SDO_DIFFERENCE --返回几何对象(两个几何对象的拓扑差异,MINUS操作)
eg:
SDO_GEOM.SDO_DIFFERENCE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_DIFFERENCE(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY, tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_INTERSECTION
SDO_GEOM.SDO_INTERSECTION --返回几何对象(两个几何对象的拓扑交点,AND操作)
eg:
SDO_GEOM.SDO_INTERSECTION(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_INTERSECTION(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY, tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_UNION
SDO_GEOM.SDO_UNION --返回几何对象(两个几何对象的拓扑结合,OR操作)
eg:
SDO_GEOM.SDO_UNION(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY, geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_UNION(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY, tol IN NUMBER ) RETURN SDO_GEOMETRY;
SDO_XOR
SDO_GEOM.SDO_XOR --返回几何对象(两个几何对象的拓扑对称差异,XOR操作)
eg:
SDO_GEOM.SDO_XOR(geom1 IN SDO_XOR,dim1 IN SDO_DIM_ARRAY,geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;
SDO_GEOM.SDO_XOR(geom1 IN SDO_GEOMETRY,geom2 IN SDO_GEOMETRY, tol IN NUMBER ) RETURN SDO_GEOMETRY;
实例:

--wkt转geometry
select sdo_geometry(TO_CHAR(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5)).get_wkt())) from dual
--wkt转geometry
select SDO_UTIL.from_wktgeometry(TO_CHAR(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5)).get_wkt())) from dual
--geometry转wkt
select TO_CHAR(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5)).get_wkt()) from dual
--geometry转wkt
select SDO_UTIL.to_wktgeometry_varchar(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5))) from dual --geometry转wkt(不受oracle字段只能少于4000个字符长度影响) select SDO_UTIL.to_wktgeometry(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5))) from dual


--合并
select SDO_GEOM.SDO_UNION(SDO_GEOMETRY('POLYGON((1 1,5 1,5 5,1 5,1 1))'),SDO_GEOMETRY('POLYGON((2 2,2 3,3 3,3 2,2 2))'),0.001 ) from dual;
--缓冲区
select SDO_UTIL.to_wktgeometry_varchar(SDO_GEOM.SDO_BUFFER(SDO_GEOMETRY('POLYGON((1 1,5 1,5 5,1 5,1 1))'),1000,0.01)) from dual;
--点在面内
select SDO_GEOM.RELATE(SDO_GEOMETRY('POLYGON((1 1,5 1,5 5,1 5,1 1))'),'CONTAINS',SDO_GEOMETRY('POINT(12 2)'), 0.01) from dual; --对象相交 select SDO_GEOM.RELATE(SDO_GEOMETRY('POLYGON((0 0,0 1,1 1,1 0,0 0))'),'ANYINTERACT',SDO_GEOMETRY('POLYGON((0.5 0.5,0.5 1.5,1.5 1.5,1.5 0.5,0.5 0.5))'), 0.01) from dual;

OracleSpatial函数实例的更多相关文章
- JavaScript学习笔记-函数实例
函数实例 var p = { a:15, b:'5', f1:function(){ var self = this; console.log(self.a+self.b); f2(); functi ...
- python迭代器与iter()函数实例教程
python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...
- 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
/* ============================================================================ Name : test.c Author ...
- 程序4-6 utime函数实例
//http://blog.chinaunix.net/uid-24549279-id-71355.html /* ========================================== ...
- SQL FORMAT() 函数实例
FORMAT()函数用于对字段的显示进行格式化. SQL FORMAT() 语法 SELECT FORMAT(column_name,format) FROM table_name; 参数 描述 co ...
- 程序4-4 chmod函数实例
//http://blog.chinaunix.net/uid-24549279-id-71355.html /* ========================================== ...
- 程序4-3 umask函数实例
//http://blog.chinaunix.net/uid-24549279-id-71355.html /* ========================================== ...
- 程序4-2 access函数实例
//http://blog.chinaunix.net/uid-24549279-id-71355.html /* ========================================== ...
- PHP截取字符串函数substr()函数实例用法详解
在PHP中有一项非常重要的技术,就是截取指定字符串中指定长度的字符.PHP对于字符串截取可以使用PHP预定义函数substr()函数来实现.下面就来介绍一下substr()函数的语法及其应用. sub ...
随机推荐
- LintCode_514 Paint Fence
题目 here is a fence with n posts, each post can be painted with one of the k colors.You have to paint ...
- jeecms9自定义标签以及使用新创建的数据库表
转载 https://blog.csdn.net/nice_meng/article/details/89179089 本系统使用的是jeecmsv9版本,收集网上知识后,进行个人汇总 首先,自己创建 ...
- GIT → 02:Git和Svn比较
2.1 SVN介绍 2.1.1 SVN简介 SVN 属于集中式版本管理控制系统,服务器中保存了所有文件的不同版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新.Subversio ...
- django中的聚合索引
Django(元信息)元类建索引 ORM查询(sql优化)优化 自定义聚合函数 Django的元类建索引————索引:索引的一个主要目的就是加快检索表中数据,索引是经过某种算法优化过的,因而查找次数要 ...
- js对象类型判断工具
对象类型判断工具 /** *类功能:对象类型判断工具 **/ var TypeUtil = { /** *方法说明:是否是数组 **/ isArray: function (obj) {//是否是数组 ...
- oracle-视图-索引-序列
Oracle提高查询性能 一 视图 视图是一个虚拟表,就是对select查询的结果取个名字.其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值 ...
- iOS播放器横竖屏切换
http://www.cocoachina.com/cms/wap.php?action=article&id=20292 http://feihu.me/blog/2015/how-to-h ...
- day36 10-Hibernate中的事务:解决丢失更新
演示hibernate如何产生丢失更新的 丢失更新是怎么玩的?首先两个事务先都把它查出来. A事务里面去修改的数据没了,被B事务覆盖掉了.这是被B事务提交覆盖,B事务回滚也能覆盖.这就是丢失更新的效果 ...
- js实现HashTable
1.哈希表使用键值对进行的数据储存,在数据的存储位置和它的关键字之间建立一一对应的关系,从而使关键字和结构中的一个唯一的存储位置相对应,所以在检索数据时 只需要根据这个关系便可以快速定位到要找的数据. ...
- LUOGU P2587 [ZJOI2008]泡泡堂
传送门 解题思路 刚开始先写了个田忌赛马的贪心,就是要是打不过就拿最弱的送死,30分...后来瞄了眼题解,发现这样是错的,比如说这样的数据 : 3 3 2 3 1 如果用田忌赛马的话,让2-3 3-1 ...