基于改进四叉树索引的矢量地图叠加分析算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第16卷第4期2004年4月计算机辅助设计与图形学学报JO U RNAL OF COM PU T ER AI DED DESIGN &COM PU T ER GRA PHI CS V ol 16,No 4Apr ,2004

原稿收到日期:2003 01 20;修改稿收到日期:2003 04 04 本课题得到国家 八六三 高技术研究发展计划(2001AA135090)资助 董 鹏,男,1976年生,博士,主要研究方向为网络地理信息系统 李津平,男,1974年生,博士研究生,主要研究方向为网络地理信息系统 白予琦,男,1976年生,博士研究生,主要研究方向为网络地理信息系统 钱贞国,男,1972年生,博士研究生,主要研究方向为网络地理信息系统 杨崇俊,男,1954年生,博士,研究员,博士生导师,主要研究方向为网络地理信息系统及其应用

基于改进四叉树索引的矢量地图叠加分析算法

董 鹏

1,2) 李津平1) 白予琦1) 钱贞国1) 杨崇俊1)1)

(中国科学院遥感应用研究所遥感科学国家重点实验室 北京 100101)2)(北京市信息资源管理中心 北京 100088)

摘要 地图叠加是一种非常重要的G IS 空间分析功能 首先采用多边形穷举求交方法计算出线段相交点;然后运用引入/引出交点交替配对的叠加结果弧段生成原则,进一步实现了一种面面叠加双重循环算法;对传统四叉树的空间分割和结点分配方法进行改进,并利用改进的四叉树空间索引及其对空间数据的高效存取机制,对文中叠加算法进一步完善,从而极大地提高了计算效率 该算法已成功地应用在商业化的地理信息系统软件GeoBeans 开发中,具有很强的实用价值

关键词 空间叠加分析;多边形求交;四叉树;空间索引

中图法分类号 T P391

Vector Map Overlay Algorithm Based on Improved Q uadtree Indexing

Dong Peng

1,2) Li Jinping 1) Bai Yuqi 1) Qian Zhenguo 1) Yang Chongjun 1)1)(T he S tate K ey L aboratory of Re mote Sensing Inf or mation Scie nc es ,Institu te o f Remote Sensing App lic ations,

Chinese A cademy of Sciences,Beij ing 100101)2)(Beij ing

I nf or mation Resources M anagement Ce nter ,Beij ing 100088)Abstract Map overlay is an important spatial analysis in geographic information systems(GIS) First,it finds out intersection points of line segments,then uses the m atching principle of import ex port intersection point to form the result arcs and further realizes the dual loop algorithm of polygon on polygon and line on polygon overlay analysis T he original quad tree index ing structure is improved to handle space split and node assignment,resulting in enhancing the computation speed This algo rithm has been applied to the softw are development of commercial geog raphic information systems

Key words spatial overlay analysis;polygon intersection;quad tree;spatial indexing

1 引 言

地图叠加分析作为地理信息系统基本的和有效

的空间分析功能之一,提供矢量、栅格一体分析,可

对不同要素的图层进行空间叠加分析,帮助我们进

行专题分析,如将不同时间序列的海岸线图层进行叠加,可观察海岸线的沉陷、位置偏移等 空间叠加

分析将两层或多层地图要素进行叠加产生一个新要

素层,其结果是将原来要素分割生成新的要素,新要

素综合了原来两层或多层要素所具有的属性[1] 有两种不同类型的叠加操作:栅格与栅格叠加[2];矢量与矢量叠加 栅格叠加逐个地在每一个地图像素或网格单元上进行布尔算术操作,比矢量

叠加要相对容易实现;矢量叠加是一个相当复杂的处理过程,是将多个拓扑关系按一定的叠加运算叠加在一起,产生新的要素和拓扑关系,生成新的数据文件 矢量叠加既涉及几何和属性的合并或交互作用,还包括相关的拓扑重构 矢量叠加操作按数据类型一般分为三类:点与多边形叠加、多边形与多边形叠加、线与多边形叠加 本文将着重讨论矢量地图的多边形叠加,并提出一种新的分析算法

2 多边形叠加分析基础

多边形与多边形叠加也称多边形叠加分析[3],即将同一地区、同一比例尺的两组或两组以上的多边形要素的数据文件进行叠加,根据两组多边形边界的交点来建立具有多重属性的新的多边形,叠加的结果为新的多边形数据文件 我们可以把此类问题归结为多边形(面图元)与多边形(面图元)的求交问题

多边形可以看成是线段的集合,判定两个多边形是否相交的问题可以变换为判断两个线段集合中的线段是否相交的问题[4] 当通过某种方法计算出两个多边形的全部交点后,下一步计算就是截取其中一个多边形位于另一个多边形之内的部分 如彩图1(见彩图页ix)所示的多边形A和B(二者都是带有内环的复杂多边形,内外环方向相反),我们称A为叠加多边形,B为被叠加多边形 A与B的交点可以分为两种:(1)叠加多边形A的边界沿其走向经交点进入被叠加多边形B,此类交点称为 引入交点[5];(2)A的边界经交点走出(离开)B内部,此类交点称为 引出交点 另外,从彩图1(见彩图页ix)中还可以看到,作为叠加结果图元(彩图1中两个横纹区域)的边界的一部分,A的边界上位于B 内部的部分弧段,都是始于 引入交点,止于 引出交点,并且这些 引入交点和 引出交点都是交替成对出现的 每一对交点之间的部分就是叠加图元位于被叠加图元之内、应予以截取的部分 因此,我们得到计算多边形叠加的一般方法:

Step1 按一定方向记录多边形顶点坐标串(内外环方向相反);

Step2 计算出全部交点,并识别引入交点和引出交点;

Step3 从叠加多边形边界中提取始于引入交点而止于引出交点的边界;

Step4 从被叠加多边形边界中提取始于引出交点而止于引入交点的边界;

Step5 根据交点之间的连接关系形成闭合多边形,即为叠加结果多边形

关于叠加分析中的多边形求交问题,研究人员提出了一些方法,如梯形交组成方法[4]、穷举方法[5]、栅格化方法[6]、平面扫描方法[7]等 这些方法考虑的仅仅是如何快速地进行线段相交的判断并求出交点,而没有很好地考虑求交之后交点之间叠加结果弧段的判定以及拓扑连接重组,直到生成新的闭合多边形 为便于后续叠加操作的完成,特别是针对复杂多边形的求交问题,本文采用穷举方法进行多边形求交,并结合引入、引出交点配对原则,进一步提出矢量地图叠加分析的双重循环算法

3 矢量多边形叠加分析算法

我们用一个实例来详细地描述双重循环叠加分析算法,该算法采用C++语言编程实现

如彩图2(见彩图页ix)所示,有两个多边形A 和B,对这两个都带有岛(洞)的复杂多边形进行叠加操作 我们给彩图2中每个多边形的边界点加上点序(索引)号,从首点为0开始,并用箭头表示环的方向 多边形A有一个外环(顺时针方向),两个内环(逆时针方向);多边形B有一个外环(顺时针方向)和一个内环(逆时针方向) A共有41个顶点(包含每个环的首尾重合点),B共有37个顶点 其中,A所有的环首尾重合点为0(20),21(31)和32(41);B的环首尾重合点为0(23)和24(37) 下面分步骤对算法进行描述:

Step1 分别从两个输入图层中获取面图元A和B的点集、环的个数及每个环的点数

Step2 采用双重循环的方法,其中,外层循环是从顶点0和1所表示的首线段开始 依次从A的边界中取直线段,如果A的边界线段完全位于B图元的最小外接矩形(M inimum Bounding Rectangle,M BR)之外(可通过该线段的M BR与B图元的M BR的位置关系进行判断),说明该线段不与B图元的所有边界线段相交,则结束本次循环,执行下一次循环 内层循环同样从顶点0和1所表示的首线段开始,依次从B的边界中取线段,然后进行两线段相交的判定和交点的求解 为了减少计算量,可以先简单判断是否线段相交,然后再计算交点 具体方法见文献[4]

本文算法主要采用了两个数据结构GFPoints和I ndex V ector 其中GFPoints是一个用于存储多个顶点坐标的动态点集链表类,其意义可以是一条由多个顶点相连而成的弧段 它提供了一系列成员函数,用于动态地维护坐标点集 我们用这个类的对象来存储线段交点,其结构为

class GFPoints

{!

531

4期董 鹏等:基于改进四叉树索引的矢量地图叠加分析算法

相关文档
最新文档