一种有效的线状缓冲区生成算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4结束语
为验证上述算法,笔者用Visual C++6.0编程语言
眵/7 ·一
对算法给予实现,为了更好地说明本算法生成的线状缓 冲区可以最大限度地保证双线的等宽性,用文献[3]中的 实验数据进行了测试,实验结果如图7(a)所示。文献[3]
生成的线状缓冲区结果如图7(b)所示。从固7(b)中可
图6凹点缓冲点的生成 Fig.6 The generation of buffer points of concave point
(’
图3采用向量叉乘判断向皇排列
№.3 Judging the arrangement of vector usmg
vector cross multiplication
若S>O,则ABC呈逆时针,顶点为凸点; 若S<0,则ABC呈顺时针,顶点为凹点; 若S=0,则ABC 3点共线。
3)轴线端点缓冲点的生成 如图4所示,设待生成缓冲区的轴线端点A(Xa, y口),将矢量AB绕点A以r为半径逆时针旋转,旋转角甜
PENG Li。HE Zhen—ming,LIU Shao—hua,GUO Ping—ping (College of Geoscience,Yangtze University,Jingzhou 434023,China)
Abstract:Buffer analysis is one of the several important analysis functions of geographical information system(GIS).In this paper,舳 effective algorithm of generating linear buffer based on rotation transform point of polyline is proposed,which further impmves the algo- rithm p阳sented by LI Zhigang,simplifies the process of generating berderline of linear buffer,and finds a better solution to the equal
图2角平分线法的凸点缓冲区
Fig.2
The buffer of convex points using the
metlIod of angle bisecting
收稿日期:2008—02—18 基金项目:江西省数字国土重点实验室开发研究基金(DLLl200601);湖北省高等学校优秀中青年团队计划项目基金(它00602)资助;
取值从"n/2开始,按步长f依次递增,直到∞=3,n/2(为
了叙述方便,取步长孝=椭)。半圆弧拟合计算公式如
下: ①矢量AB与菇轴正向夹角a的计算
令从=Xb—Xa,AY=Yb—Ya
当AX>0时,a=aretg(,AY/AX) 当AX<0时,a=arctg(△Y/AX)+1T
当似=0时,若lib>Ira时,a=1『/2;若Yb<Ya时,a
量BB,,再将矢量BC绕点曰以r为半径逆时针旋转(p+
万方数据
砒得矢鲫翮公式~=器刚 62
测绘与空间地理信息
2008年
中,l,为矢量AB与BC的夹角,r,=r/sin(∥2)。
3.2算法实现详细步骤
很容易计算出矿角。特殊情况处理,当盯角不能以旋转
1)沿轴线的走向,先做首端点A的缓冲区半圆弧段。
步长恰好等分时,k=o-/A-I-1。
4)轴线转折点缓冲点的生成 ①凸点缓冲点的生成 如图5所示,将矢量BC绕点日以r为半径逆时针旋
转,旋转角m,取值从(矽+,a12)开始,按步长A依次递增, 直到m川=l,+竹/2+盯。其中1/为矢量AB与BC的夹 角,矿为矢量BB.与BB,间的夹角,k=tr/A。盯角的确定,
首先将矢量BC绕点曰以r为半径顺时针旋转以,得矢
的等宽性。实验证明,本算法思想简单,实现容易,效果理 想,较好地解决了双线的等宽性,保证了双线的等宽性。
(a'
Co)
Fig.7
图7改进前后效果对比
The comparison between the results before and after improvement
参考文献:
[1] 王家耀.空间信息系统原理[M].北京:科技出版社,
2)轴线转折点凸凹性的判断 本算法非常重要的一环是轴线折点凸凹性的自动判 断。此问题可转化为两个矢量的叉积:把相邻两个线段 看成两个矢量,其方向取坐标点序方向。若前一个矢量 以最小角度扫向第2个矢量时呈逆时针方向,则为凸顶 点,反之为凹顶点。具体算法过程如下16’: 由矢量代数可知,矢量AB,BC可用其端点坐标差表 示,如图3所示。 矢量代数叉积遵循右手法则。即当ABC呈逆时针方 向时,s为正,否则为负。
长江大学发展基金(2006)资助 作者简介:彭李(1983一),男,湖北江陵人,在读硕士研究生,主要研究方向为”3s”技术集成与应用、GIS应用及图形算法研究。
万方数据
第5期
彭李等:一种有效的线状缓冲区生成算法
61
2算法的改进
文献[3]对角平分线算法建立线状缓冲区算法进行
了改进,但还是没有很好地解决双线的等宽性。如图2所
2001.
[2] 毋河海.关于GIS缓冲区的建立问题[J].武汉测绘科技 大学学报,1997,22(4):358—364.
[3】李志刚,胡圣武.关于角平分线法建立线状缓冲区算法 的改进[J】.测绘信息与工程,2005,30(5):35—36.
[4] 程鹏根,龚健雅.机助制图中平行线的绘制方法及其特 殊fn】题的处理[J].武测科技,1994,(1):43—52.
1角平分线算法概述
角平分线算法比1(简单平行线法)是在轴线首末点 处,做轴线的垂线并按缓冲区半径尺截出左右边线的起 止点,在轴线的其它转折点上,用与该线所关联的前后两 邻边距轴线的距离为R的两平行线的交点来生成缓冲区 对应顶点。如图l所示。
Fig.1
图1角平分线法 The method of angle bisecting
3)做轴线上末端点的缓冲区。轴线上末端点的缓冲 区生成方法与做首端点的缓冲区类似,将所生成缓冲区 边界的顶点依次添加到点集链表中;
4)仿照以上轴线右侧缓冲区的生成,从轴线的最后
一点开始,生成轴线左侧缓冲区;
J,
c
户【|扎
5)将轴线上各点在线缓冲区边界上的所有对应点, 按逆时针方向连接即可得到线状缓冲区的边界多边形。
width of double parallel line.Finally,it tests the algorithm by using empirical data.
Key words:buffer;geographical information system;algorithm
O引 言
缓冲区分析(Buffer analysis)是地理信息系统中使用 非常频繁的一种空间分析,是对空间特征进行度量的一 种重要方法。缓冲区是根据空间数据库中的点、线、面地 理实体或规划目标,自动建立其周围一定宽度范围的多 边形¨J。所谓缓冲区就是地理空间目标的一种影响范围 或服务范围,如水库淹没范围、城市规划中街道拓宽后的 房屋拆迁范围、化工厂爆炸后有毒物质影响的范围,公共 设施(商场、银行、医院、车站、学校等)的服务半径等,也 就是邻近度(Proximity)问题。
[5]刘湘南,黄方,王乎,等.GIS空间分析原理与方法[M]. 北京:科学出版社,2005.
[6] 邬伦,刘瑜,张晶,等.地理信息系统——原理、方法和应 用[M].北京:科学出版社,2001. [编辑:王明曦]
万方数据
第31卷第5期 2008年1 O月
测绘与空间地理信息
GEOMATICS&SPATIAL INFORMATION TECHNOLOGY
v01.31,No.5 Oct.,2008
一种有效的线状缓冲区生成算法
彭 李,何贞铭,刘少华,郭平平
(长江大学地球科学学院,湖北荆州434023)
摘要:缓冲区分析是地理信息系统重要的空间分析功能之一。本文对线状缓冲区算法做了进一步改进,提出
情况,但是该校正措施繁琐复杂。针对这种情况,本文提
出一种基于轴线(线状目标)转折点旋转生成线状缓冲区
算法,该算法思想简单,实现容易,效果理想,较好地解决
了双线的等宽性。保证了平行曲线的等宽性。
求轴线的缓冲区边界多边形,只要求出轴线上各转
折点在线缓冲区边界上的所有对应点即可。如何简单有
效地生成边界上的各点,是本算法的关键之一。算法基
②凹点缓冲点的生成
以看出在尖锐转角处,凸侧角点随着角度的进一步变锐 会沿角平分线远离轴线顶点,双线的等宽性就会遭到破 坏。本文提H{的算法较好地解决了这一问题,简化了线 状目标缓冲区边界的生成过程,最大限度地保证了双线
如图6所示,将矢量BC绕点占以r’为半径顺时针旋
转(耽),得矢量BB 7,B’即为轴线转折点口的缓冲点。其
一种基于轴线转折点旋转生成线状缓冲区的算法,简化了线状目标缓冲区边界的生成过程,较好地解决了双线
的等宽性。最后用实验数据对算法进行了测试,结果表明算法是可行的。
关键词:缓冲区;地理信息系统;算法
中图分类号:P208
文献标识码:B
文章编号:1672—5867(2008)05—0060—03
An Effective Algorithm of Generating Linear Buffer
3算法实现及步骤
3.1 本算法实现的关键问题 1)轴线的直线性判断 为简化计算过程,首先进行相邻3点的直线性判断。
当相邻3点处于近似共线状态时,用直线代替。本文采用 的判断方法是点到直线距离法,即直接利用解析几何中
l/■7面(2) 的距离公式: d=l Ax+研+c 其中舭+研+C=0为过首末点的直线方程,茗、Y为 相邻3点中相对中间点的坐标,d为该中间点到直线舭+ 毋+e=0的距离。当d小于某一给定值时,相邻3点可 视为直线,这样可以简化计算过程"J。
=3亿/2
②第i点坐标
Xi=Xa+r×cos(a+i×f),耽=Xa+r X sin(a+i× 亭)。 (其中i=1,2,3…)
/ 一l
∥\
∥.
\
产、二\
\磊一一一7j :《
x。
\,/,|
卜、
I
\
\么 I
\、
、’}= ,I-■一∥6夕胛
Pig.4
图4端点缓冲点的生成 The generation of buffer points of extreme point
示,在尖锐转角处,凸侧角点曰随着角度的进一步变锐会
沿角平分线远离轴线顶点。根据图2,远离情况可由式
(1)表示:
d=R/sin(B/2)
(1)
由式(1)可知,当缓冲区半径不变时,d随张角8的
减小而增大,结果在尖角处双线之间的宽度遭到破坏。
为了克服该缺点,文献[4]曾进行了深刻地分析和研究,
提出了多准则的判别方案,虽较好地解决了出现的异常
将生成缓冲Ⅸ边界的顶点依次添加到点集链表中;
\ J,
~ \\口5
\ C
土m///
,///沁
.。//
毖三二j一11\一?-
8
7卜
i?
Fig.5
图5凸点缓冲点的生成 point The generation of buffer points of convex
2)从首端点开始,沿轴线的走向,依次取两个相邻有 向线段(3个相邻顶点),对中间点(第n个转折点)8做 其右侧的缓冲区。如果为凸点则以缓冲半径的圆弧拟 合;如果为凹点则以该点关联的线段,以缓冲半径绕该点 旋转一定角度求得该点的缓冲点;如果3点共线,只需求 出前一线段的右侧平行线段的末端点或后一线段的右侧 平行线段的首端点即可。将所生成缓冲区边界的顶点依 次添加到点集链表中;
本思想:在轴线两端点处以半Biblioteka Baidu弧拟合,对于轴线上的各
转折点,首先判断该点的凸凹性,如为凸点则以缓冲半径
的圆弧拟合;如为凹点则以该点关联的线段,以缓冲半径
绕该点旋转一定角度,得到该点的缓冲点,最后将轴线上
各点在线缓冲区边界上的所有对应点按逆时针(或顺时
针)方向连接,即可得到线状缓冲区的边界多边形。通过
该方法,可以大大简化线状目标缓冲区边界的生成过程。
为验证上述算法,笔者用Visual C++6.0编程语言
眵/7 ·一
对算法给予实现,为了更好地说明本算法生成的线状缓 冲区可以最大限度地保证双线的等宽性,用文献[3]中的 实验数据进行了测试,实验结果如图7(a)所示。文献[3]
生成的线状缓冲区结果如图7(b)所示。从固7(b)中可
图6凹点缓冲点的生成 Fig.6 The generation of buffer points of concave point
(’
图3采用向量叉乘判断向皇排列
№.3 Judging the arrangement of vector usmg
vector cross multiplication
若S>O,则ABC呈逆时针,顶点为凸点; 若S<0,则ABC呈顺时针,顶点为凹点; 若S=0,则ABC 3点共线。
3)轴线端点缓冲点的生成 如图4所示,设待生成缓冲区的轴线端点A(Xa, y口),将矢量AB绕点A以r为半径逆时针旋转,旋转角甜
PENG Li。HE Zhen—ming,LIU Shao—hua,GUO Ping—ping (College of Geoscience,Yangtze University,Jingzhou 434023,China)
Abstract:Buffer analysis is one of the several important analysis functions of geographical information system(GIS).In this paper,舳 effective algorithm of generating linear buffer based on rotation transform point of polyline is proposed,which further impmves the algo- rithm p阳sented by LI Zhigang,simplifies the process of generating berderline of linear buffer,and finds a better solution to the equal
图2角平分线法的凸点缓冲区
Fig.2
The buffer of convex points using the
metlIod of angle bisecting
收稿日期:2008—02—18 基金项目:江西省数字国土重点实验室开发研究基金(DLLl200601);湖北省高等学校优秀中青年团队计划项目基金(它00602)资助;
取值从"n/2开始,按步长f依次递增,直到∞=3,n/2(为
了叙述方便,取步长孝=椭)。半圆弧拟合计算公式如
下: ①矢量AB与菇轴正向夹角a的计算
令从=Xb—Xa,AY=Yb—Ya
当AX>0时,a=aretg(,AY/AX) 当AX<0时,a=arctg(△Y/AX)+1T
当似=0时,若lib>Ira时,a=1『/2;若Yb<Ya时,a
量BB,,再将矢量BC绕点曰以r为半径逆时针旋转(p+
万方数据
砒得矢鲫翮公式~=器刚 62
测绘与空间地理信息
2008年
中,l,为矢量AB与BC的夹角,r,=r/sin(∥2)。
3.2算法实现详细步骤
很容易计算出矿角。特殊情况处理,当盯角不能以旋转
1)沿轴线的走向,先做首端点A的缓冲区半圆弧段。
步长恰好等分时,k=o-/A-I-1。
4)轴线转折点缓冲点的生成 ①凸点缓冲点的生成 如图5所示,将矢量BC绕点日以r为半径逆时针旋
转,旋转角m,取值从(矽+,a12)开始,按步长A依次递增, 直到m川=l,+竹/2+盯。其中1/为矢量AB与BC的夹 角,矿为矢量BB.与BB,间的夹角,k=tr/A。盯角的确定,
首先将矢量BC绕点曰以r为半径顺时针旋转以,得矢
的等宽性。实验证明,本算法思想简单,实现容易,效果理 想,较好地解决了双线的等宽性,保证了双线的等宽性。
(a'
Co)
Fig.7
图7改进前后效果对比
The comparison between the results before and after improvement
参考文献:
[1] 王家耀.空间信息系统原理[M].北京:科技出版社,
2)轴线转折点凸凹性的判断 本算法非常重要的一环是轴线折点凸凹性的自动判 断。此问题可转化为两个矢量的叉积:把相邻两个线段 看成两个矢量,其方向取坐标点序方向。若前一个矢量 以最小角度扫向第2个矢量时呈逆时针方向,则为凸顶 点,反之为凹顶点。具体算法过程如下16’: 由矢量代数可知,矢量AB,BC可用其端点坐标差表 示,如图3所示。 矢量代数叉积遵循右手法则。即当ABC呈逆时针方 向时,s为正,否则为负。
长江大学发展基金(2006)资助 作者简介:彭李(1983一),男,湖北江陵人,在读硕士研究生,主要研究方向为”3s”技术集成与应用、GIS应用及图形算法研究。
万方数据
第5期
彭李等:一种有效的线状缓冲区生成算法
61
2算法的改进
文献[3]对角平分线算法建立线状缓冲区算法进行
了改进,但还是没有很好地解决双线的等宽性。如图2所
2001.
[2] 毋河海.关于GIS缓冲区的建立问题[J].武汉测绘科技 大学学报,1997,22(4):358—364.
[3】李志刚,胡圣武.关于角平分线法建立线状缓冲区算法 的改进[J】.测绘信息与工程,2005,30(5):35—36.
[4] 程鹏根,龚健雅.机助制图中平行线的绘制方法及其特 殊fn】题的处理[J].武测科技,1994,(1):43—52.
1角平分线算法概述
角平分线算法比1(简单平行线法)是在轴线首末点 处,做轴线的垂线并按缓冲区半径尺截出左右边线的起 止点,在轴线的其它转折点上,用与该线所关联的前后两 邻边距轴线的距离为R的两平行线的交点来生成缓冲区 对应顶点。如图l所示。
Fig.1
图1角平分线法 The method of angle bisecting
3)做轴线上末端点的缓冲区。轴线上末端点的缓冲 区生成方法与做首端点的缓冲区类似,将所生成缓冲区 边界的顶点依次添加到点集链表中;
4)仿照以上轴线右侧缓冲区的生成,从轴线的最后
一点开始,生成轴线左侧缓冲区;
J,
c
户【|扎
5)将轴线上各点在线缓冲区边界上的所有对应点, 按逆时针方向连接即可得到线状缓冲区的边界多边形。
width of double parallel line.Finally,it tests the algorithm by using empirical data.
Key words:buffer;geographical information system;algorithm
O引 言
缓冲区分析(Buffer analysis)是地理信息系统中使用 非常频繁的一种空间分析,是对空间特征进行度量的一 种重要方法。缓冲区是根据空间数据库中的点、线、面地 理实体或规划目标,自动建立其周围一定宽度范围的多 边形¨J。所谓缓冲区就是地理空间目标的一种影响范围 或服务范围,如水库淹没范围、城市规划中街道拓宽后的 房屋拆迁范围、化工厂爆炸后有毒物质影响的范围,公共 设施(商场、银行、医院、车站、学校等)的服务半径等,也 就是邻近度(Proximity)问题。
[5]刘湘南,黄方,王乎,等.GIS空间分析原理与方法[M]. 北京:科学出版社,2005.
[6] 邬伦,刘瑜,张晶,等.地理信息系统——原理、方法和应 用[M].北京:科学出版社,2001. [编辑:王明曦]
万方数据
第31卷第5期 2008年1 O月
测绘与空间地理信息
GEOMATICS&SPATIAL INFORMATION TECHNOLOGY
v01.31,No.5 Oct.,2008
一种有效的线状缓冲区生成算法
彭 李,何贞铭,刘少华,郭平平
(长江大学地球科学学院,湖北荆州434023)
摘要:缓冲区分析是地理信息系统重要的空间分析功能之一。本文对线状缓冲区算法做了进一步改进,提出
情况,但是该校正措施繁琐复杂。针对这种情况,本文提
出一种基于轴线(线状目标)转折点旋转生成线状缓冲区
算法,该算法思想简单,实现容易,效果理想,较好地解决
了双线的等宽性。保证了平行曲线的等宽性。
求轴线的缓冲区边界多边形,只要求出轴线上各转
折点在线缓冲区边界上的所有对应点即可。如何简单有
效地生成边界上的各点,是本算法的关键之一。算法基
②凹点缓冲点的生成
以看出在尖锐转角处,凸侧角点随着角度的进一步变锐 会沿角平分线远离轴线顶点,双线的等宽性就会遭到破 坏。本文提H{的算法较好地解决了这一问题,简化了线 状目标缓冲区边界的生成过程,最大限度地保证了双线
如图6所示,将矢量BC绕点占以r’为半径顺时针旋
转(耽),得矢量BB 7,B’即为轴线转折点口的缓冲点。其
一种基于轴线转折点旋转生成线状缓冲区的算法,简化了线状目标缓冲区边界的生成过程,较好地解决了双线
的等宽性。最后用实验数据对算法进行了测试,结果表明算法是可行的。
关键词:缓冲区;地理信息系统;算法
中图分类号:P208
文献标识码:B
文章编号:1672—5867(2008)05—0060—03
An Effective Algorithm of Generating Linear Buffer
3算法实现及步骤
3.1 本算法实现的关键问题 1)轴线的直线性判断 为简化计算过程,首先进行相邻3点的直线性判断。
当相邻3点处于近似共线状态时,用直线代替。本文采用 的判断方法是点到直线距离法,即直接利用解析几何中
l/■7面(2) 的距离公式: d=l Ax+研+c 其中舭+研+C=0为过首末点的直线方程,茗、Y为 相邻3点中相对中间点的坐标,d为该中间点到直线舭+ 毋+e=0的距离。当d小于某一给定值时,相邻3点可 视为直线,这样可以简化计算过程"J。
=3亿/2
②第i点坐标
Xi=Xa+r×cos(a+i×f),耽=Xa+r X sin(a+i× 亭)。 (其中i=1,2,3…)
/ 一l
∥\
∥.
\
产、二\
\磊一一一7j :《
x。
\,/,|
卜、
I
\
\么 I
\、
、’}= ,I-■一∥6夕胛
Pig.4
图4端点缓冲点的生成 The generation of buffer points of extreme point
示,在尖锐转角处,凸侧角点曰随着角度的进一步变锐会
沿角平分线远离轴线顶点。根据图2,远离情况可由式
(1)表示:
d=R/sin(B/2)
(1)
由式(1)可知,当缓冲区半径不变时,d随张角8的
减小而增大,结果在尖角处双线之间的宽度遭到破坏。
为了克服该缺点,文献[4]曾进行了深刻地分析和研究,
提出了多准则的判别方案,虽较好地解决了出现的异常
将生成缓冲Ⅸ边界的顶点依次添加到点集链表中;
\ J,
~ \\口5
\ C
土m///
,///沁
.。//
毖三二j一11\一?-
8
7卜
i?
Fig.5
图5凸点缓冲点的生成 point The generation of buffer points of convex
2)从首端点开始,沿轴线的走向,依次取两个相邻有 向线段(3个相邻顶点),对中间点(第n个转折点)8做 其右侧的缓冲区。如果为凸点则以缓冲半径的圆弧拟 合;如果为凹点则以该点关联的线段,以缓冲半径绕该点 旋转一定角度求得该点的缓冲点;如果3点共线,只需求 出前一线段的右侧平行线段的末端点或后一线段的右侧 平行线段的首端点即可。将所生成缓冲区边界的顶点依 次添加到点集链表中;
本思想:在轴线两端点处以半Biblioteka Baidu弧拟合,对于轴线上的各
转折点,首先判断该点的凸凹性,如为凸点则以缓冲半径
的圆弧拟合;如为凹点则以该点关联的线段,以缓冲半径
绕该点旋转一定角度,得到该点的缓冲点,最后将轴线上
各点在线缓冲区边界上的所有对应点按逆时针(或顺时
针)方向连接,即可得到线状缓冲区的边界多边形。通过
该方法,可以大大简化线状目标缓冲区边界的生成过程。