CN102236721B - 空间数据引擎中复杂窗口空间信息提取方法 - Google Patents

空间数据引擎中复杂窗口空间信息提取方法 Download PDF

Info

Publication number
CN102236721B
CN102236721B CN201110219571.0A CN201110219571A CN102236721B CN 102236721 B CN102236721 B CN 102236721B CN 201110219571 A CN201110219571 A CN 201110219571A CN 102236721 B CN102236721 B CN 102236721B
Authority
CN
China
Prior art keywords
polygon
data
line
information
window
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110219571.0A
Other languages
English (en)
Other versions
CN102236721A (zh
Inventor
王结臣
谢顺平
蒲英霞
陈刚
马劲松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201110219571.0A priority Critical patent/CN102236721B/zh
Publication of CN102236721A publication Critical patent/CN102236721A/zh
Application granted granted Critical
Publication of CN102236721B publication Critical patent/CN102236721B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

空间数据引擎中复杂窗口空间信息提取方法,提出一种将线及多边形图层数据按照扫描带分带存储的思想,为线和多边形数据库表构建相应的辅助表,空间数据实现分带存储,以借助这种辅助表加速空间信息提取运算效率;复杂窗口空间信息提取时,将复杂的空间关系运算转化为同一条带上的单元之间的相交或重叠判断,大大简化运算的复杂程度,避免大量的弧段求交和弧段打断重组等过程,提高运算效率,杜绝运算错误。本方法相对于传统矢量图元素空间关系运算具有无可比拟的优越性,主要体现在算法简单、程序量少、处理效率高;而相对于传统纯栅格图的元素空间关系运算方法而言,又具有运算量小、运算速度快、精度高的优点。

Description

空间数据引擎中复杂窗口空间信息提取方法
技术领域
本发明属于空间数据引擎领域,特别地涉及一种用于空间数据引擎中复杂窗口提取空间信息的方法。
背景技术
空间数据引擎(Spatial Data Engine)是位于应用程序和数据库管理系统(RDBMS)之间的一种中间件技术,其实质是基于商用数据库构建空间数据库,以提供数据存储、管理的功能。用户通过空间数据引擎将各种来源的空间数据提交给RDBMS进行统一管理,也可以通过空间数据引擎从RDBMS中提取满足需要的数据。基于空间数据引擎的应用系统一般可以划分为三个层次:前台客户端、中间层应用服务器和后台数据库服务器,空间数据引擎属于中间层应用服务器,它向客户端提供一套空间数据的访问接口,处理客户端的请求,执行空间查询,从后台数据库服务器获得数据并返回给客户端。空间数据引擎中如何实现数据的高效快速提取是评判空间数据引擎系统设计优劣的一项重要指标。
空间数据引擎向客户端提供的访问接口是通过一套符合OpenGIS规范的空间函数实现的,这套空间函数是对关系数据标准查询语言(SQL)的一种扩充,它要解决的是如何操纵空间数据和执行各种空间查询等问题。
窗口空间信息提取主要是指多边形窗口对点图层、线图层或多边形图层的信息提取,一个图层在数据库中就是一张表,表中记录了图层中几何要素的空间信息和属性信息。多边形窗口对点图层、线图层和多边形图层的空间信息提取,结果可以是与窗口相交的点、线、多边形记录号,也可以是与窗口进行裁剪的结果点、线、多边形。空间信息提取主要步骤为:(1)客户端给空间数据引擎发送请求,该请求是一条空间查询语句,语句给定了要查询的相关图层信息;(2)空间数据引擎解析查询语句,从数据库中提取数据,并按照查询语句中的空间函数,执行相关处理得到满足条件的结果集;(3)空间数据引擎将满足条件的空间信息发送给客户端。
在上述步骤中,空间函数的实现效率决定了客户端与服务器之间消息传递响应的速度。目前,在这一环节中,针对空间信息的提取前人提出了一些相关的拓扑计算和多边形裁剪方法,这些方法虽然提高了空间查询效率,但是弧段之间的大量无效判断难以避免,在处理海量空间数据时效率较低,客户端和服务器端的响应速度较慢而难以满足应用。
发明内容
本发明要解决技术问题是:克服现有技术的上述不足,提供一种制图过程简单、运算速度快的空间数据引擎中复杂窗口空间信息提取方法。
为了解决以上技术问题,本发明提供的空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
a、针对数据库中的线数据表和多边形数据表,分别构建各自的辅助表;
其中,构建线数据表的辅助表方法如下:将线数据表读入内存,构成线图层,过线图层中各线目标的端点及转折点作水平扫描线,将与扫描线相交的线目标一次分割为若干线段单元,利用所有线段单元的信息建立线数据表的辅助表,并存入数据库,该线数据表的辅助表至少包括线段单元的编号信息、线段单元的端点坐标信息、以及线段单元所属线目标的信息;
构建多边形数据表的辅助表方法如下:将多边形数据表读入内存,构成多边形图层,过多边形图层中各多边形的所有转折点作水平扫描线,将多边形一次分割成若干多边形单元,所述多边形单元包括梯形、三角形,利用所有多边形单元的信息建立多边形数据表的辅助表,并存入数据库,该多边形数据表的辅助表至少包括多边形单元的编号信息、多边形单元的端点坐标信息、多边形单元所属多边形的信息;
b、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤,所述查询所涉图层对应的数据表包括:点数据表、线数据表的辅助表、多边形数据表的辅助表,过多边形窗口的转折点做水平扫描线,将多边形窗口一次分割成若干多边形窗口单元;
c、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤d;若查询对象为线数据,则转至步骤e;若查询对象为多边形数据,则转至步骤f;
d、将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,并转至步骤g;
e、利用线数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对线段单元二次分割,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤g;
f、利用多边形数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对多边形单元二次分割,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元进行三次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;
g、空间数据引擎将步骤d、e、f中返回的信息提取结果发送给客户端。
本发明中,线段单元与多边形窗口单元相交的判断方法是:当线段单元的两端点中只有一个端点位于同一多边形窗口单元内部,则表明该线段单元与多边形窗口单元相交。
多边形单元与多边形窗口单元相交的判断方法是:当多边形单元的任意斜边与多边形窗口单元的斜边相交,则表明该多边形单元与多边形窗口单元相交。其中,斜边与多边形窗口单元相交的判断方法可参见线段单元与多边形窗口单元相交的判断方法。
本发明的有益效果是:
(1)、执行空间信息提取时,将线分割成线段单元,多边形分割成多边形单元,并且将多边形窗口也进行了分割。多边形窗口对点的信息提取转化为点与多边形基元的包含关系判断;多边形窗口对线的信息提取转化为多边形单元对线段单元的裁剪及相交关系判断;多边形窗口对多边形的信息提取转化为图层间多边形单元对多边形单元的裁剪及相交关系判断。大大简化运算的复杂程度,避免大量的弧段求交和弧段打断重组等过程,提高运算效率,杜绝运算错误。
(2)、本发明方法将复杂的空间关系运算转化为位于同一条带上点与多边形(梯形)、线段与多边形(梯形)、多边形(梯形)与多边形(梯形)的空间位置关系判定,判断方法简单,易于实现,计算机的执行效率高;并且目标元素的端点、转折点以及与窗口多变性的交点都采用浮点数形式表示,在提高运算效率的情况下保证运算精度不受影响。因此,本方法相对于传统矢量图元素空间关系运算具有无可比拟的优越性,主要体现在算法简单、程序量少、处理效率高;而相对于传统纯栅格图的元素空间关系运算方法而言,又具有运算量小、运算速度快、精度高的优点。
(2)、对数据进行预处理,将线、多边形进行一次分割,将线打断成线段单元,将多边形分割为多边形基元,并以辅助表形式存储于数据库,查询时直接读取相应辅助表,可以优化数据查询处理速度。查询时无需再次进行一次分割,而可直接执行二次分割及三次分割,查询时所要执行的分割运算量大大减少,提高运算速率,加速空间数据查询的响应速度。
除此之外,本发明还提供了另一种空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
A、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤;
B、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤C;若查询对象为线数据,则转至步骤D;若查询对象为多边形数据,则转至步骤E;
C、多边形窗口的转折点做水平扫描线,将多边形窗口分割成若干多边形窗口单元,将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,转至步骤F;
D、过线图层中各线目标的端点及转折点、多边形窗口的转折点做水平扫描线,将线目标分割为若干线段单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上的线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤F;
E、过多边形图层中多边形的转折点、多边形窗口的转折点做水平扫描线,将多边形分割为若干多边形单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元再次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;
F、空间数据引擎将步骤C、D、E中返回的信息提取结果发送给客户端。
与前述空间数据引擎中复杂窗口空间信息提取方法相比,本提取方法在查询时对线数据、多边形数据进行分割,而不进行预处理,虽然运算数率、处理效率不及前者,但同样采用单元判别的方法,因此运算过程较传统方法更简单,查询效率更高且不会出错,具备本发明有益效果部分第一条、第二条的优点。
附图说明
下面结合附图对本发明作进一步的说明。
图1是本发明方法的流程图。
图2是线图层数据的线目标分解示意图,图层中有两条线目标。
图3是多边形图层数据的多边形分解示意图,图层中有两个多边形,图中给出了4个多边形单元示例,分别以横线和竖线填充;图中两个多边形被分解为25个多边形单元。
图4是多边形窗口对点数据的信息提取示意图,位于多边形内的点将被提取出来;多边形窗口与点的信息提取转化为多边形窗口单元与点数据的包含关系判定。
图5是多边形窗口对线数据的信息提取示意图,图中多边形窗口具有11条条带,线数据有5条条带,在进行信息提取时条带间交叉将生成17条条带。
图6是多边形窗口对线数据的信息提取结果示意图,以粗线条表示的线为线数据提取结果。
图7是多边形窗口对多边形数据的信息提取示意图,图中多边形窗口具有11条条带,多边形数据具有3条条带,在进行信息提取时条带间交叉将生成15条条带。
图8是在完成多边形窗口与多边形数据条带交叉后,针对条带中多边形单元与多边形窗口单元斜边相交计算过程示意图,图中虚线为基元间相交点所做的水平线,这将进一步细化多边形单元、多边形窗口单元。
图9是多边形窗口单元对多边形单元裁剪的信息提取过程,此过程中需要将多边形单元、多边形窗口单元进行分裂,保留重合部分,并剔除掉不重合的部分。
图10是多边形窗口对多边形裁剪过程边界追踪提取示意图,图中箭头表示以多边形单元、多边形窗口单元的斜边为基础进行的追踪方向示意。
图11是多边形窗口对多边形裁剪结果示意图,图中粗线条表示的多边形是最终提取结果。
具体实施方式
下面根据附图详细说明本发明,本发明的目的和效果将变得更加明显,图1为本发明方法的流程图。
在空间数据引擎中,窗口可以是通过在客户端绘制的一般规则或不规则多边形,也可以是数据库中经过基本查询过滤所得的多边形图层,其空间信息提取原理相同,为叙述简便,本发明以数据库中的多边形图层作为基本信息提取窗口。
本发明空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
a、针对数据库中的线数据表和多边形数据表,分别构建各自的辅助表;
其中,构建线数据表的辅助表方法如下:将线数据表读入内存,构成线图层,过线图层中各线目标的端点及转折点作水平扫描线,将与扫描线相交的线目标一次分割为若干线段单元,利用所有线段单元的信息建立线数据表的辅助表,并存入数据库,该线数据表的辅助表至少包括线段单元的编号信息、线段单元的端点坐标信息、以及线段单元所属线目标的信息;
构建多边形数据表的辅助表方法如下:将多边形数据表读入内存,构成多边形图层,过多边形图层中各多边形的所有转折点作水平扫描线,将多边形一次分割成若干多边形单元,所述多边形单元包括梯形、三角形,利用所有多边形单元的信息建立多边形数据表的辅助表,并存入数据库,该多边形数据表的辅助表至少包括多边形单元的编号信息、多边形单元的端点坐标信息、多边形单元所属多边形的信息;
在空间数据库中,空间数据及其属性数据存储在数据库表中,一张表代表一个图层,该图层数据为点、线或者多边形的一种。对于线和多边形数据的辅助表构建,附图2给出了线数据的分解过程,附图3给出了多边形数据的分解过程,在完成这种分解后,按照新的几何要素构建对应的辅助表。在附图2中,假定一张线数据表中有两条线,对组成线的每个点做水平扫描线,则可以将空间分为多个条带。图中所有的线共有12个顶点,12条水平线将线数据所在的空间分解为11个条带。在某条条带上有多条小线段,本发明称之为线段单元,且每个小线段属于已知的原线数据表中某条线,图中标记了每个小线段在该条带上的编号。因此,可以为每个线数据表新增一个辅助表,该表记录了所有的小线段,每条小线段作为辅助表中的一条记录。线数据辅助表的各字段及其意义如下表:
表1
Figure BDA0000080569520000091
因起始点和终止点的Y值和条带下扫描线Y值及上扫描线Y值分别相等,因此,没有必要再记录起始点和终止点的Y值。在预处理中,可以事先将线数据读入内存,待完成线数据的小线段链分解后,按照上述字段构建辅助表,然后将所有小线段信息存储入辅助表。线数据的线段链的分解步骤为:1)提取线数据表中所有数据,并记录所有线数据中所有点的Y值,将Y值按照从小到大排序;2)以每个Y值构建水平线,与原线数据做水平线求交,将线上线段打断成线段单元;3)将生成的线段单元信息按照上述字段信息存储入辅助表中。在辅助表中线段单元已经记录了相关信息,这为数据的查询检索提供了方便,既可以按照条带检索数据,也可以按照原来线数据编号与原线数据表进行连接,其查询及存储较为灵活。
如图3可见,假定一张多边形数据表中只有两个多边形,这种多边形可以是带洞结构的复杂多边形。同理,对组成多边形的每条线上的点,在该点做水平线,可以将多边形所在的空间进行划分。多边形将被分割为多个多边形单元组成的集合,这种多边形单元主要为梯形或三角形,其中三角形在多边形极值点处出现,可以看做是退化了的梯形。如图所示,图中有四条阴影填充的多边形单元,这些多边形单元在条带上规则排列。在数据库表中,可以将每个多边形单元存储为一条记录,则数据库表的字段设计如下表:
表2
Figure BDA0000080569520000101
因为多边形单元四点所在的Y值已经隐含在扫描带的上扫描线Y值和下扫描线Y值中,因此没有必要再记录四点的Y值。可以将多边形看做是由线组成,而多边形单元则可以看做是由条带上的小线段两两组合而成,因此,多边形的分解步骤为:1)提取多边形数据表中几何数据,并记录所有多边形数据中所有点的Y值,将Y值按照从小到大排序;2)以每个Y值做水平线,与多边形数据做水平线求交,将构成多边形的边界线打断成小线段;3)将生成每个小线段按照条带归类并有序排列;4)逐个条带遍历,在条带上按照从左至右的顺序将小线段两两组合,构成多边形单元的两条斜边,并将生成的多边形单元信息按照上述字段信息存储入辅助表中。在生成小线段时,每个小线段记录了所属的多边形编号,可以证明的是,在条带上,按照从左至右两两组合的小线段必定具有相同的多边形编号。
b、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤,所述查询所涉图层对应的数据表包括:点数据表、线数据表的辅助表、多边形数据表的辅助表,过多边形窗口的转折点做水平扫描线,将多边形窗口一次分割成若干多边形窗口单元;
空间数据引擎实现对客户端应用程序的监听,一旦有监听到客户端的请求,即接受来自客户端的查询语句并执行解析。多边形窗口可能是整个多边形图层也可能是满足某一条件的图层上的部分的多边形,同理,要提取的空间信息所在的图层也可能满足某一条件的几何要素。这时,就需要完成图形的基本过滤,因为辅助表中每个线段单元都记录了所在的线数据(线目标)编号,而每个多边形单元都记录了所在的多边形编号,因此,针对原线数据和多边形数据的查询过滤可以转化为按照满足条件的线编号或多边形编号直接对辅助表中数据完成查询过滤,提取所需的线数据或多边形数据。
c、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤d;若查询对象为线数据,则转至步骤e;若查询对象为多边形数据,则转至步骤f;
d、针对点数据的查询,将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,并转至步骤g。
对于点信息,若要返回与多边形窗口相交的点记录,或者返回被多边形裁剪的点数据,实际上都是返回位于多边形内部的点信息,这是一个判定点面包含的问题。在读取多边形窗口的辅助表后,多边形用几何基元集合表示,则点面包含判定变为点与基元的包含关系判定。附图4是关于多边形窗口对点的信息提取示意图,因为每一条带的上扫描线和下扫描线的Y值已知,根据某点的Y值可以得出该点位于哪条条带中,然后将点与条带上每个基元做包含关系判定。因为基元有两条边是平行关系,点位于某基元内部其判定比较容易,只要满足点位于基元某斜边右侧且位于另一斜边左侧就表示点位于基元内部,最后返回满足条件的点数据。
e、利用线数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对线段单元二次分割,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤g;
本步骤针对线数据的查询。针对线数据,若解析函数为提取相交线,返回与窗口多边形相交的线记录号;若解析函数为裁剪线,返回被窗口多边形裁剪后的新的线数据。多边形对线的提取比点提取复杂,在进行线与多边形裁剪运算时,需要在线与多边形相交的交点处将线打断,并提取处位于多边形内部的线。附图5是多边形窗口对线数据的提取示意图,图中显示了一条待提取的线数据,为叙述简便,仅给出了该线自身点构成的水平线及其条带。因为辅助表中将线数据存储为线段单元,多边形窗口存储为多边形窗口单元,因此,多边形窗口对线的提取转化为多边形窗口单元对线段单元裁剪。如5图中所示,窗口多边形自身具有条带信息,而线数据也带有条带信息,两类条带之间会出现交叉的情形。因此,需要合并条带,并多边形窗口单元和线段单元,这一过程表现为:提取线段单元所在的水平扫描线并用这些水平扫描线与多边形窗口单元进行扫描线求交,对多边形窗口单元按条带进一步细化;提取多边形窗口单元的水平扫描线对线数据的线段单元进行扫描线求交,对线段单元按条带进一步细化。这一运算过程的有益效果是,将线段单元和多边形窗口单元都限定在相同的条带系统中,便于同一条带上的对应基元和小线段可以完成裁剪等运算。
在完成上述过程后,多边形窗口与线数据的相交关系判定将变得简单,只用遍历条带上的线段单元,并将线段单元与对应条带上的多边形窗口单元进行相交关系判定,一旦相交则返回该线段单元所在的原线数据编号。而线段单元与多边形窗口单元的相交关系计算则主要是判定线段单元的两端点是否只有一端点位于同一多边形窗口单元内部,这一判定与上述点数据信息提取相同。而多边形窗口对线的裁剪需要在相交关系判定的基础上做进一步处理,本发明为原线数据中的每条线目标记录其线上的所有交点信息。即在上述相交关系判定中,若线段单元与多边形窗口单元斜边出现交叉,则计算交点信息,并根据该线段单元所在的线数据编号,将该条交点信息赋予原线数据。在完成上述处理过程后,判定初始端点和终止端点是位于多边形窗口单元内还是位于多边形窗口单元外,若位于多边形窗口单元内,则将该端点信息作为交点信息一并记录。这样每条线数据都具备了自己的交点信息,以线数据的初始端点为起点,对交点(包含位于多边形窗口单元内部的起始端点、终止端点)按照在该条线上出现的次序进行排序,按照排序的顺序,相邻交点依次两两组对,交点与交点之间所在的线就是裁剪结果。如图6所示,线数据与多边形窗口有8个交点,且初始端点位于多边形尾部,则交点与交点之间的部分为所需提取的结果,这可以通过追踪原线数据并结合交点坐标得到,在此不再赘述。
f、利用多边形数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对多边形单元二次分割,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元进行三次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;
本步骤针对多边形数据的查询,若解析函数为提取相交多边形,返回与窗口多边形相交的多边形记录号;若解析函数为裁剪多边形,返回被窗口多边形裁剪后的新的多边形数据。
与线数据的信息提取类似,在线数据信息提取中是将线段单元与多边形窗口单元进行比较,多边形数据的信息提取是将多边形生成的多边形单元与多边形窗口单元进行比较,完成相交关系判定多边形单元与多边形窗口单元之间的裁剪。附图7是多边形窗口对多边形数据进行信息提取的示意图,图7中央位置的多边形(五边形)将被左右两个窗口多边形完成信息提取。图中给出了窗口多边形的条带和欲提取信息的多边形具有的条带。很显然,两个图层所在的条带之间出现相互交叉,多边形单元与多边形窗口单元的运算需要转换到固定的扫描条带上。这一过程与线数据信息提取方法类似,用多边形窗口数据所在的水平扫描线与欲提取信息的多边形数据所在的多边形单元进行扫描线求交,用欲提取信息的多边形数据所在的水平扫描线线与多边形单元进行扫描线求交,这样可以对窗口多边形单元和多边形窗口单元进一步细化,使得多边形单元、多边形窗口单元具有统一的条带空间。
在完成上述过程后,若需要判定多边形窗口与哪些多边形相交,只需要遍历所有条带,将多边形单元与对应条带上多边形窗口单元进行相交关系判定,若两者相交则返回该基元所在的多边形编号即可。若需要用多边形窗口裁剪多边形数据,此时,需要提取多边形之间相交的部分,在同一条带上,多边形窗口单元与多边形数据单元会出现斜边相互交叉的情形,这不便于基元的进一步分类和基元信息的提取。如附图8所示,在完成交叉条带的细化后,遍历所有条带,在同一条带上,将窗口多边形单元的各斜边与多边形单元的各斜边两两进行相交关系判定,若相交则提取交点,最后对所有交点做水平扫描线,进一步细化多边形单元和多边形窗口单元。
在完成上述步骤后,多边形单元与多边形窗口单元已经完全被分割到统一的条带空间中,且多边形单元与多边形窗口单元之间不会出现斜边相互交叉的情况。遍历每条条带,将多边形单元与多边形窗口单元在对应条带上进行相交关系判定,若多边形单元与多边形窗口单元之间相交,则对多边形单元进行分裂,重合部分生成一个独立的重叠多边形单元,并保留重叠多边形单元,其余部分剔除,所述重叠多边形单元即是多边形窗口与多边形数据的信息提取结果。如附图9所示以横线填充的多边形单元为多边形数据在某条带上到的分解结果,以竖线填充的为多边形窗口单元在该条带上的分解结果,最后的提取结果为以横竖交叉线填充的两个重叠多边形单元,这两个重叠多边形单元正是多边形窗口与多边形数据在该条带上的重叠部分。
窗口多边形提取结果为裁剪后的多边形信息,因此,仅得到重叠多边形单元还不够,还需要对生成的重叠多边形单元进行组合形成多边形,这需要实现以重叠多边形单元为基础的边界追踪提取多边形。以附图10为例,条带间只保留有相互紧邻的重叠多边形单元,组成一个闭合的多边形。重叠多边形单元的边界追踪方法为,按条带遍历基元,并标记重叠多边形单元的两条斜边是否已经追踪过(初始状态为未追踪过),若未追踪过,将初始状态设置为向上追踪,在上一条带上找与当前条带斜边相接的重叠多边形单元,若未找到则追踪重叠多边形单元的另一斜边,并向下追踪。按此方法逐步追踪,记录斜边坐标且将追踪过的斜边标记为已追踪,最后追踪回初始重叠多边形单元,生成一条闭合的多边形,附图11中以粗线条表示的两个多边形为最终追踪结果。
g、空间数据引擎将步骤d、e、f中返回的信息提取结果发送给客户端。
本步骤中,空间数据引擎将信息提取结果发送给客户端。主要分为两种,一种是返回与多边形窗口相交的空间信息,这只用按照计算得到的点、线、多边形编号查询数据库并返回结果即可;若是返回裁剪结果,则将计算得到的点、线、多边形数据直接返回客户端。
除了上述方法之外,本发明还提供了一种与上述实施例接近的一种方法。
空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
A、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤;
B、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤C;若查询对象为线数据,则转至步骤D;若查询对象为多边形数据,则转至步骤E;
C、多边形窗口的转折点做水平扫描线,将多边形窗口分割成若干多边形窗口单元,将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,转至步骤F;
D、过线图层中各线目标的端点及转折点、多边形窗口的转折点做水平扫描线,将线目标分割为若干线段单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上的线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤F;
E、过多边形图层中多边形的转折点、多边形窗口的转折点做水平扫描线,将多边形分割为若干多边形单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元再次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;
F、空间数据引擎将步骤C、D、E中返回的信息提取结果发送给客户端。
两种方法的区别在于,第一种方法对空间目标进行多次分割,并且将一次分割结果存储于辅助表中,之后的查询直接读取辅助表,最大限度的节约资源,提高运算效率;第二种方法采用一次性分割到位的方式,虽然步骤有所简化,但每次查询时的运算量确有所增加,没有最大限度的节约系统资源,处理效率也较前者低。
然而两种方法的核心思想都在于将复杂的空间数据位置关系判定转化为同一条带上的单元之间的相交或重叠判断,降低运算的复杂程度,提高了运算速度,并且保证运算精度。
除上述实施例外,本发明还可以有其他实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围。

Claims (4)

1.空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
a、针对数据库中的线数据表和多边形数据表,分别构建各自的辅助表;
其中,构建线数据表的辅助表方法如下:将线数据表读入内存,构成线图层,过线图层中各线目标的端点及转折点作水平扫描线,将与扫描线相交的线目标一次分割为若干线段单元,利用所有线段单元的信息建立线数据表的辅助表,并存入数据库,该线数据表的辅助表至少包括线段单元的编号信息、线段单元的端点坐标信息、以及线段单元所属线目标的信息;
构建多边形数据表的辅助表方法如下:将多边形数据表读入内存,构成多边形图层,过多边形图层中各多边形的所有转折点作水平扫描线,将多边形一次分割成若干多边形单元,所述多边形单元包括梯形、三角形,利用所有多边形单元的信息建立多边形数据表的辅助表,并存入数据库,该多边形数据表的辅助表至少包括多边形单元的编号信息、多边形单元的端点坐标信息、多边形单元所属多边形的信息;
b、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤,所述查询所涉图层对应的数据表包括:点数据表、线数据表的辅助表、多边形数据表的辅助表,过多边形窗口的转折点做水平扫描线,将多边形窗口一次分割成若干多边形窗口单元;
c、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤d;若查询对象为线数据,则转至步骤e;若查询对象为多边形数据,则转至步骤f;
d、将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,并转至步骤g;
e、利用线数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对线段单元二次分割,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤g;
f、利用多边形数据表的辅助表中的扫描线信息,对多边形窗口单元进行二次分割,利用多边形窗口的扫描线信息对多边形单元二次分割,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元进行三次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤g;
g、空间数据引擎将步骤d、e、f中返回的信息提取结果发送给客户端。
2.根据权利要求1所述的空间数据引擎中复杂窗口空间信息提取方法,其特征在于:线段单元与多边形窗口单元相交的判断方法是:当线段单元的两端点中只有一个端点位于同一多边形窗口单元内部,则表明该线段单元与多边形窗口单元相交。
3.根据权利要求1所述的空间数据引擎中复杂窗口空间信息提取方法,其特征在于:多边形单元与多边形窗口单元相交的判断方法是:当多边形单元的任意斜边与多边形窗口单元的斜边相交,则表明该多边形单元与多边形窗口单元相交。
4.空间数据引擎中复杂窗口空间信息提取方法,包括以下步骤:
A、空间数据引擎接收来自客户端的查询请求,解析查询语句,读取查询所涉图层对应的数据表,完成基本的查询过滤;
B、判断要执行空间查询对象的类型,若查询对象为点数据,则转至步骤C;若查询对象为线数据,则转至步骤D;若查询对象为多边形数据,则转至步骤E;
C、过多边形窗口的转折点做水平扫描线,将多边形窗口分割成若干多边形窗口单元,将落入所有多边形窗口单元的点信息作为点数据的信息提取结果返回给空间数据引擎,转至步骤F;
D、过线图层中各线目标的端点及转折点、多边形窗口的转折点做水平扫描线,将线目标分割为若干线段单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交线数据,遍历所有由相邻扫描线构成的条带上的线段单元,将与多边形窗口单元相交的线段单元所属线目标的信息作为相交线数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪线数据,遍历所有由相邻扫描线构成的条带上的线段单元,记录与多边形窗口单元相交的线段单元所属线目标的信息及交点信息,遍历完成后,为每条线目标记录其线上所有交点信息,并将位于多边形窗口单元内部的线目标的初始端点、终止端点作为相应线目标的交点予以保存,以线目标的初始端点为起点,对线目标上的各交点出现次序排序,按照排序的顺序,相邻交点依次两两组对,成对交点之间的线段即为裁剪结果,并将该成对交点之间的线段作为裁剪线数据的信息提取结果返回给空间数据引擎,并转至步骤F;
E、过多边形图层中多边形的转折点、多边形窗口的转折点做水平扫描线,将多边形分割为若干多边形单元,同时将多边形窗口分割成若干多边形窗口单元,若查询对象为相交多边形数据,遍历所有由相邻扫描线构成的条带上的多边形单元,将与多边形窗口相交的多边形单元所属多边形的信息作为相交多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;若查询对象为裁剪多边形数据,则过多边形单元与多边形窗口的交点作水平扫描线,将与该水平扫描线相交的多边形单元及多边形窗口单元再次分割,遍历所有由相邻扫描线构成的条带上的多边形单元,将多边形单元与多边形窗口单元重叠部分作为独立的重叠多边形单元,以重叠多边形单元为基础进行边界追踪提取多边形,并将所述通过边界追踪获得的多边形作为裁剪多边形数据的信息提取结果返回给空间数据引擎,并转至步骤F;
F、空间数据引擎将步骤C、D、E中返回的信息提取结果发送给客户端。
CN201110219571.0A 2011-08-02 2011-08-02 空间数据引擎中复杂窗口空间信息提取方法 Expired - Fee Related CN102236721B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110219571.0A CN102236721B (zh) 2011-08-02 2011-08-02 空间数据引擎中复杂窗口空间信息提取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110219571.0A CN102236721B (zh) 2011-08-02 2011-08-02 空间数据引擎中复杂窗口空间信息提取方法

Publications (2)

Publication Number Publication Date
CN102236721A CN102236721A (zh) 2011-11-09
CN102236721B true CN102236721B (zh) 2012-12-12

Family

ID=44887367

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110219571.0A Expired - Fee Related CN102236721B (zh) 2011-08-02 2011-08-02 空间数据引擎中复杂窗口空间信息提取方法

Country Status (1)

Country Link
CN (1) CN102236721B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708109B (zh) * 2012-01-12 2014-05-14 北京地拓科技发展有限公司 栅格数据的读取方法和装置,栅格数据的写入方法和装置
CN103823860B (zh) * 2014-02-24 2019-12-13 中国科学院地理科学与资源研究所 基于cpu+gpu架构的多边形数据空间关系查询并行系统
CN106960029B (zh) * 2017-03-21 2020-07-28 刘博宇 一种提取跨图幅地理范围分幅栅格数据的方法
CN107566474A (zh) * 2017-08-28 2018-01-09 荆门程远电子科技有限公司 基于移动平台的三维虚拟地球多源异构数据下载和集成方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101320371A (zh) * 2008-07-07 2008-12-10 华南师范大学 一种基于可放缩矢量图形的空间信息分析方法
US20100114905A1 (en) * 2008-11-03 2010-05-06 Elvin Slavik Method, System, and Product for Managing Spatial Data in a Database
CN101504659B (zh) * 2009-03-03 2011-01-12 成秋明 一种基于广义自相似性原理提取地学空间信息的方法

Also Published As

Publication number Publication date
CN102236721A (zh) 2011-11-09

Similar Documents

Publication Publication Date Title
Fei et al. Innovation, capital accumulation, and economic development
US9098591B2 (en) Spatio-temporal data management system, spatio-temporal data management method, and machine-readable storage medium thereof
CN104361113B (zh) 一种内存‑闪存混合存储模式下的olap查询优化方法
CN106933833B (zh) 一种基于空间索引技术的位置信息快速查询方法
CN106844664B (zh) 一种基于摘要的时间序列数据索引构建方法
CN110765331B (zh) 一种时空数据的检索方法及系统
CN107766471A (zh) 一种多源数据的组织管理方法与装置
CN102867066B (zh) 数据汇总装置和数据汇总方法
CN108804602A (zh) 一种基于spark的分布式空间数据存储计算方法
CN102236721B (zh) 空间数据引擎中复杂窗口空间信息提取方法
CN107943952A (zh) 一种基于Spark框架进行全文检索的实现方法
CN106528793A (zh) 一种分布式空间数据库的时空分片存储方法
CN106251331A (zh) 一种倾斜测量场景中地物的提取方法
CN100585638C (zh) 基于线框的曲面体三维边界表示模型重建方法及其装置
CN104794221A (zh) 一种基于业务对象的多维数据分析系统
CN104731984B (zh) 汽车轮毂表面样点r树上溢结点增量式聚类优化方法
CN101692230A (zh) 顾及多细节层次的三维r树空间索引方法
CN104820684A (zh) 一种基于空间位置的快速联机分析处理方法
CN102521364A (zh) 一种图上两点间最短路径查询方法
CN105183795A (zh) 基于内容的遥感图像变化检测信息检索方法
CN103559209B (zh) 一种Voronoi Diagram与虚拟网格结合的高效空间最近邻查询方法
CN113254517A (zh) 一种基于互联网大数据的服务提供方法
WO2020114273A1 (zh) 商户查找方法、装置、电子设备和存储介质
CN101533525B (zh) 一种用于地理信息系统中的点面叠加分析方法
CN117290455A (zh) 一种多源地理空间数据的一体化管理系统及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121212

Termination date: 20150802

EXPY Termination of patent right or utility model