在SQL数据库环境下的地理信息数据存储策略
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<3>真正意思上的面向对象数 据模型,实现数据及其操作 的封装,确保空间数据访问 的高效和安全。
一、背景
理论现状 研究现状
目前关于GSQL的研究十分的活跃,研究的 广度和深度不断加强。主要的研究内容集中 在空间数据建模、空间数据类型的定义、空 间函数(谓词)的设计等。
实践现状
迄今为止,对矢量数据和栅栺数据的GSQL的 研究都有了一定的实践。 如在Oracle spatial等空间数据库中,提供了对 于点,线,多边形等矢量几何体的访问。
一、背景
存在不足 研究现状
1.由于各个商业GIS和空间数据库公司自身软件 设计的需求,很少有真正支持Open GIS规范的 基于SQL的空间数据类型和空间函数扩展的实 现,达不到数据共享的要求。 2.目前对SQL的空间扩展大都是对空间数据类型 的扩展,没有系统的对空间函数进行分类和定义, 更缺少对空间函数的设计和实现。
三、基于SQL的空间扩展实验
试验实例—空间数据表的定义
create table 线表 ( name varchar(2), shape linestring) insert into 线表 values(2,linestring(pointarray(point(31,34), point(45,78),point(34,67),point(456,567))));
用户自定义函数(UDF)是指由用户通过 CREATE FUNCTION语句显式创建并命名的函 数,其语义也由用户自己确定。用户定义的函 数可进一步分以下为两类: (1)有源函数(sourced function) ;
(2)外部函数(external function) 。
二、关键源自文库术
(3)对象类型方法和用户自定义函数(UDF)
三、基于SQL的空间扩展实验
试验实例—空间函数的实现
length()方法
overriding member function length return number is len number; begin len:=0; for i in points_in_linestring.first..points_in_linestring.last-1 loop len:=sqrt(((points_in_linestring(i).getx()points_in_linestring(i+1).getx())*(points_in_linestring(i).getx()points_in_linestring(i+1).getx())+(points_in_linestring(i).gety()points_in_linestring(i+1).gety())*(points_in_linestring(i).gety()points_in_linestring(i+1).gety())))+len; end loop; return len; end;
二、关键技术
(2)用户自定义类型(UDT)和对象类型(OT)
CREATE [OR REPLACE] TYPE type_name {AS OBJECT | UNDER supertype_name} (Attribute_name datatype [, attribute_name datatype]… [MEMBER FUNCTION function_spec,]…] )[{FINAL | NOT FINAL}] [{INSTANTIABLE| NOT INSTANTIABLE}];
三、基于SQL的空间扩展实验
试验实例—空间数据类型的定义
create or replace type point under geometry ( x number, y number, constructor function point(a in number,b in number) return self as result, member function getx return number, member function gety return number, overriding member function dimension return number, overriding member function geometrytype return varchar2, overriding member function srid return number, overriding member function issimple return number )not final instantiable
二、关键技术
(2)用户自定义类型(UDT)和对象类型(OT)
Oracle数据库提供了数组类型、对象类型和表类 型三种用户自定义数据类型。其中,对象类型是基 于SQL进行空间扩展的关键依托。Oracle的对象类型 是一种用户自定义的复合数据类型,它将属性、操 作和与UML类相关的关系分组成一个单独的结构, 这样可以更好地进行组织和访问数据。Oracle对象 类型分为4种类型:简单、引用、集合和复合。
三、基于SQL的空间扩展实验
试验实例—空间数据查询
declare ls linestring; length number; begin select GEOMETRY into ls from 线表 where linestring_id=2; length:=ls.length(); dbms_output.put_line('length='||length); end;
二、关键技术
(1)面向对象多源空间数据模型的设计
面向对象数据模型由于在表现客观世界 时更加丰富和自然,逐步成为空间数据模 型的主要发展趋势。
二、关键技术
二、关键技术
(2)用户自定义类型(UDT)和对象类型(OT)
为了能够定义和使用特殊数据类型,关系数据 库引入了用户自定义类型(UDT),UDT使得用户 可以不受数据库系统提供的数据类型的限制,而不 断增加定义自己需要的各种数据类型。
在SQL数据库环境下的地理信息数据存储策略
一、背景 空间数据存储方式
文件 文件 文件
文 件
数据库
一、背景 空间数据存储如何更 加自然? 数据库 空间数据查询如何更 加高效?
一、背景
一、背景
研究意义
<1>基于成熟的 关系数据库,实 现空间数据的高 效管理。 <2>定义空间数据的 统一访问接口,以 实现数据的共享和 互操作。
二、关键技术
(3)对象类型方法和用户自定义函数(UDF)
方法是与对象类型相关的过程和函数,它实 现该类型特有的行为。它们可用PL/SQL或 Java等高级语言实现,并可作为外部调用访问。 对象类型方法分为成员、构造函数、比较和静 态方法等四种类型。
二、关键技术
(3)对象类型方法和用户自定义函数(UDF)
二、关键技术
(4)对继承和多态的支持
继承和多态性是面向对象技术的核心概念,是面 向对象编程语言流行的两个重要原因。关系数据库引 入面向对象技术是个逐步的过程,
二、关键技术
(4)对继承和多态的支持
继承和多态概念是通过FINAL和INSTANTIBLE两 个关键词实现的。 正像前面所述,关系数据库对面向对象的支持正 在一个完善的过程中,像Java一样,Oracle只支持单 继承,即一个子类型只能继承一个超类型。
三、基于SQL的空间扩展实验
试验实例—空间函数的实现
构造函数point() constructor function point(a in number, b in number) return self as result is begin x:=a; y:=b; geometry_srid:=1; return; end;
三、基于SQL的空间扩展实验
试验实例—空间数据查询
四、结论
优势:
1、真正的对象数据存储
2、简化从数据库中查询组织空间数据的过 程,提高访问效率
3、便于用户对空间数据及其操作的理解
CREATE [OR REPLACE] FUNCTION function name [([arg [{IN|OUT}] datatype,..... ] RETURN datatype {IS/AS} function_body_here
二、关键技术
(3)对象类型方法和用户自定义函数(UDF)
空间函数根据其执行功能和使用范围不同,可分 类为以下三种:类成员函数、空间关系函数(即拓扑 关系函数)和空间分析函数。类成员函数由于直接操 作对象的成员变量,实现功能相对简单,可采用有源 函数的方式,使用SQL语句在PL/SQL中实现。空间 关系函数和空间分析函数由于其算法复杂,适合使用 外部函数的方式,调用高级语言编写的DLL实现。