图4-1SDO_GEOMETRY能够表示的空间数据类型的例子

在接下来的章节中,我们将对图4-1中的几何体类型做进一步的讨论。

点(Point)是最简单的几何体。在前面章节中已经用到。点可以表示客户的位置、交货地点或者竞争对手商店的位置。图4-1中的对象A就是点的一个例子。

一个线串(Line String)连接多个不同的点(有时也称作顶点)。一般情况下,用SDO_GEOMETRY的线串类型表示公路、交通运输网络、公用事业线和管道等。如果这个线串是闭合的,它就变成了环(ring)。否则,它就是线串类型。线串通过以下方式连接两个或更多的点:

●直线:就是我们平时所理解的直线。在图4-1中的对象B就是一个直线的例子。

●圆弧:我们把它当作一个弧串(Arc String)[1]。

●直线和圆弧的结合:我们把它当作一个复杂的线串(曲线)。图4-1中的对象F就是一个复杂线串的例子。

4.1.3多边形和面

一个多边形(Polygon)由一个或多个环(封闭的线串)构成并和一个区域相关。图4-1中的对象C是一个由直线连接4点而构成的多边形区域(阴影部分所示)。在这个例子中,对象C呈菱形。但实际上,多边形可以是任意的形状。它可以表示城市的边界、邮编区域或者商店的影响区域。一个多边形具有如下特性:

●多边形的边界由一个或多个环(封闭的线串)组成。多边形边界(可在SDO_ GEOMETRY中很容易被指定)的特例包括矩形和圆。

●多边形与线串不同,它与被其边界所围成的区域有关。这个区域必须是连续的。也就是说,你可以在这个多边形内部穿梭,而不与其边界相交。这就是说,数字8不是一个有效的多边形(但是,数字8可以作为一个多重多边形或者多边形集合建模。这一点以后会介绍)。图4-1中的对象C是一个(有效的)多边形的例子。在第5章中,我们将会学习确定一个多边形是否有效的标准。

●用来定义多边形边界或多边形集合的环,是由直线、圆弧或者线串和弧的结合构成的。如果它是弧和线串的结合,我们把这个多边形称为复合多边形。图4-1中的对象G就是这种复合多边形的例子,因为它的边界由直线和弧连接而成。

●被一个多边形包围的区域,可以用一个外环和任意个(≥0)内环来表示。内环被称为洞或void,因为它使外环包围的区域中的一部分变为void(从外环包围的区域中减去)。图4-1中的对象D展示了一个由一个外环和一个内环构成的多边形。例子中的内环是一个矩形。这个多边形所覆盖的区域就是两个环中间的阴影部分。

迄今为止,我们假想的示例数据都是在二维空间中。对于三维数据,这些多边形是在三维平面中的,因此被称为(平面)多边形面。或当不存在模糊定义时,简称为面(Surface)。一个多边形面的所有顶点都要在同一个平面中,这样就可以把一个或者多个面(不在同一平面中)“缝”在一起,来构成一个任意的(但是连续的)三维的复合面(composite surface)。图4-1中的对象H就是这种复合面的例子。一般来说,一个面可以是单个多边形面或者是由多个连续多边形面构成的一个复合面。注意,即使构成边界的面是封闭的(如定义一个立方体),一个面仍然只会与一个区域相关而与体积无关。建筑物的外墙和土壤的表面都是三维面的例子。

一个简单的立方体(Solid)是由一个外表面和零个或多个内部的复合面构成。其内部和外部的复合面在一起定义了该立方体的边界。与面不同,立方体具有面积和体积。在图4-1中的对象J就是一个简单立方体的例子。在城市建模应用中,可以用这个立方体类型对建筑物和其他建筑实体进行建模。

在一些例子中,建筑物可能包含一个或多个附属部件。可以把该类建筑物建模为简单的立方体或者由多个简单立方体组成的具有单一体积的复合立方体。如果它被表示成一个组合,我们就称它为复合立方体。图4-1中的对象K就是复合立方体的一个例子。如果你打算对立方体的各个部分进行单独的访问,最好把复合立方体的各个部件单独存储(我们将在第7章对怎样访问面的部件和立方体的部件进行讨论)。这种复合立方体在CAD类型的应用中较为常见,如螺钉和螺母就构成了一个复合立方体。

一个集合(Collection)有多个几何体元素。集合可以是多样化的,也就是说,它可以是点、线串和多边形的任意组合。当然,它也可以是单一性的,即它仅由一种类型的元素构成。其中多重点、多重线串、多重多边形或者多重面和多重立方体都是同类集合的特例。

图4-1中的对象E包含两个多边形、一个五边形和一个中间有孔的多边形。它是多重多边形集合的一个例子。其中阴影部分表示它们覆盖的区域。一些州的边界,如德克萨斯州和加州,可以用多边形的集合来表示,其中不连续的元素(岛屿)可以被存储为独立的多边形。同理,数字8也可被存储为含有两个多边形的几何体集合。图4-1中的对象L,把一个建筑物建模为一个立方体和面的集合,其中立方体表示建筑本身,面表示窗户。

一般情况下,空间对象的形状是相当复杂的,需要大量的相互连接的点(或顶点)。例如,亚马逊河就有成千上万个顶点。用多边形来建模的州的边界也可能有大量的顶点。用来对空间数据建模的任何数据类型都应该能够表示大量的不同的形状,从复杂的路段到任意形状的城市和地产边界。

为了表示如此复杂的几何形状,我们用元素数组在逻辑上实现了SDO_GEOMETRY类型,如图4-2所示。

SDO_GEOMETRY数据类型有两个逻辑部件:几何体的空间参考系(也叫坐标系)和元素数组(ElementArray)。

注释:

一个坐标系确定一个参考的框架,以表示几何体的坐标。对地球表面进行建模有不同的坐标系。另外,一个坐标系也可以不用地球表面作为参考系。我们将在下节中进一步学习不同的坐标系。

图4-2SDO_GEOMETRY数据类型的概念类图

元素数组描述了SDO_GEOMETRY对象的形状和位置(通过对指定坐标系的引用)。这个元素数组构成了SDO_GEOMETRY对象。元素数组可表示图4-1中任意的空间数据类型:点、线串、多边形或者集合类型的几何体。这在图4-2中通过“is-a”关系进行了描述,具体表现为这些不同的类型和元素数组之间的三角形符号。注意,这里的菱形符号表示元素之间的多对一(many-to-one)关系。例如,在点和线串之间的菱形表示许多点构成一条线。在菱形符号后面的“2+”表示点的最少数目。例如,至少两个或更多的点才组成一条线串。与此相似,一个或多个环组成一个多边形,一个或多个多边形才构成一个复合面。一个外部复合面和零个或多个内部复合面(如果面是封闭的)组成一个简单的立方体(如图4-2中的SSolid所示)。一个或多个共面的简单立方体构成一个复合立方体(如图4-2中的CSolid所示)。集合类型由一个或多个合适的元素(如一个或多个点构成一个多重点,一个或多个立方体构成一个多重立方体等)构成。

SQL/MM是ISO/IEC针对“文本、时空、静态图片和数据挖掘”的国际标准。SQL/MM第三部分[2]中特别处理了用户定义的空间类型和相应的针对二维空间数据的存储、管理和检索函数。这个标准定义了ST_Geometry类型用于存储二维空间数据。它包含ST_Point、ST_LineString和ST_Polygon三个子类型,分别对不同的空间几何体进行建模。这一标准还包括一个指定几何体的熟知文本。例如,字符串Point(1 1)表示坐标为(1,1)的点。

OGC(开放地理信息系统联盟)制定了简单特性规范(Simple Features Specification)[3]来对简单的地理空间(二维)特性进行存储、搜索、查询和更新。这个规范定义了一个Geometry类型,可以通过这个类型的合适的子类型对二维空间的点、线串、多边形等进行建模。这些类型是SQL/MM定义的类型的一个子集。对三维数据而言,OGC的GML 3.0规范定义了一个广泛的三维类型集合。

Oracle Spatial明确地支持在SQL/MM标准中定义的ST_Geometry类型和其特定的子类型(ST_CircularString、ST_CompoundCurve、ST_Curve、ST_CurvePolygon、ST_GeomCollection、ST_LineString、ST_MultiCurve、ST_MultiLineString、ST_MultiPoint、ST_MultiPolygon、ST_MultiSurface、ST_Point和ST_Polygon)。这些类型和Oracle Spatial中的SDO_ GEOMETRY数据类型在本质上是可互操作的。也就是说,可以从SDO_Geometry类型创建ST_Geometry,反之亦然。另外,Oracle实现了SQL/MM标准中在ST_Geometry和其子类型上定义的关系函数(在第8章中进行讨论)。简而言之,Oracle Spatial遵循OGC简单特性规范(ST_Geometry的实现符合针对对象模型的OGC简单特性规范)和SQL/MM第3部分中等价的章节。在本章中,我们举例说明如何用Oracle Spatial自身的SDO_GEOMETRY数据类型构建不同类型的几何体。要想了解如何使用ST_Geometry类型构建这些几何体,可以参阅Oracle Spatial用户指导及参考手册或者使用将在第5章中讲述的SDO_GEOMETRY-ST_GEOMETRY间的转换函数。

对于三维数据,Oracle可以存储和建模GML 3.0规范中的大多数类型,除了参数曲线类型(如弧和样条曲线等)。另外,Oracle Spatial提供了一些构造函数来实现SDO_GEOMETRY数据类型与SQL/MM标准中熟知文本(WKT)和熟知二进制(WKB)在二维数据上的转换,以及SDO_GEOMETRY和GML 3.0类型在三维数据上的转换。我们将在第5章中讨论这些转换工具。

下一节将进一步讨论SDO_GEOMETRY数据类型。在随后的几节中,我们将描述怎样构建SDO_GEOMETRY对象来存储不同的空间数据类型。

oracle几何体数据类型,4.1 Oracle中空间几何体的类型相关推荐

  1. mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突

    mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突 实体Bean public class Broke {/*** brokeid */BigInteger br ...

  2. oracle sum 数据类型,五、Oracle内置函数

    一.数值型函数 1.绝对值,取余,正负判断函数 绝对值:ABS(n), 取余:MOD(n2,n1), 正负判断:SIGN(n), 2.指数函数 平方根:SQRT(n) 幂函数:POWER(n1,n2) ...

  3. oracle钱用什么数据类型,Oracle常用数据类型说明

    类型 含义 存储描述 备注 CHAR 固定长度字符串 最大长度2000bytes VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749 NCHAR 根据字符集而定 ...

  4. oracle中的sql文本类型,Oracle数据库的空间数据类型

    Oracle数据库中空间数据类型随着GIS.CAD/CAM的广泛应用,对数据库系统提出了更高的要求,不仅要存储大量空间几何数据,且以事物的空间关系作为查询或处理的主要内容.Oracle数据库从9i开始 ...

  5. 常见oracle数据类型及其在java中的对应类型

    SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型 1.0标准的JDBC类型: CHAR java.sql.Types.CHAR java.lang.String o ...

  6. ORACLE的数据类型

    ORACLE的概述: oracle基本上分为:字符串类型,数字类型,日期类型,大对象类型等几种. 1 字符串类型:用单引号引起来的字符序列. 字符串数据类型还可以依据存储空间分为固定长度类型(CHAR ...

  7. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  8. Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7

    墨墨导读:本文来自墨天轮用户"你好我是李白"的投稿,记录一个Oracle数据库迁移过程 :异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7.墨天轮主页:htt ...

  9. oracle mysql 数据类型对比_Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  10. Oracle 自定义数据类型Type

    引言 这个月项目中实现了一个动态汇总并且导出到Excel的功能,妈蛋,为了实现这个功能,一个网格页面就用了20+个存储过程和自定义函数,终于完成了初步测试工作,其中快把我所掌握的不掌握的Oracle知 ...

最新文章

  1. 探讨SQL Server 2005.NET CLR编程
  2. Device Tree(一):背景介绍
  3. 超强、超详细Redis入门教程【转】
  4. Deep learning From Image to Sequence
  5. Remove_if 删除vector数据
  6. MyEclipse 保护色设置
  7. STM32—驱动GY85-IMU模块
  8. 地表反射率、温度以及植被指数的计算
  9. 极大似然估计的通俗理解
  10. 直连路由、主机路由以及选择顺序
  11. 计算机管理下的打印机参数设置,提高办公效率 11种方法设置打印参数
  12. (转)s3c6410 开发板Linux系统支持 K9GAG08U0E的方法
  13. 本地idea通过tomcat启动服务停滞
  14. Unity3D 实现阴阳师 画符
  15. 硬件设计-DIY功放
  16. vsftpd cmds_allowed 权限控制
  17. GNN-CS224W: 6-7 Graph Neural Networks
  18. 两个umijs/max项目使用微前端简单示例
  19. bulk es 删除_ES bulk 批量操作
  20. 向PVFS工程中添加新文件

热门文章

  1. 2022年全球市场风电铸件总体规模、主要生产商、主要地区、产品和应用细分研究报告
  2. 【运营】关于A/BTest的简单介绍
  3. Python一行流:列举所有k-mer组合(最简单写法)
  4. 人件札记:团队的化学反应
  5. String s1 = new String(abc)到底创建了几个对象?底层原理是什么?
  6. 排队器拦截_如何绕过浏览器的弹窗拦截机制
  7. 了解CSS的float高度坍塌的原理,并懂得怎么解决高度坍塌!
  8. 小程序实现保存图片到手机
  9. 论实力和智慧,美的微晶冰箱有点东西!
  10. JavaScript基础语法