




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕毕 业业 设设 计计 论论 文文 题 目: 缓冲区分析与应用 学 院: 测绘工学院 专 业: 地理信息系统 姓 名: 辛帅涛 学 号: 062409133 指导老师: 张卫国 完成时间: 2013 年 5 月 25 日 目目 录录摘摘 要要 .1 1第一章第一章 绪绪 论论 .3 31.1.缓冲区问题的提出及意义 .31.1.1 缓冲区分析问题的提出.31.1.2 缓冲区分析问题的意义.41.2 缓冲区分析实现的常用算法.51.2.1 凸角圆弧法原理.51.2.2 角分线法原理.61.2.3 栅格法原理.71.3 论文的主要内容 .7第二章第二章 建立空间对象缓冲区方法建立空间对象缓冲区方
2、法 .8 82.1 空间对象的数据表示.82.1.1 空间数据的栅格模型和矢量模型 .82.1.2 栅格数据BMP 格式文件说明 .82.2 建立空间对象缓冲区的原理.122.2.1 空间对象缓冲区实现的矢量法原理 .122.2.2 空间对象缓冲区实现的栅格法原理 .132.3 基于矢量的空间对象缓冲区生成算法的引理和概念.14第三章第三章 研究方法和技术路线研究方法和技术路线 .20203.1 研究方法.203.2 技术路线.21第四章第四章 缓冲区分析的实现缓冲区分析的实现 .23234.1 打开工作空间 .234.2.自定义缓冲区 .234.3 生成缓冲区 .284.4 缓冲区分析 .2
3、84.5 最终实现的功能 .324.6 基于矢量和栅格的缓冲区算法比较 .37第五章第五章 总结总结 .39395.1 结论.395.2 问题及展望.39参考文献参考文献 .3838致谢致谢 .4141河南城建学院毕业设计(论文) 摘 要 0摘摘 要要 本文对空间对象的缓冲区分析算法作了说明,讨论了分别利用图形学方法和图像处理的形态学方法建立地理信息系统中空间对象的缓冲区算法,并且就两种算法的异同做出了分析。 在矢量算法中,各类地理要素根据其空间形态特征分为点、线、面三类,分别以计算机屏幕数据的点、线、面图形对象表示,进行缓冲区分析。在栅格算法中,地理空间被划分为规则的小单元(像元) ,空间位
4、置由像元的行、列号表示。以膨胀法原理为基础,进行缓冲区分析。关键字:地理信息系统,缓冲区分析,矢量法,栅格法,膨胀法河南城建学院毕业设计(论文) 摘 要 1ABSTRACTABSTRACT This paper illuminates the arithmetic of buffer analysis to spacial object. In this paper two arithmetic are discussed, one is based on the computer graphic technology , the other is based on Mathematical
5、Morphology. Then, the similarities and differences of such two arithmetic are discussed too. In the vector arithmetic, spacial objects are divided into threekinds, point、line、polygon, which are expressed by the graphic object on the computer screen. Buffer analysis is based on such kind of data. In
6、the grid arithmetic, spacial objects are divided into grids.The spacial position is marked by the row and arrange of grids.This arithmetic is based on the expand method of Mathematical Morphology. Keywords: Geographical information system(GIS),buffer analysis, vector method, grid method ,expand meth
7、od.河南城建学院毕业设计(论文) 第一章 绪 论 2第一章第一章 绪绪 论论1.1.缓冲区问题的提出及意义缓冲区问题的提出及意义1.1.1 缓冲区分析问题的提出缓冲区分析问题的提出 地理信息系统(Geographic Information System 简称 GIS)是一项以计算机为基础的新兴技术,围绕着这项技术的研究、开发和应用形成了一门交叉性、边缘性的学科。从 20 世纪 60 年代出现至今,只有短短 40 多年的时间,但是他的发展非常迅速,已经成为多学科集成并应用于多领域的基础平台,成为地学空间信息处理的重要手段和工具。 地理信息系统具有空间数据的输入、存储、管理、分析和输出等功能,
8、地理信息系统的主要目的是为了分析空间数据,以提供空间决策支持信息,因此,空间分析是地理信息系统的主要功能,是核心,是灵魂。 空间分析就是利用计算机对数字地图进行分析,从而获取和传输空间信息。由于空间分析对空间信息(特别是隐含信息)所具有的提取和传输功能,它已经成为地理信息系统区别于一般信息系统的功能特征,也成为评价一个地理信息系统功能的主要指标之一。 缓冲区分析是地理信息系统最重要和最基本的空间操作功能之一。缓冲区分析是根据点、线、面实体基础,自动建立其周围一定宽度范围内的缓冲区多边形实体,从而实现空间数据在其领域得以扩展的信息分析方法。例如,公共设施(商场、邮局、银行、医院等)的服务半径,大
9、型水库建设引起的搬迁,都是一个邻近度的问题。城市的噪音污染源所影响的一定空间范围、交通线两侧所划定的绿化带,既可分别描述为点的缓冲区与线的缓冲区带。缓冲区分析的基本思想是给定一个空间物体(的集合),确定它(们)的某邻域,邻域的大小由邻域半径 R 决定。因此物体 Oi 的缓冲区的定义如下:Bi x : d (x, Oi ) R 即对象 Oi 的半径为 R 的缓冲区是全部距 Oi 的距离 d 小于等于 R 的点的集合,d 一般是指最小欧氏距离。 对于多个对象的集合:河南城建学院毕业设计(论文) 第一章 绪 论 3 O Oi :i 1, 2, 3,., n其半径为 R 的缓冲区是单个对象的缓冲区的并
10、,即: n B B1.1.2 缓冲区分析问题的意义缓冲区分析问题的意义 缓冲区信息处理在现实生活中有广泛的应用,可以从以下几个方面看:(1) 缓冲区分析在生态环境影响评价中的应用在特定的时空环境里,生态环境问题的产生是由于自然、人为条件下各生态因子综合作用的结果,这些生态因子在不同程度上都具有某种地理含义。地理信息系统是对具有地理含义的因子进行统计、查询、分析的有力工具。因此,利用地理信息系统的相关技术来分析、评价生态环境问题的影响就显得理所当然。目前,在整个环境领域,地理信息系统的应用得到了蓬勃的发展,空间数据的建立、属性数据的逐步完善、空间数据与属性数据的链接等为环境的评价、管理与规划提供
11、了一个简单、便捷、明晰的运作平台.随着生态环境问题的出现以及科技的进步和人们生态环保意识的提高,越来越多的人投向生态环境的建设与整治中或尽量减少对自然生态环境的干扰.但人类对生态环境的主观改造以及人类必须进行生产活动的效果与影响总是具有隐蔽性和动态性的特点,其影响范围常常表现为一个趋势面.如何有效、直观地确定趋势面亦即影响范围的大小是生态环境影响评价面对的主要问题,地理信息系统的空间分析功能之一的缓冲区分析正是对这一趋势面加以分析的有力工具。例如,在环境治理时,常在污染的河流周围划出一定宽度的范围表示受到污染的区域;又如在飞机场,常根据健康需要在周围划出一定范围的区域作为非居住区等。(2)缓冲
12、区分析在城市规划中的应用 城市作为人口集中、规模庞大、结构复杂、不断发展的动态系统,它的发展变化不仅表现在人口的增加、经济的发展和功能的变化上,而且也表现在城市空间结构的变化上。城市空间结构的基本要素是核心、交通网络、节点以及不同土地利用模式形成的面状区域。核心的作用无庸置疑,多数城市的生长都是由核心开始的。交通网络则是城市生长的骨架,这里的交通网络不仅包含城市内部的主干街道,而且包括城市对外交通干线,它往往形成城市的发展轴。节点可以是交通网络中重要的交叉点,也可以是重要的郊区小城镇或卫星城镇,它们是城市中人流物流能量流和信息流集聚和扩散的源地。正是这些基本要素决定了整个城市的扩展。缓冲区分析
13、又可以称为空间影响分析,是地理信息系统中定量研究距离因素影响的重要工具。河南城建学院毕业设计(论文) 第一章 绪 论 4因而进行基于重点区域和交通线的缓冲区分析,可以定量地描述城市用地扩展过程以及空间分布。 例如:在土地评测中,要根据离开交通线或繁华区的远近,进行地价估算;特定场所的选址如大型超市、公园、疗养院要依靠诸如“靠近交通线” 、 “沿河流或濒临湖泊” 、 “包含林块和绿地”等有关缓冲区操作。(3)在地理数据结构化自动处理中的应用 地理信息处理的实质是综合分析与评测,借此赋以地理实体相应重要性,为管理与规划决策提供依据和为它们的多比例显示奠定基础。然后,地图的地理信息的综合评价必须在信
14、息结构化的基础上进行,对于简单的数字化面条数据是难以进行有效的分析和处理的。例如,河网树结构,地形线(山脊线与谷地线)的结构化(树结构的自动建立)都在递归地执行缓冲区操作。边防城镇、沿海港口和地形等信息有其独特的不言而喻的重要性,这些都是借助缓冲区操作而实现的。 综上所述,缓冲区分析在现实生活中有如此广泛的应用,所以,对缓冲区算法的研究非常的有必要。1.2 缓冲区分析实现的常用算法缓冲区分析实现的常用算法 缓冲区生成矢量算法,特别是线缓冲区的生成算法,常见的有凸角圆弧法和角平分线法。凸角圆弧法是逐个求得每个线段单独的缓冲区,然后用多边形叠质算法依次合并。算法所生成的缓冲区边界,轴线转角尖锐的转
15、折点的平行线交点随缓冲距的增大将会迅速远离轴线,这就会出现尖角和凹陷的失真现象。角平分线法由画逐个线段的简单平行线,尖角平滑矫正和自相交处理三步构成。角平分线的缺点是难以最大限度的保证平行曲线的等宽性。1.2.1 凸角圆弧法原理凸角圆弧法原理在轴线首末点处,作轴线的垂线并按双线或缓冲区半宽 E 截出左右边线的起迄点;在轴线的其它各个转折点上,首先判断该点的凸凹特性,在凸侧用圆弧弥合,而在凹侧用与该点所关联的前后两邻边距轴线的偏移量为 E 的两平行线的交点来生成对应顶点(如下图) 。由于在凸侧用圆弧弥合,使凸侧平行边线与轴线等宽。而在凹侧,平行边线相交在角分线上。河南城建学院毕业设计(论文) 第
16、一章 绪 论 5图 1.1 凸角圆弧法1.2.2 角分线法原理角分线法原理 在轴线首末点处,作轴线的垂线并按双线或缓冲区半宽 E 截出左右边线的起迄点;在轴线的其它各个转折点上,用与该点所关联的前后两邻边距轴线的偏移量为 E 的两平行线的交点来生成两平行边线的对应顶点。如图 1.2图 1.2 角平分线法河南城建学院毕业设计(论文) 第一章 绪 论 61.2.3 栅格法原理栅格法原理 栅格方法又叫点阵法,它将点、线、面矢量数据转化为栅格数据,进行像元加粗,然后作边缘提取;在原理上比较简单,容易实现,但受精度的限制;并且内存开销大,所能处理的数据量受到机器硬件的限制。1.3 论文的主要内容论文的主
17、要内容 本论文对建立空间对象的缓冲区的矢量算法和栅格算法进行分析,探讨了这两种建立空间对象缓冲区算法的异同和应用范围。论文结构如下:(1)空间对象缓冲区的实现(2)建立点、线、面空间对象缓冲区的矢量方法(3)建立点、线、面空间对象缓冲区的栅格方法(4)建立点、线、面空间对象缓冲区矢量、栅格方法的比较分析河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法7第二章第二章 建立空间对象缓冲区方法建立空间对象缓冲区方法 2.1 空间对象的数据表示空间对象的数据表示 2.1.1 空间数据的栅格模型和矢量模型空间数据的栅格模型和矢量模型 在栅格模型中,地理空间被划分为规则的小单元(像元) ,空间位
18、置由像元的行、列号表示。例如:一条道路由其值为道路编码值的一系列相联的像元表示,要从数据库中删除这条道路,则必须将所有有关像元的值变成该道路领域的背景值。栅格数据模型的设计思想是将地理空间看成一个连续的整体,在这个空间中处处有定义。在本毕业设计中栅格法缓冲区分析针对的是二值化后的影像数据。其格式为*.bmp。 矢量模型将地理空间看成是一个空间区域,地理要素存在其间。在矢量模型中,各类地理要素根据其空间形态特征分为点、线、面三类。点状要素用坐标点对表示其位置;线状要素用其中心轴线上的抽样点坐标串表示其位置和形状;面状要素用范围轮廓线上的抽样点坐标串表示其位置和范围。在本毕业设计中矢量法缓冲区分析
19、对象是利用计算机屏幕数据的点、线、面图形对象。 2.1.2 栅格数据栅格数据BMP 格式文件说明格式文件说明 一个 BMP 文件大体上分成如下 4 个部分:BITMAPFILEHEADER(位图文件头) 、BITMAPINFOHEADER(位图信息头) 、Palette(调色版) 、DIB Pixels(DIB 图像数据) 。 1)位图文件头 BITMAPFILEHEADER 它的结构如下: typedef struct tagBITMAPFILEHEADER WORD bfType; DWORD bfSize; 河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法8WORD bfRes
20、erved1; WORD bfReserved2; DWORD bfOffBits; BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER; 该结构的长度是固定的,为 14 个字节,各参数说明如下: bfType:指定文件类型,必须是 0 x424D,即字符串“BM” 。也就是说所有的“.bmp”文件的头两个字节都是“BM”bfSize:指定文件大小; bfReserved1、bfReserved2:为保留字,不用考虑; bfOffBits:为文件头到实际的位图数据的偏移字节数,也就是前三部分长度之和。 2)位图信息头 BITMAPINFOHEADER 其结构如下
21、: typedef struct tagBITMAPINFOHEADER DWORD bfSize;LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPersPerMeter; DWORD biClrUsed; DWORD biClrImportant; 河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法9BITMAPINFOHEADER, FAR *LPBITMAPINFOH
22、EADER; 该结构的长度为 40 个节,各参数的意义说明如下: biSize:指定这个结构的大小,为 40 个字节; biWidth:指定图像的宽度,单位是像素; biHeight:指定图像的高度,单位是像素; biPlanes:必须是 1; biBitCount:指定表示颜色要用到的位数,常用的值 1(黑白)8(256 色) 、24(真彩色) ; biCompression:指定位图是否压缩,有效值为 BI_RGB、BI_RLE4、BI_RLE8。其中 BI_RGB 为不压缩的情况。 biSize Im age = biWidth biHeightbiSizeImage;指定实际的位图数据
23、占用的字节数。可以用下面的公式计算: 需要注意的是:上述公式中的 biWidth 不一定总等于 biWidth,biWidth 必须是 4 的整数倍,表示大于或等于 biWidth 的离 4 最近的整倍数。 biXPelsPerMeter:指定目标设备的水平分辨率,单位是每米的像素个数; biYPelsPerMeter;指定目标设备的垂直分辨率,单位是每米的像素个数; biClrUsed:指定本图像实际用到的颜色数,如果该值为 0 则用到的颜色数为 2 的 biBitCount 次幂; biClrImportant:指定本图像中重要的颜色数,如果该值为零,则认为所用的颜色都是重要的。 3)al
24、ette(调色板) 调色板实际上是一个数组,共有 biClrUsed 个元素(如果该值为 0,则为 2的 biBitCount 次幂) 。数组中每个元素的类型为一个 RGBQUAD 结构,占 4 个字节。河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法10结构定义如下: typedef struct tagRGBQUAD BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; RGBQUAD; 注意:有些位图,比如真彩色图,没有调色板。他们的位图信息头BITMAPINFOHEADER 后直接是 DIB 数据。 4)DIB
25、 图像数据 它分两种情况:对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值;对于真彩色图,图像数据就是实际的 R、G、B 值。 对于 2 色位图,用 1 位就可以表示该像素的颜色,因此一个字节可以表示 8个像素; 对于 16 色位图,用 4 位可以表示一个像素的颜色,所以 1 个字节可以表示2 个像素; 对于 256 色位图,一个字节刚好表示一个像素; 对于真彩色图,3 个字节才能表示 1 个像素 注意:1. 每一行的字节数必须是 4 的整倍数,如果不是,则需要补齐; 2. 图像数据是按照从上到下、从左到右的顺序存储;我们最先读到的是图像最下面一行的左边第一个像素,然后是左边第二
26、个像素接下来是倒数第二行左边第一个像素,左第二个像素依此类推,最后得到的是最上面一行的最后一个像素。 在 dibapi.h 和 dibapi.cpp 中有处理*.bmp 格式文件的常用的函数 如:HDIB ReadDIBFile(CFile& file)函数的参数 Cfile &file 为文件名;该函河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法11数的返回值是文件中的图像数据的句柄。 函数原型 BOOL WINAPI SaveDIB(HDIB hDib, CFile& file)的第一个参数 hDIB 表示保存图像数据的内存区域的句柄,第二个参数 CFile& file 为保存
27、图像的文件名。另外,还有查找位图像素的函数 LPSTR WINAPI FindDIBBits(LPSTR lpbi),用于计算 DIB 位图图像数据的地址,返回一个指向位图图像数据起始位置的指针。 2.22.2 建立空间对象缓冲区的原理建立空间对象缓冲区的原理 2.2.12.2.1 空间对象缓冲区实现的矢量法原理空间对象缓冲区实现的矢量法原理 (1)点目标 P 的缓冲区:以 P 为圆心,以缓冲距 E 为半径作圆。 图 2.1 点目标的矢量法缓冲区分析 (2)线目标 L 的缓冲区:以 L 为轴线,以缓冲距 E 为平移量向两侧作平行曲(折)线。在轴线两端构造两个半圆弧,最后形成圆头(蚕形)缓冲区。
28、 河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法12 图 2.2 线目标的矢量法缓冲区分析 (3)面目标 A 的缓冲区:以 A 的边界线 LA 为轴线,以缓冲距 E 为平移量向边界线的外侧作平行曲(折)线。 图 2.3 面目标的矢量法缓冲区分析 2.2.2 空间对象缓冲区实现的栅格法原理空间对象缓冲区实现的栅格法原理 本毕业设计是基于膨胀算法的缓冲区分析。从数学的角度看,缓冲区分析的基本思想是给定一个空间对象或集合,确定它们的领域。 数学形态学是一门新兴的图像分析学科,其基本思想是:利用一个结构元素去探测一个图像,看是否能够将这个结构元素很好地填放在图像的内部,同时验证填放结构元素
29、的方法是否有效。 图学形态学中的基本运算有膨胀算法,其定义为: AB=a: (-B+a) A 上式表示把结构元素 B 平移 a 后得到 Ba,若 Ba 击中 A(即 Ba 与 A 的交集不为河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法13空) ,记下这个 a 点。所有满足上述条件的 a 点组成的集合称做 A 被 B 膨胀的结果。 图 2.4 中 A 表示的大长方形是被处理的对象,B 所示的小正方形是结构元素,原点指定为 B 的中心。不难知道,对于任意一个在阴影部分的点 a,Ba 击中 A,所以 A 被 B 膨胀的结果就是那个阴影部分。阴影部分包括 A 的所有范围,就像 A膨胀了一
30、圈似的,这就是将这种算法称为膨胀的原因。图 2.4 膨胀法原理图 空间对象缓冲区的膨胀生成算法原理: 河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法14(1)点目标 P 的缓冲区:以 P 为点生成元,借缓冲距 E 规定像元加粗的结构元 素,然后进行像元的膨胀。 (2)线目标 L 的缓冲区:以 L 为线生成元,借缓冲距 E 规定像元加粗的结构元 素,然后进行像元膨胀。(3)面目标 A 的缓冲区:以 A 的边界线 LA 为轴线,借助缓冲距 E 规定像元加粗的结构元素,并进行像元膨胀。2.32.3 基于矢量的空间对象缓冲区生成算法的引理和概念基于矢量的空间对象缓冲区生成算法的引理和概念
31、空间信息系统中,空间目标分为点目标、线目标、面目标,以及点、线、面目标任意组合而成的复杂目标。空间目标的缓冲区包括点目标缓冲区、线目标缓冲区、面目标缓冲区。点目标的缓冲区,是围绕该目标的半径为缓冲距的圆周所包围的区域;线目标的缓冲区,是沿线目标的两侧距离不超过缓冲距的点组成的区域;面目标的缓冲区,是沿该目标边界内侧或外侧距离不超过缓冲距的点组成的区域。 为讨论方便,首先引入下面几个引理和概念: 引理一 当沿着简单多边形的顶点串方向走过所有有向边时,如果多边形的顶点以逆时针方向串连起来,则我们的左侧始终在多边形的内部;反之,如果多边形的顶点以顺时针方向串连起来,则我们的右侧始终在多边形的内部。
32、引理二 当沿着简单多边形的任一条有向边从起点走向终点时,如果我们的左侧始终在多边形的内部,则多边形的顶点以逆时针方向串连起来;反之,如果我们的右侧始终在多边形的内部,则多边形的顶点以顺时针方向串连起来。 定义一 如果多边形的顶点以逆时针方向串连起来,则称此多边形的方向为正向;如果多边形的顶点以顺时针方向串连起来,则称此多边形的方向为负向。 正多边形 负多边 形河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法15图图 2.52.5 正负多边形的定义 定义二 在简单多边形任意顶点前后两个矢量形成的两个角度中,位于多边形内的角度称为该顶点的内角,位于多边形外的角度称为该顶点的外角2.42.
33、4 线状目标缓冲区的生成方法线状目标缓冲区的生成方法 线状目标缓冲区的生成是点、线、面三种基本空间矢量要素缓冲区生成的关键和基础。在此节介绍了本次毕业设计实现线状目标缓冲区自动生成的矢量算法。 线状目标缓冲区总的生成分两个阶段,即单个线状缓冲区多边形的独立生成过程和多个线状目标缓冲区多边形间的重叠合并过程。1、独立线状目标缓冲区的自动生成 在基于矢量数据格式的地理信息系统中,任何线状目标的空间形态主要是通过“折线”的方式来表示的,因此,所谓的线状目标缓冲区的生成实际上等价于“折线”缓冲区的生成问题。通过分析折线的形态特征会发现任何形状的折线都是由折线端点、折线上的线段和线段间的拐点三个基本要素
34、所构成。显然,要分析折线缓冲区的生成算法,必需从构成折线的三要素着眼。下面分别介绍折线端点、折线上的线段和线段间的拐点的缓冲区生成算法,然后在将它们组合在一起形成任意折线等距缓冲区的自动生成算法。 (1)线段缓冲区的生成 任意方向线段(原线段)的缓冲区线段应与原线段构成一个矩形。图 3.2 中 CD 和 EF 两条线段代表元线段 AB 前进方向(起始点到结束点)的左右两条缓缓冲区线段 F F C C A A E E 图 2.6 线段缓冲区的生成河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法16设原线段的起始点 A 和结束点 B 的坐标分别为(Xa,Ya)和(Xb,Yb),缓冲区距离
35、为 d,则线段 AB 的左缓冲区线段 CD 的端点坐标(Xc,Yc)(Xd,Yd)和右缓冲区线段 EF 的端点坐标(Xe,Ye)(Xf,Yf)的计算公式应分别为1)当 Ya Yb 0 时:Xc = Xa + d k 1+ k Xd = 2 Xa Xc Yc = Xd d 1 + k Yd = 2 Ya Yc Xe = Xb + d k 1+ k Xf = 2 Xb XcYe = Xb d 1 + k Yf = 2 Yb Yc2)当 Ya Yb 0 时: Xc = Xa d k 1+ k Xd = 2 Xa Xc Ye = Xd + d 1 + k Yd = 2 Ya Yc Xe = Xb d
36、k 1+ k Xf = 2 Xb XeYe = Xb d k 1 + k Yf = 2 Yb Ye 其中:k 为线段 AB 直线的斜率,k=(Yb Ya ) (Xb Xa (2) 折线端点缓冲区的生成 理论上讲,折线端点的缓冲区应该是一个半圆弧。其原心在折线的端点上,连接半圆弧两个端点的直径应垂直于折线的端点线段,如图 3.3 所示。但是由于整条折线的缓冲区应该是一个闭合多边形,所以折线端点出的缓冲区实际上只能是一个对上述半圆弧具有一定拟和精度的正 n 边形。河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法17图 2.7 折线端点的缓冲区生成在图 2.7 中,设待生成缓冲区的折线端点
37、 A(Xa,Ya)其右侧缓冲区线段端点E(Xe,Ye),以 A 为圆心,d 为半径顺时针转 180 得半圆弧 EC。 (3)折线拐点缓冲区的生成 所谓折线上的拐点是指折线上两条相邻线段的连接处。显然,构成拐点的两条相邻线段或者在同一条直线上或者不在同一条直线上。 当两条直线在同一条直线上时,根据两条线段生成的同侧缓冲区也必然在同一条直线上(这里假设构成拐点的两条线段的缓冲区距离相等) 。此时没有必要再生成拐点处的缓冲区。 当构成拐点的两条线段不再同一条直线上时,在折线的拐点处就形成两个角,其中一个角必然大于 180 而另一个角则小于 180 。把大于 180 的角称为外角,而小于 180 的角
38、称为内角。在内角侧不必生成拐点缓冲区,与此相反,在外角侧,构成拐点的两条线段外角侧缓冲区线段不相交。而是形成一个扇形区圆弧(圆弧圆心在拐点上,圆弧半径等于缓冲区的距离) 。折线的端点为构成拐点的两条线段外角侧缓冲区线段靠近拐点处的两个端点,图 2.8 中的 D、D两点。 图 2.8 折线拐点缓冲区的生成河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法18(4)任意折线等距缓冲区的自动生成算法 任意不自相交折线等距缓冲区的自动生成算法 步骤 1:按照折线的数字化方向,从折线的第一条线段开始,先生成折线起始端点的半圆弧缓冲区,然后再第一条线段的左侧生成该线段的缓冲区线段。设第一条线段为
39、i 线段。 步骤 2:判断 i+1 线段相对当前 i 线段的走向(左拐、右拐或在当前 i 线段的延长线上三种情况) 。如果 i+1 线段的走向为左拐或在当前 i 线段的延长线上,则在当前 i 线段的左侧只生成其相应的平行缓冲区线段。否则,除了要生成 当前线段 i 的平行缓冲区线段外,还要生成拐点的弧形缓冲区折线。 步骤 3:将新生成的缓冲区边界线与已经生成的缓冲区边界线进行相交计算。如果新生成的缓冲区边界线与已生成的缓冲区边界线间没有或只有一个交点,则转入步骤 5;否则,说明缓冲区边界线出现了自相交现象,应该进行自相交处理,转入步骤 4。 步骤 4:确定新旧缓冲区边界线间的每个交点的特性。最靠
40、近就缓冲区边界线上最后线段的交点为新旧缓冲区边界线间的正常交点,其他交点为缓冲区自相交的交点。当新旧缓冲区边界线间有两个交点时,应该设置一个标志变量用语标志新缓冲区边界线是进入已有缓冲区域的点称为“交叠开始点” ,而新缓冲区边界线走出已有缓冲区域的点称为“交叠结束点” 。在交叠开始点和交叠结束点之间必然存在的两条缓冲区边界线就是自相交处理中应该删掉的线。此外,应对闭合于交叠开始点的闭合缓冲区进行特殊的标记,因为此闭合缓冲区围成的区域并不是所要的缓冲区域,而恰恰是非缓冲区区域。本文将缓冲区在闭合曲线内部的缓冲区多边形称为正多边形,而缓冲区在闭合曲线外侧的缓冲区多边形被称为负多边形。 步骤 5:判
41、断当前线段是否为折线的最后一条线段。如果当前线段不是折线的最后线段,则将 i 加 1 后返回到步骤 2,如果当前线段是折线的最后线段,则结束缓冲区生成计算。河南城建学院毕业设计(论文) 第二章建立空间对象缓冲区方法19第三章第三章 研究方法和技术路线研究方法和技术路线 本章主要介绍,基于 ArcEngine 缓冲区分析用到的软件,其中 Microsoft Visual Basic 是一款使用面非常广的编程语言,比较适合编程的初学者使用。ArcEngine 是Arcgis9 的系列产品,是基于核心组件库 ArcObject 搭建的。3.13.1 研究方法研究方法(1)文献搜集法:搜集空间分析的方
42、案设计、需求预测等相关期刊专著以及网河南城建学院毕业设计(论文) 第三章 研究方法和技术路线20络文献,对资料进行归纳、整理、分类、分析,得出相关的研究成果,为本论文的研究奠定理论基础。(2)系统分析法:在整个项目研究过程中,始终贯彻以理论知识为基础,以社会实践为根本,进行市场调研分析,以此对本论文进行布局、设计,保证本论文体系结构的逻辑性、科学性、可行性。 (3)模拟法(模型方法):模拟法是先依照原型的主要特征,创设一个相似的模型,然后通过模型来间接研究原型的一种形容方法。根据模型和原型之间的相似关系,模拟法可分为物理模拟和数学模拟两种 (4)信息研究方法 :信息研究方法是利用信息来研究系统
43、功能的一种科学研究方法。美国数学、通讯工程师、生理学家维纳认为,客观世界有一种普遍的联系,即信息联系。当前,正处在“信息革命”的新时代,有大量的信息资源,可以开发利用。信息方法就是根据信息论、系统论、控制论的原理,通过对信息的收集、传递、加工和整理获得知识,并应用于实践,以实现新的目标。信息方法是一种新的科研方法,它以信息来研究系统功能,揭示事物的更深一层次的规律,帮助人们提高和掌握运用规律的能力。供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,VB 对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵
44、循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。VB 使得大量的外界控件有了自己的生存空间。大量的第三方控件针对 VB 提供。VB 也提供了建立、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。3.2 技术路线技术路线本文的主要研究技术路线见图提 出 课 题研 究 现 状理 论 基 础研 究 分 析方 案 设 计总 结绪 论方 案 设 计需 求 预 测常 用 算 法需 求 预 测 模 型研究结论及改进方向缓冲区研究现状需 求河南城建学院毕业设计(论文) 第三章 研究方法和技术路线21图 3.1 设计流程图河南城建学院毕业设计(论文) 第
45、三章 研究方法和技术路线22本文程序流程图图 3.2 程序实现流程图 河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现23第第 4 章章 缓冲区分析的实现缓冲区分析的实现 本章是文章的核心部分,将介绍利用湖北省交通路网的网络数据集,以ArcEngine 为平台并通过 VB6.0 编写程序来实现缓冲区分析。文中将给出主要的代码及相关说明,并在最后贴出运行效果图。 4.1 打开工作空间打开工作空间 新建一个 ShapefileWorkspaceFactory 对象,不同类型的数据库使用不同的工作空间对象 Dim pWorkspaceFactory As IWorkspaceFactory S
46、et pWorkspaceFactory = New ShapefileWorkspaceFactory Set OpenWorkspace = pWorkspaceFactory.OpenFromFile(strGDBName, 0) 使用 shapefile 的空间对象连接到 shapefile 数据库4.2.自定义缓冲区自定义缓冲区 要实现在地图面上拉框、拉多边形、拉多义线等,只需要使用 MapControl 的Track 系列方法(TrackLine,TrackPolygon 等)就很容易获得要做缓冲区运算的图形,这点已经在空间查询部分进行了描述。本例使用了派生自 IDisplayFe
47、edback 接口的系列对象,即 ArcEngine 中的 FeedBack 对象,目的是让读者能够接触到更多的ArcEngine 对象,体会 ArcEngine 开发的灵活性。在 ArcEngine 中所有的 FeedBack对象(近 30 个)都实现了 IDisplayFeedBack 接口,在本例中要使用NewLineFeedBack、NewEnvelopeFeedBack 和 NewPolygonFeedback 三个对象来创建多义线、矩形和任意多边形。创建用来做缓冲区的图形的过程是:用户在 MapControl上点下鼠标(MouseDown) ,标志图形创建的开始,对于点、拉框和选择
48、要素这三种方式,当发生 MouseUp 的时候,标志动作的结束或图形创建完毕,对于多义线和多边形则由于要放生多个 MouseDown 事件,其以 DoubleClick 标志图形的创建结束,河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现24在 DoubleClick 事件被触发之前所发生的所有 MouseDown、MouseUp、MouseMove 事件用来创建多义线或多边形的中间结点。 该例子还是以实现 ICommand 和 ITool 接口的方法来完成操作,建立的 Class Module 为 clsDrawGeometry。 Class Name:clsDrawGeometry
49、ImplementsImplements esriSystemUI.IToolImplements esriSystemUI.ICommandEventPublic Event EndDraw(ByVal EndDraw As Boolean) EndDraw 事件在图形被绘制完毕时触发,其作用是留给调用的它的对象进行空间分析。 下面给出 MouseDown、MouseMove、MouseUp 和 DoubleClick 四个事件的所有代码。Private Sub ITool_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVa
50、l X _ As Long, ByVal Y As Long) 根据类型来启动不同的绘制对象Setm_pPoint=m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)Select Case m_DrawType 是点的时候直接获得该点 Case esriGeometryType.esriGeometryPoint Set m_pGeometry = m_pPoint RaiseEvent EndDraw(True) Case esriGeometryType.esriGeometryEnvelope 矩形拉框 I
51、f m_pNewEnvelopeFeedback Is Nothing Then 定义一个矩形 feedback,模拟拉框 Set m_pNewEnvelopeFeedback = New NewEnvelopeFeedback Set m_pNewEnvelopeFeedback.Display = m_pScreenDisplay m_pNewEnvelopeFeedback.Start m_pPoint河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现25 End If Case esriGeometryType.esriGeometryPolyline 线 If m_pNewLin
52、eFeedback Is Nothing Then Set m_pNewLineFeedback = New NewLineFeedback Set m_pNewLineFeedback.Display = m_pScreenDisplay m_pNewLineFeedback.Start m_pPoint Else 在用户没有双击前,继续画 m_pNewLineFeedback.AddPoint m_pPoint End If Case esriGeometryType.esriGeometryPolygon If m_pNewPolygonFeedback Is Nothing Then
53、Set m_pNewPolygonFeedback = New NewPolygonFeedback Set m_pNewPolygonFeedback.Display = m_pScreenDisplay m_pNewPolygonFeedback.Start m_pPoint Else 在用户没有双击前,继续画 m_pNewPolygonFeedback.AddPoint m_pPoint End If Case 1111 要素缓冲 Dim pPt As IPoint Dim pGeo As IGeometry Dim pMapCtrl As MapControl Dim pFeatLyr
54、 As IFeatureLayer Dim pFSelection As IFeatureSelection Dim pFilter As ISpatialFilter Dim pTopo As ITopologicalOperator Dim i As Integer, Count As Integer河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现26 Set pMapCtrl = m_pHook.hook Set pPt = pMapCtrl.ToMapPoint(X, Y) Set pTopo = pPt Count = pMapCtrl.LayerCount Set pFilt
55、er = New SpatialFilter With pFilter Set .Geometry = pTopo.Buffer(0.05) .SpatialRel = esriSpatialRelIntersects End With For i = 0 To Count - 1 Set pFSelection = pMapCtrl.Layer(i) pFSelection.SelectFeatures pFilter, esriSelectionResultNew, False Next pMapCtrl.Refresh esriViewGeoSelection End Select Ex
56、it SubEnd SubPrivate Sub ITool_OnMouseMove(ByVal button As Long, ByVal shift As Long, ByVal X _As Long, ByVal Y As Long) Dim pPoint As esriGeometry.IPoint Select Case m_DrawType Case esriGeometryType.esriGeometryEnvelope 矩形拉框 If Not m_pNewEnvelopeFeedback Is Nothing Then Set pPoint = m_pScreenDispla
57、y.DisplayTransformation.ToMapPoint(X, Y) m_pNewEnvelopeFeedback.MoveTo pPoint河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现27 End If Case esriGeometryType.esriGeometryPolyline 线 If Not m_pNewLineFeedback Is Nothing Then Set pPoint = m_pScreenDisplay.DisplayTransformation.ToMapPoint(X, Y) m_pNewLineFeedback.MoveTo pPoi
58、nt End If Case esriGeometryType.esriGeometryPolygon 多边形 If Not m_pNewPolygonFeedback Is Nothing Then SetpPoint=m_pScreenDisplay.DisplayTransformation.ToMapPoint(X, Y) m_pNewPolygonFeedback.MoveTo pPoint End If End SelectEnd SubPrivate Sub ITool_OnMouseUp(ByVal button As Long, ByVal shift As Long, By
59、Val _ X As Long, ByVal Y As Long) 拉框和要素缓冲区是以 MouseUp 停止的 Select Case m_DrawType Case esriGeometryType.esriGeometryEnvelope 矩形拉框 If Not m_pNewEnvelopeFeedback Is Nothing Then Set m_pGeometry = m_pNewEnvelopeFeedback.Stop 停止拉框 RaiseEvent EndDraw(True) 触发 EndDraw 事件 Set m_pNewEnvelopeFeedback = Nothing
60、 End If Case 1111 要素缓冲区 RaiseEvent EndDraw(True) 触发 EndDraw 事件 End SelectEnd Sub河南城建学院毕业设计(论文) 第四章 缓冲区分析的实现28 Private Sub ITool_OnDblClick() 多边形和多义线是以双击来停止的 Select Case m_DrawType Case esriGeometryType.esriGeometryPolyline 线,双击停止 feedback Set m_pGeometry = m_pNewLineFeedback.Stop RaiseEvent EndDraw(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45445-2025电子商务平台适老化通用要求
- GB/T 45444-2025社区电商平台提货点管理指南
- 濮阳职业技术学院《文献检索与学术前沿1》2023-2024学年第二学期期末试卷
- 东华理工大学《伟大的红楼梦》2023-2024学年第二学期期末试卷
- 幼儿安全教育:烟花炮竹
- 一杯水压力管理
- 小学一年级安全知识
- 手动叉车安全操作规程
- 抗生素分级管理使用
- 护理专业知识小讲堂
- 检验科知识题库+答案
- FMEA潜在失效模式及分析标准表格模版
- 停车场月租卡办理登记表
- 项目六建筑工程项目成本管理
- 深基坑格构柱塔吊基础专项施工方案
- 蒸汽压力流速流量管径关系
- 根管冲洗与消毒演示文稿
- 屠宰厂废水处理站工艺初步设计资料
- 汽车行业VDA6.3过程审核检查表及评分标准
- GB/T 2930.4-2017草种子检验规程发芽试验
- GB/T 16604-2017涤纶工业长丝
评论
0/150
提交评论