Oracle Spatial中SDO_Geometry详细说明
转自:https://blog.csdn.net/u010865734/article/details/74526451
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw 、ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等等。
关于这几种方式的各自的优缺点不是主要的探讨的方向,这些我们可以通过ArcGIS中的ArcGIS Server Help得到相关的帮助。这里主要是学习关于基于Oracle Spatial的存储方式,通过这种存储方式几何列Shape的字段类型为mdsys.sde_geometry类型。
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_ORDINATE_ARRAY);
其中sdo_geometry AS OBJECT ,标识该类型为对象类型。开始我们可以想想它为ArcObjects中的Geometry对象(本来要素的shape字段中的对象就是Geometry),而不要理解他是怎么样组织的。至于该类型中的SDO_POINT_TYPE、SDO_ELEM_INFO_ARRAY、SDO_ORDINATE_ARRAY也是Oracle Spatial自定义的类型和 sdo_geometry 是一样的。
现在对sdo_geometry 类型中的各个参数简单的介绍:
1、SDO_GTYPE :表示要存储的几何类型,如点线面。它是通过 NUMBER类型来表达的;
2、SDO_SRID :几何的空间参考坐标系,类型也为 NUMBER;
3、SDO_POINT :如果几何类型点类型的话,就是存储点坐标,否则为空。oracle自定义的SDO_POINT_TYPE类型;
4、SDO_ELEM_INFO :定义要如何理解SDO_ORDINATES中的坐标串的;
5、SDO_ORDINATES :存储实际坐标的,以X、Y以及不同点之间都是逗号隔开;
下面将详细介绍这些字段参数的含义
一、SDO_GTYPE
SDO_GTYPE值是有四位数字组成的,它们的格式为:dltt 。
其中,d 表示几何的维数。如二维、三维对应的d=2和d=3;
l 定义了LRS。一般l=0;
tt 定义了地理对象的类型。现在使用从00到07,如tt=01代表为单点;
下面就是t=2的二维几何类型,SDO_GTYPE参数值具体,如 图1:
对于一个给定的层,所有的地理对象必须都是相同的维度,不能将二维与三维的数据放在一个层里。
二、SDO_SRID
SDO_SRID定义了空间坐标参考系统。如果SDO_SRID为null,则没有指定坐标系统,如果SDO_SRID不为null,那么它的值必须在在MDSYS.CS_SRS 表中的 SRID 列有对应的值,而且它的值必须插入USER_SDO_GEOM_METADATA视图中。MDSYS.CS_SRS 表参考 图3
三、 SDO_POINT
SDO_POINT类型的构造方法为:sdo_point_type(x,y,z),其中x,y,z类型为Double和Int都可
SDO_POINT字段定义为含有X、Y、Z属性的SDO_POINT_TYPE类型。如果几何类型为点类型的话,SDO_ELEM_INFO 和SDO_ORDINATES对应的值都为Null,SDO_POINT 不为空。其它情况下,SDO_POINT会被Spatial所忽略即设为Null。如果这个层只有点对象,那么推荐你将其保存在SDO_POINT属性中。 SDO_POINT_TYPE类型的定义如下:
CREATE TYPE sdo_point_type AS OBJECT (
X NUMBER, //X坐标值
Y NUMBER, //y坐标值
Z NUMBER); //z坐标值
四、SDO_ELEM_INFO
SDO_ELEM_INFO类型的构造方法为:sdo_elem_info_array(a,b.c),其中a,b.c为Number类型。
SDO_ELEM_INFO是理解和掌握SDO_Geometry的重点和难点,SDO_ELEM_INFO 定义了如何理解SDO_ORDINATES中的坐标字符串属性。
SDO_ELEM_INFO每三个数字组合为一个SDO_ELEM_INFO属性单元(具体可以结合下面的例子理解)。
每个SDO_ELEM_INFO属性单元由:SDO_STARTING_OFFSET、SDO_ETYPE 和SDO_INTERPRETATION 组成。下面介绍一下这三个数字的具体含义:
4.1、SDO_STARTING_OFFSET:声明了组成当前几何片段的第一个坐标在SDO_ORDINATES数组中的坐标序号。坐标序号是从1开始起算的而非从0开始。这里的SDO_ORDINATES就是sdo_geometry 中的坐标序列,坐标序列是已逗号隔开的数字,具体的计算如:sdo_ordinate_array(1,4,6,7,8,9)中如果以'6'开始几何片段的话,坐标序号SDO_STARTING_OFFSET=3。(具体参考下面的例子理解)
4.2、SDO_ETYPE :声明元素的类型。可结合 SDO_STARTING_OFFSET和SDO_ETYPE 表来理解.
SDO_ETYPE 值 = 1, 2, 1003,或2003,说明几何为简单的几何类型。可以全部按SDO_ELEM_INFO 属性单元【即三个以逗号隔开的数】来理解sdo_ordinate_array中的坐标序列。
特别说明:SDO_ETYPE 值 = 1003 ,假如几何类型为面,则表示为外多边形环(以逆时针顺序)
SDO_ETYPE 值 = 2003 ,假如几何类型为面,则表示为内多边形环(以顺时针顺序)
SDO_ETYPE 值 = 4,1005或2005,说明几何为组合元素,往往第一个三数字组不是SDO_ELEM_INFO 属性单元,而是为了说明组合元素的信息。具体可以参见下面 复杂多义线 和 复杂多边形的例子。
4.3、SDO_INTERPRETATION:有两种可能的意思,依赖地SDO_ETYPE是否是组合元素。如果SDO_ETYPE 值 = 4,1005或2005,标识的是有多少组合部分,具体参考 复杂多义线 和 复杂多边形 的例子。如果SDO_ETYPE 值 = 1, 2, 1003,或2003,标识决定了元素坐标队列的翻译顺序。
SDO_STARTING_OFFSET和SDO_ETYPE 表 如下图4:
SDO_ORDINATES类型的构造方法为:sdo_ordinate_array(x1,y1,x2,y2,……),其中x1,y1类型等为Double和Int都可。
用SDO_GEOMETRY定义该矩形,如何确定sdo_geometry()构造方法中的各个参数值。详细解释如下:
SDO_GTYPE = 2003;2003中的2表示二维数据,2003中的3表示表示多边形。具体参考 图1
SDO_ELEM_INFO = (1, 1003, 3).;在属性单元SDO_ELEM_INFO (1,1003,3)中的最后一个3表示该几何为矩形,具体参考 图4 。
---因为它是矩形且为二维所以它的构造方法为:sdo_point_type(左下坐标,右上坐标)。
SDO_ORDINATES = (1,1, 5,7). 定义了具体的坐下坐标和右上坐标的坐标序列。
6.2、有岛多边形:
有岛多边形的具体几何形状和坐标,如下图:
用SDO_GEOMETRY定义该多边形,如何确定sdo_geometry()构造方法中的各个参数值。详细解释如下:
SDO_GTYPE = 2003;---2003中的2表示二维数据,2003中的3表示表示多边形。具体参考 图1
SDO_ELEM_INFO = (1,1003,1, 19,2003,1); ---有两个三元组SDO_ELEM_INFO属性元素。具体参考 图4
---其中1003表明对应的坐标序列组成的几何A为外多边形环(顺时针);而2003表明对应的坐标序列组成的几何B为内多边形环(逆时针)。
---19 表示几何B坐标序列开始的位置,也就是说从19开始的几何坐标组成几何B,而1到18组成几何A。
下图描述的是一个由一条直线和一条曲线构成的复杂多义线。图中出现了4个点,(10,10)和(10,14)点表示的是直线 ;10,14), (10,6), 和 (14,10) 描述的是圆弧曲线:
用SDO_GEOMETRY定义该复杂多义线,如何确定sdo_geometry()构造方法中的各个参数值。详细解释如下:
SDO_GTYPE = 2002;2002中的2表示二维数据,第二个2表示表示一条或多条直线段。具体参考 图1。
SDO_ELEM_INFO = (1,4,2, 1,2,1, 3,2,2). ---有三个三元组,其中后两个是SDO_ELEM_INFO属性元素三元组,前一个为表述组合。具体参考 图4。
---第一个三元组【1,4,2】,根据4可以得到是个描述三元组,2表示有两个几何元素组成,即后两个三元组描述各自的几何A和几何B。
---第二个三元组【3,2,2】,为SDO_ELEM_INFO属性元素三元组,它描述的是几何B。根据 图4可以得到它是一条曲线段,该几何B的起点和几何A终点节点重合。
SDO_ORDINATES = (10,10, 10,14, 6,10, 14,10);---坐标系列
Oracle Spatial中SDO_Geometry详细说明相关推荐
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- Oracle Spatial中上载GIS空间数据方法研究
Oracle Spatial中上载GIS空间数据方法研究 作者:佚名 文章来源:博客中国 点击数:6873 更新时间:2006-8-24 摘要:采用Oracle Spatial 存储 ...
- OCCI读写Oracle Spatial的SDO_Geometry
1.使用Oracle OTT工具生成对应的C++类. 1.1设置ORACLE_HOME:服务器端安装目录. 设置客户端安装目录,提示什么java错误. 暂时不管了. 1.2写一个intype文件tes ...
- 投影坐标系单位oracle,在Oracle Spatial中增加Web Mercator投影坐标系
参考资料: 1. 最重要的参考文章,基本上就是按这个做的!!!:https://www.inf.unibz.it/dis/wiki/doku.php?id=students:minnerebner:o ...
- 使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)
首先,这个需要使用ODAC,也就是Oracle.DataAccess.dll,新出的托管Oracle.ManagedDataAccess.dll不支持Object Type,无法使用 ODAC下载地址 ...
- java sdo_geometry,批量修改oracle数据库中sdo_geometry字段的SRID
1,在user_sdo_geom_metadata表中插入或者修改需要修改表的名称,表中的geometry字段名称和srid.具体可参考该表的字段. INSERT INTO USER_SDO_GEOM ...
- Oracle Spatial 空间分析之缓冲区分析
缓冲区分析需要主要使用Oracle Spatial 空间分析操作函数,下面会对其各个参数进行详细讲解,资料有来源于网上与书上. 使用Oracle Spatial 空间分析操作函数--SDO_WITHI ...
- oracle spatial java 类库,[ Oracle Spatial 系列 ] 之一 SDO_Geometry详细说明(ZZ)
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- Oracle Spatial的空间查询,代码操作
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
最新文章
- HttpClient4.4 登录知乎(详细过程)
- 深入浅出 JavaScript 数组 v0.5
- 引用参考文献_引用参考文献时应注意些什么
- 微信朋友圈删除后服务器还有吗,删了的朋友圈还可以找回来吗
- Ubuntu 16.04配置CUDA 9.0+cudnn 7.0以及解决Nvidia显卡导致黑屏问题
- 服务器java 客户端c_Java客户端和C ++服务器通过TCP套接字发送和接收
- Python XML操作处理
- linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,新型linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍.doc...
- ArcGIS Pro脚本工具(10)——从图层生成.stylx样式符号
- 备案指的是域名还是服务器?
- 半监督学习:主动学习、纯半监督学习和直推学习区别和联系
- Split过程源码分析
- 2019年美国大学生数学建模注意事项(摘https://www.comap.com/undergraduate/contests/)(重点:论文提交方式)
- nginx 连接php
- python之迷宫小游戏
- python画画bup_用Python编写一个简单的FUSE文件系统的教程
- halcon算子中文对照
- NOIP2016普及组复赛第一题——买铅笔
- 【QT】判断鼠标按键
- 下载 | mqtt4aliyun 阿里云 IoT 物联网 设备模拟器 Mac , Windows版本
热门文章
- 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
- deepin 录音器
- Elastic stack 技术栈学习(三)—— 在Windows10系统下部署ELK
- 机器学习系统设计:Python 语言实现
- VS Code 用作嵌入式开发编辑器
- 【第十一届泰迪杯B题产品订单的数据分析与需求预测产品订单的数据分析与需求预测 】第二大问代码分享+解题思路(EDA数据再探索+LightGBM模型)
- 45 创新方法(TRIZ)5h-北京工业大学
- Android设计模式详解之建造者模式
- 通过MATLAB模拟24个GPS卫星的轨道运行效果
- 【redis】一致性哈希算法