cracks是什么意思cks在线翻译读音例句-上海美容美发学校
2023年4月5日发(作者:两会看点)
第23卷第4期
2005年10月
佳木斯大学学报(自然科学版)
Journal of Jiamusi University (Natural Science Edition)
Vol. 23 No. 4
Oct. 2005
文寒编号:1008一1402(2005)04一0538一06
利用Spatial处理空间数据
周虹,刁树民
(佳木斯大学公共计算机教研部,黑龙江佳木斯154007
摘要:主要解释Oracle Spatial的核心概念,尤其是它在存储和分析空间数据方面的作用.首先介
绍了数据模型的概念,然后通过实例解释了如何把一个复杂的空间图形输入到数据库中,最后对如何高效
地查询指定内容进行了详细的描述.
关键词:空间数据;多边形;容忍误差;过滤
中图分类号:Mil文献标识码:A
随着无线定位技术的发展和电子地图的广泛应用,现在对空间数据存储、映射和分析的需求越来越
大.传统的数据库技术是把空间数据按X坐标和Y坐标存人数据库中,构成一个笛卡儿坐标系.但这种技
术只能进行很有限的索引和查询,无法对电子地图等进行无极缩放,且效率低下,远远不能满足现在的实
时定位要求.Oracle Spatial通过使用多种数据模型、索引和查询,弥补了这些不足.本文主要解释Oracle
Spatial的核心概念,尤其是它在存储和分析空间数据方面的作用.
1数据模型
Oracle Spatial可以存储四维数据,但为了说明的方便,本文只讨
论二维数据. Oracle Spatial有这样几种基本图素:点、线、多边形,每一
个元素都用它的顶点序列来描述.对于二维的元素,用序列(Xl, Yl,
X2, Y2, X3, Y3,…)表示,如右侧元素一坐标所示:
在多边形元素的坐标中,有一个顶点的坐标重复出现,Oracle
Spatial就知道该元素是多边形.如果没有这个重复出现的顶点坐标,
则Oracle Spatial无法知道该元素是多边形还是线.这些元素的有序
排列就构成了几何数据.多条线连接起来可以描述线路,两个多边形
组合起来可以描述一个中间带有小岛的湖泊,这个湖泊的坐标是{
0,0, 0,10, 10,10, 10,0, 0,0},小岛的坐标是1 4,4, 6,4, 6,6, 4,6,
4,4!.其中要注意三点:(1)内含的多边形不可以嵌套,即如果该小
岛上还有一个更小的湖,则要另外定义,不能嵌套;(2)对于单个的多
边形,其坐标序列按逆时针方向排列,如果内含另一个多边形,则里
面的多边形的坐标序列按顺时针方向排列;(3)最后一个顶点和第一
个顶点重合,以关闭该多边形.
元素}名称}坐标(顶点序列)
.
点
(1,2)
卜线
么2,5,1,3,0)
口多边形
(0,0,1,0,1,1,0,1,0,0
(10,0)
(10.10)
中间带有小岛的湖泊
崖
锡
然而仅有这些坐标还不足以来描述这个中间带有小岛的湖泊,因为还缺少坐标系(或称为空间参照
系)和容忍误差.比如,我们无法知道这个湖泊是10米还是10海里宽,也无法知道这个湖泊是在平原上还
是在崎岖的山向. Oracle Spatial默认的坐标系是笛卡儿坐标系,并且使用的是无量纲的单位.对于大型的测
量数据集(比如地球表面的地图).经常使用测量坐标系,比如NAD83等等.这种坐标系使用经度和纬度来
①收稿日期:2005 - 07 - 21
作者简介:周虹(1967一),女.黑龙江佳木斯人,教授,主要研究方向:数据挖掘与数据库技术.
第4期周虹,等:利用Spatial处理空间数据539
表示坐标,并能自动考虑地球表面曲率因素.当然,对于一个小的湖泊,用笛卡儿坐标系就足够了.另一个
要考虑的问题是坐标的精确度,几乎所有的坐标都有一定的误差容忍度,但Oracle Spatial默认的容忍误差
为零.给定一个坐标系和容忍误差,系统就能正确地查询和绘制空间数据.
2将数据存入表中
创建一个名为mylake的表,并对空间字段建立索引,可以执行如下哭L语句:
CREATE TABLE mylake(
featze_ id NU奈何明月照沟渠 MBER PRIMARY KEY,
二VARCHAR2(32),
勤学励志的名言 shape MDSYS. SDO _ GEOMETRY) ;
INSERT INTO user _ sdo _ geom - metadafa VALUES(
'州eke',
,山ape',
MDSYS. SDO - DIM - ARRAY(
MDSYS. SDO _ DIM _ EIEIVIEhIT(' X'
MDSYS.SDO DIM ELEMENT('Y'
0, 100, 0.05),
0, 100, 0.05))
NULL) ;
CREATE INDEX mylake_ idx ON mylake(shape)
INDEXTYPE IS MDSYS. SPATIAL _ INDEX;
第一句创建了一个想要建立的表,并包含一个shape字段以存储空间数据,至于MDSYS. SDO_ GEOM-
ETRY数据类型,我们以后再讨论;第二句告诉Oracle Spatial在表mylake中的空间数据,表user_ sdo
geom . _ metadata描述了该用户针对空间字段所使用的坐标系和容忍误差,该表有四个值:含有空间字段的
表的名称、含有空间数据的字段名、一个数组(描述每一维的最小值、最大值,以及容忍误差)、坐标系(如为
NULL, Oracle Spatial则使用系统默认的笛卡儿坐标系).本例中,表mylake使用了二维数据,单位从0到
100,容忍误差为0.05,采用了笛卡儿坐标系.
最后一句创建了空间索引,这是执行空间查询所
需的.Oracle使用两种空间索引类型:R一tree和Quad
一tree.如果该空间数据是测量数据(比如地图数据),
则必须使用R一tree以充分利用Oracle Spatial的功能.
在上例中没有指明索引的类型,则默认为R一tree.不
管哪种类型的索引,实现时对空间数据进行网格划分,
然后确定该空间图形数据在哪个网格或哪些网格中.
已经创建了索引表来存放空间数据,现在要做的
就是向里面填充数据.Oracle Spatial使用MDSYS. SDO
_GEOMETRY类型来存放空间数据,其定义是一种层
次结构,格式如下:
CREATE TYPE sdo _ geanetry AS OBJECT(
SDO _ GTYPE NUMBER,
SDO_SKID NUMBER,
SDO _ POINT SDO _ POINT _ TYPE,
SI刀_曰卫M_ INFO MDSYS.SDO_ ELEM_INFO _川盯认Y,
SDO_ORDINATES MDSYS. SDO _ ORDINATE _ ARRAY) ;
图2多种图形的网可靠覆盖
其中SDO_ GTYPE是一个用来定义整体形状的数字,即是线、球等等,它是一个四位数的整数,并且有
序排列,第一位代表了该图的维数,第二位代表了线形表示,这对三维或四维空间图形很重要,在二维图形
中,该值为零,最后两位代表了图形形状,值的范围是00到07,每个数值都代表特定的几何图形,如下表所
540佳木斯大学学报(自然科学版)2005年
示:
表1
数值几何图形描述
未知的几何体
点
直线或曲线
多边形
混合类
多点
多条直线或曲线
多个多边形
spatial忽略该值
单独一个点
包含一个线元素,可以是直线、曲线或二者
包含一个多边形元素,其内还可以包含另外一个多边形
不同类型元素的混合
包含一个或多个点
包含一个或多个线元素
包含多个多边形元素,彼此可以互不关联
5
01
位
仍
以
仍
伪
07
例如SDO_ GTYPE中矩形用2003表示,一条路面可以用2006表示.
SDO_ SRID数值描述了所使用的坐标系,该字段用来确保表中所有的几何图形使用同一种坐标系,该
数值和USER_ SDO_ GEOM_ METADATA表中的相同,如果为NUIL,则默认为笛卡儿坐标系.
Spatial也允许在一个几何图形内部定义一个单独的点,比如湖泊中的一个小点.该点可用来放置标
签、测量结果等等.SDO_POINT定义如下:
CREATE TYPE ado _ point_type AS OBJECr记承天寺夜游原文及翻译朗读 (
x NUMBER,
Y NUMBER,
Z NUMBER);
如果是一个二维几何图形,Z置为NULL.当然,有时整个SDO-POINT值也可置为NULL.
回到前面,SDO_ ORDINATES_ ARRAY是用来定义该几何图形的顶点序列,它存放在一个可变长的数
组中,格式如下:
CREATE TYPE sdo_ordinate_array AS VARRAY(1048576) of NUMBER;
对于上面的带有小岛的湖泊,SDO_ ORDINATES_ ARRAY值为(0,0,0,10,10,10,10,0,0,0,4,4,6,4,
6,6,4,6,4,4).上面提到的,这些值是成对的,第一个是X,第二个是Y,如果是三维的几何图形,值为三个
一组,最后一个是Z.
SDO_ ELEM_ INFO_ ARRAY描述SDO_ ORDINATES_ ARRAY中的多个元素,定义如下:
CREATE TYPE sdo_elem_ info_array AS VARRAY(1048576) of NUMBER;
在理解SDO_ ELEM_ IvfO_ ARRAY时,一次考虑3个值,每一组都描述了该几何图形中的一个元素.
上面例子中的湖泊由两个多边形元素组成,其SDO_ ELEM_ INFO_ ARRAY包含6个数:11,1003,1,11,
2印3,11.第一组的三个数1,1003,1表示第一个元素(湖泊)的起始顶点在SDO_ORDIN卖油翁原文朗读拼音 ATES_ARRAY中
从位置1开始,1003表示该元素(湖泊)是一个外部的多边形,最后一个1告诉Oracle Spatial用直线将所有
的顶点连接起来,如果是2,表示用圆弧将所有的顶点连接起来.第二组的11,2003,1表示第二个元素(小
岛)的起始顶点在SDO_ ORDINATES_ ARRAY中从位置11开始,2003表示该元素(小岛)是一个内部的多
边形,最后一个1同样表示直线连接.除了1003和2003以外的可取的值见下表:
值意思
1
2
1003
2003
点元素
线元素
外部多边形元素
内部多边形元素
要向表mylake中插人一个带有小岛的湖泊,执行的SQL语句为:
IVSEKr um叫lake,
fanh+ire
第4期周虹,等:利用即侧al处理空间数据541
11-416Calhoim',一一name
MDSYS. SDO _ GEOMETRY(
2(刀3,
N叮上,
NUIL,
MDSYS.SDO_ELEM_IIO'0_ARRAY(1,1003,1, 11,2003,1),
MDSYS. S加_ORDINATE_ ARRAY(0,0, 0, 10, 10, 10, 10,0, 0,0, 4,4, 6,4, 6,6, 4,6, 4,4)
));
向表mylake中添加两条船的SQL语句为:
INSERT INTO mylake VALUES(
12,一一feature_ id
'The Windswept',一二
MDSYS. SDO _ GEOMETRY(
2(刀3,
N班L,
NUIL,
MDSYS. SDO _ ELEM _ ROD _ ARRAY(1,1003,1) ,
MDSYS.SDO_ ORDINATE_ ARRAY(2,2, 3,2, 3,2, 2,3, 2,2)
)
);
INSERT INTO向址.VALUES(
12,一一feature_ id
'Blue Crest',一一name
MDSYS. SDO _ GEOMETRY(
20C日,
N切.L,
NUI毛,
MDSYS. SDO _ ELE 1 _ INFO _ ARRAY(1,1003,1) ,
MDSYS.SDO_ORDINATE _ARRAY(7,7, 8,7, 8,7, 7,8, 7,7)
)
);
3查询
Oracle Spatial在查询空间数据时分两步走,第一步先根据其空间索引初选出侯选行,第二步再对侯选
行进行精确匹配.这种“两步走”的策略可以充分利用所建立的索引.
在查询的第一步,使用Oracle Spatial的SDO_ FILTER函数进行过滤,其格式如下:
SDO_FILTER(geometxyl MDSYS.SDO-GEOMETRY,
geometry2 MDSYS. SDO _ GEOMETRY, paxame VARCHAR2)
第一个参数geometryl,是空间索引的一个字段名,第二个参数gemometry2,可以也可以不来自一个表,
并且不一定要经过空间索引,最后一个参数定义了过滤规则.如果最后一个参数是querytype二WINDOW,
则当geometryy2不来自一个表时,该过滤操作在内存中进行,并且性能优良;如果最后一个参数是querytype
= JOIN,则g刘邦项羽的历史故事 eometiy2必须来自表,并且性能取决于这两个表的空间索引的类型.如果过滤成功,返回
TRUE,否则,返回FALSE.例如:SELECT二boat,
FROM myUe t
WHERE featme记二12
AND SDO_ FILTER(t.ehape, mdsye.山_geometry(2003, NULL, NULL,
-d*.油_elem _ info _ way(1,1003,1) ,
mdsys.咖_ordhate_anay(2,2, 5,2, 5,s, 2,s, 2,2)),
542佳木斯大学学报(自然科学版)2005年
' querytype = W1DOW')=,ME,;
该查询显示一个指定的多边形里面的经过索引的网格框中所包含的所有的船,这并不意味着返回显
示的船就完全在这个矩形框里面,也可以只有部分接触.要精确查询,必须执行函数SDO_ RELATE. SDO
RELATE查看两个图形并确定它们是否以某种指定的方式相互作用.需要注意的是:SDO_ RELATE仅处理
二维数据.其格式如下:
SDO_RELATE(geometryl MDSYS. SDO_GEOMETRY, geometry2 MDSYS. SDO_GEOMETRY,
pararns VARCHAR2)
其参数前面两个与SDO- FILTER相同,仅最后一个不同.参数param‘除了有querytype值之外,还有一
个伪类型值,其中伪类型可以取值为:
" DISJOINT,内部和边界不相交
-TOUCH边界相交但内部不相交
" OVERLAPBDYDISJOINT一个目标和另一个目标的边界及内部都相交,但两个边界不相交,比如,一条
线,起始于一个多边形的外部,结束于该多边形的内部
"OVERLAPBDYINURSECT两个目标的边界和内部都相交
.EQUAL两个目标有相同的边界和内部
" CONTAINS一个目标的内部和边界完全包含在另一个目标的内部
-COVERS一个目标的内部完全包含在另一个目标的内部,并且边界相交
" INSIDE相反于CONTAINS, A INSIDE B表示B CONTAINS A
COVERDBY相反于COVERS,A
COVERDBY B表示B COVERS A
.ON一个目标的内部和边界在另一个目标的边界处(第二个目标含盖在第一个目标上),比如,一条
线在一个多边形上
" ANYINTERACT两个目标不分离,可以以任何形式相交
查询一个指定的矩形框中所有的船,可以执行如下SQL语句:
SUM name boat name
FROM mylake t
WHERE feature记= 12
Arm SDO _ FILTER(t. shape, rndsys. ado _ ge+netry(2003, IVUI.L,IVUI.L,
rods". ado _ elem _ info_二((1,AO, f),
rods如.咖_ordinate _array(2,2, 5,2, 5,5, 2,5, 2,2) ),
' querytype = WINDOW')=’Mu,
Arm SDO_ REIATE(t.shpe, mdsys.山_.eoexehy(2003, NUIL, NULL,
ndsys. ado _ elem _ info _ anay(1,1003 ,1) ,
rndsys.山_ordinate- array(2,2, 5,2, 5,5, 2,5, 2,2)),
' mstype二INSIDE querytype=wrNDOw' )='TRUE'
也可以结合使用伪类型来选择一些地点,它们与指定的多边形相接触或者在其内部,执行的查询语句
如下:
SELECT feature id id
FROM nsylake t
WHERE feature_ id二
AND SDO_ FILTER(tmdsys.咖_geornetry(2003, NULL, NUl比,
rodsys.
ndsys.
ado
sdo
曲ape,
info_array(1,1003,1),
ordinate _array(2,2, 5,2, 5,s, 2,s, 2,2)),
Iqueiytype二wnvDOw')=,Mu,
AND SDO_ RELATE(t.shape, mdsys.幽_Ssometry(2003, NULL, NULL,
第4期周虹,等:利用Spatial处理空间数据543
mdays.咖_elem _ info _ array(1, I幽,1),
mdsys.咖_ordinate _array(2,2, 5,2, 5,5, 2,5, 2,2)),
' masktype = INSIDE + TOUCH querytype二wllgww')二'TRUE'
除了SDO_ FILTER和SDO _ RELATE函数外,Oracle Spatial还提供了许多功能强大的查询函数,包括:
查询描述
SDO_ NN
SDO _ SDO_ W17HIN_
SDO_ GEOM
SDO_ GEOM
.SDO MBR
SDO
SDO_ GEOM.SDO_ INTERSECTION
最靠近的邻居
在一定距离范围之内的所有几何图形
该几何图形内最小的矩形框
两个几何图形之间的距离
显示两个几何图形相交的点集
四结束语
Oracle Spatial可以使用关系数据库来处理空间数据,它使用索引、多种查询以及函数,意味着复杂的空
间数据可以在大型数据库服务器上进行.随着移动应用技术的发展,如何交互式地储存并分析空间数据的
需求会大量增加,而Oracle Spatial提供了一个很好的解决方案.
参考文献:
[1) Meghraj Thakkar著,周琦,江民强,陈永革等译.Oracle DBA电子商务指南【M).北京:机械工业出版社,2002.
【幻赵乃真.Oracle9i从基础到应用【M).北京:人民邮电出版社,2002.
[3) Kevin I.oney,Marlene 71reriault. Oracle8i数据库管理员手册〔M).北京:机械工业出版社,2000.
(4) George Koch,Kevin Loney. Oracl‘完全参考手册【Ml.北京:机械工业出版社,1998.
[5) Kevin Larey,Marlene鄱阳湖面积 Theriault著,李纪松,周保太,周凤较等译.Oracle 8i数据库管理员指南[M).北京:机械工业出版社,2000.
[6) Michael Abbey, Michael J. Corey, Ian Abrarnsw著,乐嘉锦,王兰成等译.Omde8i学者指南[M).北京:机械工业出版社,2000.
[7l Rams. velpuri,Anand Adk山著,何江华,曲京等译.Oracle8备份与恢复手册【M).北京:机械工业出版社,1998.
(8) Charles A. Pads. Oracle9i Database Performance Tuning考试指南〔M).北京:机械工业出版社,2002.
[9] Edward Whalen,Mitchel Schoeter著高艳春,周兆确,唐艳军译.Oracle性能调整与优化〔M].北京:人民邮电出版社,2002.
[101 Eyal Axonof, Noorali Sonswala著李逸波.王华驹,马赛红等译.Oracle8性能优化和管理手册【M].北京:机械工业出版社,2000.
[I1] Bruce Emst. Enterprise DBA Part IA: Architecture and Administration [R] Oracle Corporation Press .1999
[12]飞思科技产品研发中心.Oracle9i数据库高级管理【M].北京:电子工业出版社,2002.
[ 13] Oracle Spatial Home[ EB/OL]. htip: //otn. oracle. can/products/zpatiaUindex. html.
[14] Dominique Jeunot. Enterprise DBA Part 2:Perfamance and Tuning [R] Oracle Corporation Press. 1999.
[15] Chuck Murray. Oracle Spatial User's Guide and Reference(Release9.2) [R]Oracle Corporation March. 2002.
[16] Oracle Enterp‘二Manager Console Help File EDB(OLIhttp://otn.orwle.conYdocumentationtdaWxml0g.hW.
(171 Oracle Enterprise Manager Console Help File [DB/OL]http://otn.orade.corn/docmmtation/appeerverlOg.huTd.
[18] Sanjay Mislua. Compressing Data for Space and Speed [J]Oracle Magazine. March/April 2004.
Using Spatial to Process Geometry Data
ZHOU Hong,刀从口Sh“一min
(Canmiomltty Teaching Deperbnent成伪网uter, Jiarrunt Univers勺,JiarmW 154007, CLim)
Abstract: This article explains the,concepts of Oracle Spatial, particularly in its role as a way to store and
analyze spatial data. It firstly introduces the concepts of Data Model, then explains how to put a complex spatial geom-
etry to the database场an example, and finally gives the instruction how to query the specified content eficiently.
Key words: spatial; polygon; tolerance; filter
更多推荐
spatial是什么意思tial在线翻译读音例句
发布评论