Oracle Spatial中SDO_Geometry详细说明
Oracle数据库的空间数据类型
Oracle数据库中空间数据类型随着GIS、CAD/CAM的广泛应用,对数据库系统提出了更高的要求,不仅要存储大量空间几何数据,且以事物的空间关系作为查询或处理的主要内容。
Oracle数据库从9i开始对空间数据提供了较为完备的支持,增加了空间数据类型和相关的操作,以及提供了空间索引功能。
Oracle的空间数据库提供了一组关于如何存储,修改和查询空间数据集的SQL schema与函数。
通过MDSYS schema规定了所支持的地理数据类型的存储、语法和语义,提供了R-tree空间数据索引机制,定义了关于空间的相交查询、联合查询和其他分析操作的操作符、函数和过程,并提供了处理点,边和面的拓扑数据模型及表现网络的点线的网络数据模型。
Oracle中各种关于空间数据库功能主要是通过Spatial组件来实现。
从9i版本开始,Oracle Spatial空间数据库组件对存储和管理空间数据提供了较为完备的支持。
其主要通过元数据表、空间数据字段(即SDO_GEOMETRY字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的函数,让用户进行更深层次的GIS应用开发。
Oracle Spatial使用空间字段SDO_GEOMETRY存储空间数据,用元数据表来管理具有SDO_GEOMETRY字段的空间数据表,并采用R树索引和四叉树索引技术来提高空间查询和空间分析的速度。
1、元数据表说明。
Oracle Spatial的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标参考信息以及坐标维数说明等信息。
用户必须通过元数据表才能知道ORACLE数据库中是否有Oracle Spatial的空间数据信息。
一般可以通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。
元数据视图的基本定义为:(TABLE_NAME V ARCHAR2(32),COLUMN_NAME V ARCHAR2(32),DIMINFO MDSYS.SDO_DIM_ARRAY,SRID NUMBER);其中,TABLE_NAME为含有空间数据字段的表名,COLUMN_NAME为空间数据表中的空间字段名称,DIMINFO是一个按照空间维顺序排列的SDO_DIM_ELEMENT对象的动态数组,SRID则用于标识与几何对象相关的空间坐标参考系。
oracle spatial
二、ORACLE SPATIAL功能
由于传统的 GIS 技术已达到其本身可伸缩性和可*性的极限,用户越来越多地转向以数据库为中心的空间计算。ORACLE SPATIAL将空间过程和操作直接转移到数据库内核中,从而提高了性能和安全性。ORACLE SPATIAL从1995年ORACLE 7.1.6开始发展到2003年的10G版本,空间数据处理能力越来越强大。
AND c_ = 'cola_a' AND c_ = 'cola_c';
一、ORACLE SPATIAL概述
ORACLE SPATIAL 是 Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型、栅格数据类型和持续拓扑数据的原生数据类型。ORACLE SPATIAL使得我们能够在一个多用户环境中部署地理信息系统(GIS),并且与其它企业数据有机结合起来,统一部署电子商务、政务。有了 ORACLE SPATIAL 之后,即可用标准的 SQL 查询管理我们的空间数据。
SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo)
FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
5) 大地坐标支持
就地表测量而言,无论坐标系统是什么,空间函数、操作符和公用程序都提供正确的结果。距离、面积和角度等单位都获得了全面的支持。
OracleSpatial三维模型存储与可视化
摘要: 论述 Oracle Spatial 三维空间数据模型,以存储表面的方式设计了三维模型的数据库存储方案,同时引入 Hibernate 对象持久化
技术并自行设计开发了 SDO_GEOMETRY 映射类,结合 Java 3D 实现了三维模型的可视化。结果表明构建的存储与可视化方案可行。
关键词: Oracle Spatial; 三维空间数据存储; 可视化
public void setGeom( J3D_GeometryType geom) { this. geom = geom; }
}
4. Hibernate POJO ORM 文件 将 Oracle 表数据类型映射为 Java 数据类型,如 NUMBER 映射为 Long,需要建立它们之间的映射关 系。Hibernate 的 ORM 文件为一个 XML 文件,一个 POJO 对 应 一 个 ORM 文 件。 BuildingRoof3d 类 的 ORM 文件( BuildingRoof3d. hbm. xml) 为:
scale = " 0" / > < generator class = " native" / > < / id > < property name = " geom"
type = " J3D_GeometryType" > < column name = " GEOM" / > < / property > < / class >
图 4 三维模型可视化总体框架
图 2 多边形示例
三、三维模型存储与可视化实例
图 3 为 Google Earth 上的两个建筑物三维模型, 其中一个为教堂( 右下角) ,而另一个为办公大楼。
基于Oracle Spatial的空间数据存储及应用
摘要:目前,地理数据存储普遍采用空间数据和属性数据分开存储的模式,属性数据一般存储在关系型数据库系统中,空间数据则以文件方式存储。
OracleSpatial推出后,空间数据和属性数据可实现一体化存储。
介绍了如何使用OracleSpatial建立空间数据库,并给出了具体的实例。
关键词:OracleSpatial;空间数据库;对象关系数据库系统;四叉树索引中图分类号:TP311.132 文献标识码:A随着数据库的不断发展,对象关系数据库已经成为一项新标准。
数据库管理系统在传统上可以粗略地分为两大类:关系型与面向对象型。
近来,第三类数据库系统开始引人注目。
这类系统结合了关系数据库和面向对象数据库的优点,被成为对象关系数据库系统(ORDBMS)。
对象关系数据库系统采用用户定义的函数和索引方法,方便了数据库中用户定义数据类型的定义、存储、检索和处理。
这样,ORDBMS就能够处理用空间对象数据类型表示的空间信息,也能够处理使用空间索引方法和函数存取或操作的空间信息。
OracleSpatial是ORDBMS的一个代表。
它提供一个对象数据类型(SDO_GEOMETRY),索引功能和多个针对SDO_GEOMETRY的函数/运算符,有效地解决了空间数据和属性数据分开存储的难题。
我们可以在Oracle9i中快速有效地存储、访问和分析空间数据。
空间数据的用户可以利用标准的Oracle9i特性及增强特性,例如更高的数据库大小极限,更快的备份与恢复以及数据库中的Java存储过程。
1OracleSpatial简介OracleSpatial支持3种基本集合类型,以及由这些类型组成的几何体。
3种基本类型是:点,线串和N点多边形,它们都是二维的。
二维点是两个坐标X和Y组成的元素。
线串由两个或更多的点按一定的顺序排列构成,这些点定义了线段。
线串可以由直线段,弧线段或二者混合构成。
多边形由连接的线串构成,这些线串形成封闭环形,多边形的内部也就因而确定了。
Oracle Spatial 的空间查询处理机制分析及优化
Oracle Spatial的空间查询处理机制分析及优化学院计算机科学与技术专业计算机科学与技术年级2006级姓名张连帅指导教师张坤龙2010年6月 21日摘 要随着信息技术的发展,空间数据的应用日益广泛,也越来越受到人们的重视。
但是,由于空间数据自身的特点,查询空间数据要花费大量的时间,所以空间查询的效率问题一直是人们关注的重点。
众所周知,Oracle Spatial是存储、管理、查询空间数据最好的工具之一,因此本文针对Oracle Spatial,设计并实现了一个空间查询优化中间件,提高了空间查询的效率。
在实现的过程中,首先分析空间查询的执行计划,并与普通一维查询的执行计划进行对比,通过对比可知Oracle仍采用通常的一维查询优化机制来处理空间查询,因此需要一个空间查询优化中间件来提高查询效率;然后依据将空间查询与非空间查询分开执行的原理,对SQL语句进行分解、重组,将生成的优化后的SQL语句提交给Oracle执行;最后,经过与原SQL语句的查询耗时对比后发现,优化后的SQL语句确实减少了执行时间。
因此,可得出查询优化中间件确实提高了空间查询的效率的结论。
关键词:Oracle Spatial;OCI;空间数据;空间查询;优化ABSTRACTWith the development of IT,spatial data is used more and more widely,and more and more attention has been paid.But because of the feature of spatial data,the spatial query costs lots of time,so people have always focused on the efficiency of the spatial query.As we know,Oracle Spatial is one fo the best tools that is used to store,manage and query spatial data,so this article which based on Oracle Spaital ,designed and realized a plug-in that optimizes the spatial query,and improved the efficiency of the spatial query.Firstly,we analysed the explain plan of the spatial query and compared with the explain plan of the ordinary query,we achieved the conclusion that Oracle still use the ordinary optimize method to deal with the spatial query,so we need a plug-in that optimizes the spatial query to imporve the efficiency of the spatial query.Then based on the theory of separating the spatial query from the ordinary query,through dissecting and recombining the SQL statement,we submitted the SQL statement that has been optimized to Oracle.Finally ,we compared the time that optimized spatial query cost with the time that unoptimized spatial query cost and found that the time did cost less.So we can assure that the plug-in do improve the the efficiency of the spatial query.key words: Oracle Spatial;OCI;Spatial data;Spatial query;Optimize目 录第一章 绪论 (1)1.1研究背景及意义 (1)1.2研究内容 (1)1.3论文结构 (2)第二章 相关理论与研究 (3)2.1Oracle Spatial及相关概念 (3)2.2空间优化的理论和研究 (10)第三章 空间查询执行计划的分析 (14)3.1AUTOTRACE (14)3.2执行计划的分析与对比 (15)第四章 空间查询的优化 (19)4.1空间查询优化的原理 (19)4.2空间查询优化的技术支持 (19)4.3空间查询优化程序的设计 (24)4.4空间查询优化程序的实现 (26)第五章 优化结果及结果分析 (29)5.1测试所用数据 (29)5.2程序运行说明 (29)5.3结果分析 (30)第六章 总结与展望 (33)6.1总结 (33)6.2展望 (33)参考文献 (34)外文资料中文译文致谢第一章 绪论1.1研究背景及意义地理信息系统(简称GIS)是一门多学科综合的边缘学科,是获取、存储、分析和管理地理空间数据的重要工具、技术和学科。
OracleSpatial建表学习步骤详解
OracleSpatial建表学习步骤详解Step1. 创建一张表,其中shape用来存放空间数据1.CREATE TABLE mylake (2.feature_id NUMBER PRIMARY KEY,/doc/fd9834967.html, VARCHAR2(32),4.shape MDSYS.SDO_GEOMETRY);Step2. 在user_sdo_geom_metadata表中插入新记录,用于描述空间字段1.INSERT INTO user_sdo_geom_metadata VALUES (2.'mylake', //---表名3. 'shape', //---字段名4. MDSYS.SDO_DIM_ARRAY(5.MDSYS.SDO_DIM_ELEMENT('X', 0, 100, 0.05), //---X维最小,最大值和容忍度。
6. MDSYS.SDO_DIM_ELEMENT('Y', 0, 100, 0.05) //---Y维最小,最大值和容忍度 NULL //---坐标系,缺省为笛卡尔坐标系7.);Step3. 创建空间索引1.CREATE INDEX mylake_idx ON mylake(shape)2.INDEXTYPE IS MDSYS.SPATIAL_INDEXStep4. 插入空间数据Oracle Spatial用MDSYS.SDO_GEOMETRY来存储空间数据,定义为:1.CREATE TYPE sdo_geometry AS OBJECT (2.SDO_GTYPE NUMBER,3.SDO_SRID NUMBER,4.SDO_POINT SDO_POINT_TYPE,5.SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,6.SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);SDO_SRID:坐标系,NULL为笛卡尔坐标系。
SDO_Geometry结构说明
null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),
MDSYS.SDO_ORDINATE_ARRAY(点1经度,点1维度,点2经度,点2维度)
)
带洞的简单多边形
MDSYS.SDO_GEOMETRY(
2003,
8307,
null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1,n,2003,1),--n表示第二个多边形起始位置
)
2.2.2
折线串
MDSYS.SDO_GEOMETRY(
2002,
8307,
null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
MDSYS.SDO_ORDINATE_ARRAY(点1经度,点1维度,点2经度,点2维度,……)
)
2.2.3
一个环的简单多边形
MDSYS.SDO_GEOMETRY(
MDSYS.SDO_ORDINATE_ARRAY(点1经度,点1维度,点2经度,点2维度,点I经度,点I维度,点II经度,点II维度……,点I经度,点I维度)
)
2.2.4
常规格式
MDSYS.SDO_GEOMETRY(
2005,
8307,
null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1,n),n表示点数
dl04
COLLECTION
是元素的集合,其中的元素只要是非COLLECTION类型的即可
dl05
MULTIPOINT
含一个或多个点的几何体
dl06
MULTILINE or MULTICURVE
含一个或多个线串的几何体
浅析Oracle Spatial
浅析Oracle Spatial邬金(广东海事局海测大队,广州)A Brief Analysis on Oracle SpatialWU JIN摘要:出于HPD研究工作的需要,本文简要介绍了HPD中空间数据的组织与管理机制的底层平台——Oracle Spatial中空间数据组织与管理,并初步探讨了基于OO4O的Oracle Spatial接口程序的实现技术,为进一步发挥HPD效能提供了理论参考。
关键词:Oracle Spatial、HPD1引言CARIS HPD(以下简称HPD) 是CARIS公司开发的一套完整的海事测绘生产数据库解决方案。
它为管理数字海道测量及其他数据提供一个独特创新的、高效、集成的多用户,无缝的数据库环境的工具。
CARIS公司自1999年酝酿研发HPD,2001年首推商业版(HPD V1.0),现已更新到V2.7版本。
利用HPD,我们能真正实现数据采集、管理、维护以及纸海图和电子海图制作的一体化,从根本上改变现有的测绘生产模式、工艺流程和管理理念。
鉴于它应用于海事测绘数据管理方面的优越性,为加强我国海事测绘数据管理和提高海图编绘技术,部海事局于2007年将其引进。
为确保项目引进和后期制图生产顺利实施,尽快发挥HPD效能,我国海事测绘部门现正如火如荼的进行利用HPD试生产方面的研究。
可以预见,在不久的将来,HPD必将成为海事测绘生产的主要生产平台。
而如何进一步的发挥HPD的效能,使其于我们已有的航测资料系统等已有系统实现资源共享等将会成为一个重要研究方向。
要实现HPD与我们现有系统的对接,研究HPD中空间数据的组织与管理机制是必不可少的基础。
本文正是我在研究HPD中空间数据的组织与管理机制的底层平台——oracle spatial中的一些粗浅体会,,现整理出来与大家分享,抛砖引玉。
也希望随着大家研究的深入,我们能更大发挥HPD在海事测绘生产管理中的作用。
2 Oracle SpatialOracle Spatial是Oracle公司推出的空间数据库组件,通过Oracle数据库系统存储和管理空间数据。
C#读取OracleSpatial的sdo_geometry
C#读取OracleSpatial的sdo_geometryoracle的sdo_geometry中内置get_wkt和get_wkb两个⽅法。
以数据库表geoms为例,此表中有id和geometry两列try{OracleConnection con = new OracleConnection(conStr);OracleCommand cmd = new OracleCommand(@"SELECT sdo_geometry.get_wkt(geometry) FROM geoms WHERE id= 1902 ", con);con.Open();OracleDataReader read = cmd.ExecuteReader();if (read.Read()){string geo = ((OracleClob)read.GetOracleValue(0)).Value;MessageBox.Show(geo);}}catch (Exception ex){throw;}查询出的结果如下所⽰POINT (113.3293658 23.14338586)POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))wkt和wkb介绍wkt(OGC well-known text)和wkb(OGC well-known binary)是OGC制定的空间数据的组织规范,wkt是以⽂本形式描述,wkb是以⼆进制形式描述。
使⽤wkt和wkb能够很好到和其他系统进⾏数据交换,⽬前⼤部分⽀持空间数据存储的数据库构造空间数据都采⽤这两种⽅式。
wkt的组织结构如下:Geometry type Text description CommentST_Point 'point empty' empty pointST_Point 'point z empty' empty point with z-coordinateST_Point 'point m empty' empty point with measureST_Point 'point zm empty' empty point with z-coordinate and measureST_Point 'point ( 10.05 10.28 )' pointST_Point 'point z( 10.05 10.28 2.51 )' point with z-coordinateST_Point 'point m( 10.05 10.28 4.72 )' point with measureST_Point 'point zm(10.05 10.28 2.51 4.72 )' point with z-coordinate and measureST_LineString 'linestring empty' empty linestringST_LineString 'linestring z empty' empty linestring with z-coordinatesST_LineString 'linestring m empty' empty linestring with measuresST_LineString 'linestring zm empty' empty linestring with z-coordinates and measuresST_LineString 'linestring (10.05 10.28 , 20.95 20.89 )' linestringST_LineString 'linestring z(10.05 10.28 3.09, 20.95 31.98 4.72, 21.98 29.80 3.51 )' linestring with z-coordinatesST_LineString 'linestring m(10.05 10.28 5.84, 20.95 31.98 9.01, 21.98 29.80 12.84 )' linestring with measuresST_LineString 'linestring zm(10.05 10.28 3.09 5.84, 20.95 31.98 4.72 9.01, 21.98 29.80 3.51 12.84)' linestring with z-coordinates and measures ST_Polygon 'polygon empty' empty polygonST_Polygon 'polygon z empty' empty polygon with z-coordinatesST_Polygon 'polygon m empty' empty polygon with measuresST_Polygon 'polygon zm empty' empty polygon with z-coordinates and measuresST_Polygon 'polygon ((10 10, 10 20, 20 20, 20 15, 10 10))' polygonST_Polygon 'polygon z((10 10 3, 10 20 3, 20 20 3, 20 15 4, 10 10 3))' polygon with z-coordinatesST_Polygon 'polygon m((10 10 8, 10 20 9, 20 20 9, 20 15 9, 10 10 8 ))' polygon with measuresST_Polygon 'polygon zm((10 10 3 8, 10 20 3 9, 20 20 3 9, 20 15 4 9, 10 10 3 8 ))' polygon with z-coordinates and measuresST_MultiPoint 'multipoint empty' empty multipointST_MultiPoint 'multipoint z empty' empty multipoint with z-coordinatesST_MultiPoint 'multipoint m empty' empty multipoint with measuresST_MultiPoint 'multipoint zm empty' empty multipoint with z-coordinates and measuresST_MultiPoint 'multipoint (10 10, 20 20)' multipoint with two pointsST_MultiPoint 'multipoint z(10 10 2, 20 20 3)' multipoint with z-coordinatesST_MultiPoint 'multipoint m(10 10 4, 20 20 5)' multipoint with measuresST_MultiPoint 'multipoint zm(10 10 2 4, 20 20 3 5)' multipoint with z-coordinates and measuresST_MultiLineString 'multilinestring empty' empty multilinestringST_MultiLineString 'multilinestring z empty' empty multilinestring with z-coordinatesST_MultiLineString 'multilinestring m empty' empty multilinestring with measuresST_MultiLineString 'multilinestring zm empty' empty multilinestring with z-coordinates and measuresST_MultiLineString 'multilinestring ((10.05 10.28 , 20.95 20.89 ),( 20.95 20.89, 31.92 21.45))' multilinestringST_MultiLineString 'multilinestring z((10.05 10.28 3.4, 20.95 20.89 4.5),( 20.95 20.89 4.5, 31.92 21.45 3.6))' multilinestring with z-coordinatesST_MultiLineString 'multilinestring m((10.05 10.28 8.4, 20.95 20.89 9.5), (20.95 20.89 9.5, 31.92 21.45 8.6))' multilinestring with measuresST_MultiLineString 'multilinestring zm((10.05 10.28 3.4 8.4, 20.95 20.89 4.5 9.5), (20.95 20.89 4.5 9.5, 31.92 21.45 3.6 8.6))' multilinestring with z-coordinates and measuresST_MultiPolygon 'multipolygon empty' empty multipolygonST_MultiPolygon 'multipolygon z empty' empty multipolygon with z-coordinatesST_MultiPolygon 'multipolygon m empty' empty multipolygon with measuresST_MultiPolygon 'multipolygon zm empty' emptyST_MultiPolygon 'multipolygon (((10 10, 10 20, 20 20, 20 15 , 10 10), (50 40, 50 50, 60 50, 60 40, 50 40)))' multipolygonST_MultiPolygon 'multipolygon z(((10 10 7, 10 20 8, 20 20 7, 20 15 5, 10 10 7), (50 40 6, 50 50 6, 60 50 5, 60 40 6, 50 40 6)))' multipolygon with z-coordinatesST_MultiPolygon 'multipolygon m(((10 10 2, 10 20 3, 20 20 4, 20 15 5, 10 10 2), (50 40 7, 50 50 3, 60 50 4, 60 40 5, 50 40 7)))' multipolygon with measuresST_MultiPolygon 'multipolygon zm(((10 10 7 2, 10 20 8 3, 20 20 7 4, 20 15 5 5, 10 10 7 2), (50 40 6 7, 50 50 6 3, 60 50 5 4, 60 40 6 5, 50 40 6 7)))' multipolygon with z-coordinates and measureswkb的组织结构如下:基本类型定义:byte : 1 byteuint32 : 32 bit unsigned integer (4 bytes)double : double precision number (8 bytes)Building Blocks : Point, LinearRingPoint {double x;double y;};LinearRing {uint32 numPoints;Point points[numPoints];}enum wkbGeometryType {wkbPoint = 1,wkbLineString = 2,wkbPolygon = 3,wkbMultiPoint = 4,wkbMultiLineString = 5,wkbMultiPolygon = 6,wkbGeometryCollection = 7};enum wkbByteOrder {wkbXDR = 0, Big EndianwkbNDR = 1 Little Endian};WKBPoint {byte byteOrder;uint32 wkbType; 1Point point;}WKBLineString {byte byteOrder;uint32 wkbType; 2uint32 numPoints;Point points[numPoints];}WKBPolygon {byte byteOrder;uint32 wkbType; 3uint32 numRings;LinearRing rings[numRings];}WKBMultiPoint {byte byteOrder;uint32 wkbType; 4uint32 num_wkbPoints;WKBPoint WKBPoints[num_wkbPoints];}WKBMultiLineString {byte byteOrder;uint32 wkbType; 5uint32 num_wkbLineStrings;WKBLineString WKBLineStrings[num_wkbLineStrings];}wkbMultiPolygon {byte byteOrder;uint32 wkbType; 6uint32 num_wkbPolygons;WKBPolygon wkbPolygons[num_wkbPolygons];}WKBGeometry {union {WKBPoint point;WKBLineString linestring;WKBPolygon polygon;WKBGeometryCollection collection;WKBMultiPoint mpoint;WKBMultiLineString mlinestring;WKBMultiPolygon mpolygon;}};WKBGeometryCollection {byte byte_order;uint32 wkbType; 7uint32 num_wkbGeometries;WKBGeometry wkbGeometries[num_wkbGeometries]}下⾯是⼀个point(1,1) 使⽤WKB存储的例⼦:0101000000000000000000F03F000000000000F03F这个2进制流可以按照WKBPoint的结构进⾏拆分:Byte order : 01WKB type : 01000000X : 000000000000F03FY : 000000000000F03Fbyte order要么为0,要么为1,0为使⽤little-endian编码(NDR),1为使⽤big-endian编码(XDR)。
Oracle Spatial中SDO_Geometry详细说明
Oracle Spatial中SDO_Geometry详细说明在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 spatial 和ST_Geometry的简要对比
Oracle Spatial 空间数据库建设流程
2、填写空间元数据 INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'cola_markets', 'shape', MDSYS.SDO_DIM_ARRAY( -- 20X20 grid MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005), MDSYS.SDO_DIM_ELEMENT(‘Y’, 0, 20, 0.005)), NULL -- SRID );
该 表 告 知 用 户 Oracle 数 据 库 中 是 否 有 Oracle Spatial数据表定义
元数据视图的基本定义为: ( TABLE_NAME VARCHAR2(32), COLUMN_NAME VARCHAR2(32), DIMINFO MDSYS.SDO_DIM_ARRAY, SRID NUMBER );
Oracle Spatial 空间数据库建设流程
3、创建空间索引 CREATE INDEX cola_spatial_idx ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
4、插入空间数据
5、空间数据查询及分析
Oracle Spatial 第三方平台建库
Thank You
Oracle Spatial 简介
1 Part
Oracle Spatial 概述
Oracle Spatial 概述
1、是Oracle公司推出的空间数据库组件 2、通过Oracle数据库系统存储和管理空间数据 3、提供函数完成 (1)直接访问Oracle数据库的空间数据 (2)建立空间索引 (3)进行空间数据分析 等复杂的GIS功能
oracle创建SDO_Geometry表
oracle创建SDO_Geometry表Oracle Spatial由⼀坨的对象数据类型,类型⽅法,操作⼦,函数与过程组合⽽成。
⼀个地理对象作为⼀个SDO_GEOMETRY对象保存在表的⼀个字段⾥。
空间索引则由普通的DDL和DML语句来建⽴与维护。
本章主要说了⼀些例⼦演⽰如何建⽴,查询,索引空间数据。
简单的插⼊,索引与查询空间数据例⼦本节演⽰⼀个很简单建⽴空间表,插⼊,建⽴索引,查询数据的过程。
场景是⼀个软饮料公司,⽤地理信息来表⽰他们的产品(可乐)在各个地区的情况。
这些情况可以是:市场份额,竞争压⼒,增长潜⼒等等。
⽽地区可以是邻近的市,州,省或国家。
我们要作的是:1.建⽴⼀个表(COLA_MARKETS)来保存空间数据2.插⼊四个(cola_a, cola_b, cola_c, cola_d)地区的数据3.升级USER_SDO_GEOM_METADATA视图来反正这些地区的维度信息4.建⽴空间索引(COLA_SPATIAL_IDX)5.进⾏⼀些空间查询[sql]1. CREATE TABLE cola_markets (2. mkt_id NUMBER PRIMARY KEY,3. name VARCHAR2(32),4. shape SDO_GEOMETRY);[sql]1. INSERT INTO cola_markets VALUES(2. 1,3. 'cola_a',4. SDO_GEOMETRY(5. 2003, -- two-dimensional polygon6. NULL,7. NULL,8. SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)9. SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to10. -- define rectangle (lower left and upper right) with11. -- Cartesian-coordinate data12. )13. );14. -- The next two INSERT statements create areas of interest for15. -- Cola B and Cola C. These areas are simple polygons (but not16. -- rectangles).17. INSERT INTO cola_markets VALUES(18. 2,19. 'cola_b',20. SDO_GEOMETRY(21. 2003, -- two-dimensional polygon22. NULL,23. NULL,24. SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)25. SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)26. )27. );28. INSERT INTO cola_markets VALUES(29. 3,30. 'cola_c',31. SDO_GEOMETRY(32. 2003, -- two-dimensional polygon33. NULL,34. NULL,35. SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)36. SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)37. )38. );39. -- Now insert an area of interest for Cola D. This is a40. -- circle with a radius of 2. It is completely outside the41. -- first three areas of interest.42. INSERT INTO cola_markets VALUES(43. 4,44. 'cola_d',45. SDO_GEOMETRY(46. 2003, -- two-dimensional polygon47. NULL,48. NULL,49. SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle50. SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)51. )52. );需要写将建⽴的表的空间图层的信息插⼊⼀条到USER_SDO_GEOM_METADATA[sql]1. INSERT INTO user_sdo_geom_metadata2. (TABLE_NAME,3. COLUMN_NAME,4. DIMINFO,5. SRID)6. VALUES (7. 'cola_markets',8. 'shape',9. SDO_DIM_ARRAY( -- 20X20 grid10. SDO_DIM_ELEMENT('X', 0, 20, 0.005),11. SDO_DIM_ELEMENT('Y', 0, 20, 0.005)12. ),13. NULL -- SRID14. );[sql]1. -- SRIDUSER_SDO_GEOM_METADATA 在登陆PL/SQL后,Users→MDSYS→Objects→Views→USER_SDO_GEOM_METADATA打开可以查看到下图(我已经插⼊了2个空间表的记录了)可以看到这个插⼊的记录,点击红⾊⽅框初的任意⼀个,会出现下图:[sql]1. SDO_DIM_ARRAY( -- 20X20 grid2. SDO_DIM_ELEMENT('X', 0, 20, 0.005),3. SDO_DIM_ELEMENT('Y', 0, 20, 0.005)4. ),就是这句sql的意思了,其中SDO_DIMNAME是⼀个⼆维的最⼤值和最⼩值的描述,SDO_LB是在X上⾯最⼩值,SDO_UB是X上⾯的最⼤值,SDO_TOLERANCE是指误差的⼤⼩,这⾥就是指0.005内的数据都会默认为⼀个数据。
oracle空间数据库说明
oracle空间数据库说明转:/jing_xin/article/details/4355642由于最近弄⼀些空间数据,所以找了些oracle空间数据库的⼀些知识.下⾯是汇总:Oracle Spatial由⼀坨的对象数据类型,类型⽅法,操作⼦,函数与过程组合⽽成。
⼀个地理对象作为⼀个SDO_GEOMETRY对象保存在表的⼀个字段⾥。
空间索引则由普通的DDL和DML语句来建⽴与维护。
创建表: CREATE TABLE cola_markets( mkt_id NUMBER PRIMARY KEY,name VARCHAR2(32),shape SDO_GEOMETRY);插⼊数据:INSERT INTO cola_marketsVALUES(1,'cola_a',SDO_GEOMETRY(2003, -- two-dimensional polygonNULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to-- define rectangle (lower left and upper right) with-- Cartesian-coordinate data ) );INSERT INTO cola_markets VALUES(2,'cola_b',SDO_GEOMETRY( 2003, -- two-dimensional polygonNULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1) ) );INSERT INTO cola_markets VALUES(3,'cola_c',SDO_GEOMETRY( 2003, -- two-dimensional polygonNULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3) ) );INSERT INTO cola_markets VALUES(4,'cola_d',SDO_GEOMETRY( 2003, -- two-dimensional polygonNULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circleSDO_ORDINATE_ARRAY(8,7, 10,9, 8,11) ) );更新视图:USER_SDO_GEOM_METADATA INSERT INTO user_sdo_geom_metadata (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ( 'cola_markets', 'shape', SDO_DIM_ARRAY( -- 20X20 grid SDO_DIM_ELEMENT('X', 0, 20, 0.005), SDO_DIM_ELEMENT('Y', 0, 20, 0.005) ), NULL -- SRID );创建空间索引:CREATE INDEX cola_spatial_idx ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; -- Preceding statement created an R-tree index.这样在mapguide下就可以preview空间数据信息.下⾯来说⼀下其中最关键的⼀些object:( SDO_GEOMETRY对象类型在Spatial中,地理对象的描述是放在⼀个单独的类型为SDO_GEOMETRY的字段中的。
Oracle Spatial几何类型字段解析
Oracle Spatial几何类型字段解析
芮小平;张彦敏
【期刊名称】《物探化探计算技术》
【年(卷),期】2004(26)4
【摘要】Oracle Spatial是Oracle数据库中管理空间数据的模块,它采用
SDO_GEOMETRY字段存储空间数据.Oracle Spatial更深层次的功能,如索引、查询等,都建立在SDO_GEOMETRY的存储机制上.这里详细介绍了Oracle Spatial 中空间对象字段SDO_GEOMETRY的组成及其各个组成对象的定义方法,解析了点(包括复合点)、线(包括复合线)、多边形(包括复合多边形)等空间实体在
SDO_GEOMETRY中的存储方式,为其它编程语言访问Oracle Spatial空间对象提供了参考.
【总页数】4页(P359-362)
【作者】芮小平;张彦敏
【作者单位】北京交通大学,交通运输学院,北京,100044;中国矿业大学,资源开发工程系,北京,100083
【正文语种】中文
【中图分类】TP311.131
【相关文献】
1.解析几何常考类型解析与解法 [J], 顾箭
2.Oracle Spatial空间索引解析 [J], 肖飞;唐媛
3.2004年高考解析几何最值问题的类型及方法解析 [J], 黄爱民;曾艳琳
4.分类几何多情形,讨论问题解析法
——以几何多情形的四种类型为例 [J], 王芳
5.分类几何多情形,讨论问题解析法——以几何多情形的四种类型为例 [J], 王芳因版权原因,仅展示原文概要,查看原文内容请购买。
使用ST_Geometry存储空间数据(oracle)
一、简介ArcSDE for Oracle提供了ST_Geometry类型来存储几何数据。
ST_Geometry是一种遵循ISO和OGC 规范的,可以通过SQL直接读取的空间信息存储类型。
采用这种存储方式能够更好的利用oracle的资源,更好的兼容oracle的特征,比如复制和分区,并且能够更快的读取空间数据。
使用ST_Geometry存储空间数据,可以把业务数据和空间数据存储到一张表中(使用SDENBLOB方式业务数据和空间数据是分开存储在B表和F表中的),因此可以很方便的在业务数据中增加空间数据(只需要在业务表中增加ST_Geometry列)。
使用这种存储方式还能够简化多用户的读取,管理(只需要管理一张表)。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 会默认使用ST_Geometry 方式来存储空间数据。
它实现了SQL3规范中的用户自定义类型(user-defined data types),允许用户使用ST_Geometry类型创建列来存储诸如界址点,街道,地块等空间数据。
使用ST_Geometry类型存储空间数据,具有以下优势:1)通过SQL函数(ISO SQL/MM 标准)直接访问空间数据;2)使用SQL语句存储、检索操纵空间数据,就像其他类型数据一样。
3)通过存储过程来进行复杂的空间数据检索和分析。
4)其他应用程序可以通过SQL语句来访问存储在geodatabase 中的数据。
从ArcGIS 9.3开始,新的ArcSDE geodatabases for Oracle 要求所以ST 函数调用的时候前面都要加上SDE schema名称。
例如:要对查询出来的空间数据进行union操作,则SQL函数需要这样写:"sde.ST_Union",在9,2版本之前,可以不加SDE schema名称。
二存储结构ST_Geometry 存储空间数据的结构如下表:Name TypeENTITY NUMBER(38)NUMPTS NUMBER(38)MINX FLOAT(64)MINY FLOAT(64)MAXX FLOAT(64)MAXY FLOAT(64)MINZ FLOAT(64)MAXZ FLOAT(64)MINM FLOAT(64)MAXM FLOAT(64)AREA FLOAT(64)LEN FLOAT(64)SRID NUMBER(38)POINTS BLOBEntity为要素类型,包括(linestring, multilinestring, multipoint, multipolygon, point, or polygon)。
《空间数据库》实习指导书-2020
《空间数据库》课程实习指导书《空间数据库原理》课程实习预备知识—Oracle Spatial 简介Oracle Spatial 主要通过元数据表、空间数据字段(即sdo_Geometry 字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的程序包,让用户进行更深层次的GIS 应用开发。
Oracle Spatial 使用空间字段sdo_Geometry 存储空间数据,用元数据表来管理具有sdo_Geometry 字段的空间数据表,并采用R 树索引和四叉树索引技术来提高空间查询和空间分析的速度。
一、元数据表说明Oracle Spatial 的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标系以及坐标维数说明等信息。
用户必须通过元数据表才能知道Oracle 数据库中是否有Oracle Spatial 的空间数据信息。
通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。
元数据视图的基本定义为:其中,TABLE_NAME 为含有空间数据字段的表名,COLUMN_NAME 为空间数据表中的空间字段名称,DIMINFO 是一个按照空间维顺序排列的SDO_DIM_ARRAY 对象的动态数组,SRID 则用于标识与几何对象相关的空间坐标参考系。
SDO_DIM_ELEMENT 对象的定义如下所示:Create Type SDO_DIM_ARRAY as OBJECT( SDO_DIMNAME VARCHAR2(64),SDO_LB NUMBER,SDO_UB NUMBER,SDO_TOLERANCE NUMBER);其中,SDO_DIMNAME 是空间维名称,SDO_LB 为该空间维的左下角坐标,SDO_UB 为该空间维的右上角坐标,SDO_TOLERANCE 为几何对象的表示精度。
二、空间字段解析Oracle Spatial 的空间数据都存储在空间字段sdo_Geometry 中,理解sdo_Geometry 是编写Oracle Spatial 程序的关键。
sdo_relate用法
sdo_relate用法
sdo_relate是Oracle Spatial中的一个函数,用于计算两个几何对象之间的空间关系。
它的语法如下:
SDO_RELATE(geometry1, geometry2, mask)
其中,geometry1和geometry2是要比较的两个几何对象,mask是一个字符串,用于指定要比较的空间关系类型。
mask的取值可以是以下之一:
- 'EQUAL':两个几何对象完全相等。
- 'DISJOINT':两个几何对象没有交集。
- 'INTERSECT':两个几何对象有交集。
- 'TOUCH':两个几何对象相交于边界上。
- 'OVERLAPBDYDISJOINT':两个几何对象有交集,但没有共同的内部点。
- 'OVERLAPBDYINTERSECT':两个几何对象有交集,且有共同的内部点。
- 'COVEREDBY':geometry1被geometry2完全包含。
- 'COVERS':geometry1完全包含geometry2。
- 'ANYINTERACT':两个几何对象有任意交集。
sdo_relate函数返回一个字符串,表示两个几何对象之间的空间关系。
如果两个几何对象之间没有指定的空间关系,则返回'FALSE'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle Spatial中SDO_Geometry详细说明在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_GTYPESDO_GTYPE值是有四位数字组成的,它们的格式为:dltt 。
其中,d 表示几何的维数。
如二维、三维对应的d=2和d=3;l 定义了LRS。
一般l=0;tt 定义了地理对象的类型。
现在使用从00到07,如tt=01代表为单点;下面就是t=2的二维几何类型,SDO_GTYPE参数值具体,如图1:SDO_GTYPE 几何类型相关描述2000 未知的地理类型Spatial会无视这个类型的地理对象2001 单点Point类型地理对象包含一个普通的点2002 单线Polyline和Curve类型地理对象包含直线或片段segments2003 Polygon类型地理对象包含一个普通的多边形,但不包含空岛2004 集合COLLECTION类型地理包含不同类型元素集合2005 多点MultiPoint类型地理对象包含多个点的集合2006 多线MutliPolyline和多曲线类型地理对象有一或更多的线或曲线集合2007 多多边形MutliPolygon类型一个地理对象包含岛(多岛)的多边形和N个多边形对于一个给定的层,所有的地理对象必须都是相同的维度,不能将二维与三维的数据放在一个层里。
二、SDO_SRIDSDO_SRID定义了空间坐标参考系统。
如果SDO_SRID为null,则没有指定坐标系统,如果SDO_SRID不为null,那么它的值必须在在MDSYS.CS_SRS 表中的SRID 列有对应的值,而且它的值必须插入USER_SDO_GEOM_METADATA视图中。
MDSYS.CS_SRS 表参考图3MDSYS.CS_SRS表列名类型列名描述CS_NAME VARCHAR2(68) 坐标系统名称SRID NUMBER(38) 空间参考ID,为唯一值。
1-999999为spatial使用的空间参考,1000000以后为用户自定义AUTH_SRID NUMBER(38) 可选的SRID,是个外键。
另一个坐标系统的SRID AUTH_NAME VARCHAR2(256)WKTEXT VARCHAR2(2046)CS_BOUNDS MDSYS.SDO_GEOMETRY三、SDO_POINTSDO_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_INFOSDO_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_ORDINATESSDO_ORDINATES类型的构造方法为:sdo_ordinate_array(x1,y1,x2,y2,……),其中x1,y1类型等为Double和Int都可。
SDO_ORDINATES存储的是空间对象的几何节点坐标序列,用逗号将X、Y、Z以及不同点之间隔开,该字段性质:长度=1048576的数字Number类型。
如果几何为二维的情况,存储的序列为{Y1, X2, Y2, X3, Y3, X4, Y4......}格式;几何为三维坐标的话,如三维坐标的多边形它的存储的序列为{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}格式。
坐标序列中的数据必须都合法且不为空。
具体坐标的组合成几何的结合SDO_ELEM_INFO来理解。
六、参考例子:6.1、矩形:矩形的具体几何形状和坐标,如下图:用SDO_GEOMETRY定义该矩形,如何确定sdo_geometry()构造方法中的各个参数值。
详细解释如下:SDO_GTYPE = 2003;2003中的2表示二维数据,2003中的3表示表示多边形。
具体参考图1SDO_SRID = NULL;SDO_POINT = NULL;SDO_ELEM_INFO = (1, 1003, 3).;在属性单元SDO_ELEM_INFO (1,1003,3)中的最后一个3表示该几何为矩形,具体参考图4。
---因为它是矩形且为二维所以它的构造方法为:sdo_point_type(左下坐标,右上坐标)。
SDO_ORDINATES = (1,1, 5,7). 定义了具体的左下坐标和右上坐标的坐标序列。
例子:用SQL 命令插入一个矩形:INSERT INTO beniy388 VALUES(1, //其他的属性字段的值'UpDooGIS', //其他的属性字段的值MDSYS.SDO_GEOMETRY( //几何字段SDO_GEOMETRY的值2003, -- 二维多边形NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), -- 一个矩形(1003为逆时针方向)MDSYS.SDO_ORDINATE_ARRAY(1,1, 5,7) -- 只需要两点));6.2、有岛多边形:有岛多边形的具体几何形状和坐标,如下图:用SDO_GEOMETRY定义该多边形,如何确定sdo_geometry()构造方法中的各个参数值。