阅读:5152回复:0
GIS 缓冲区应用及算法实现
<div class="postbody"><font size="4">
</font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">作者:</span> <span style="font-size: 10pt;" lang="EN-US"><a title="" href="http://www.blogjava.net/flyingis/" target="_blank"><font color="#000080">Flyingis<?XML:NAMESPACE PREFIX = O /><o:p></o:p></font> </a></span><span style="font-family: 宋体; font-size: 10pt;"></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">地理信息空间几何关系分析主要包括邻近度</span> <span style="font-size: 10pt;" lang="EN-US"><font face="Times New="New" Roman">(proximity)</font> </span><span style="font-family: 宋体; font-size: 10pt;">分析、叠加分析、网络分析等。缓冲区分析是邻近度分析的一种,缓冲区是为了识别某一地理实体或空间物体对其周围地物的影响度而在其周围建立具有一定宽度的带状区域。缓冲区作为独立的数据层进行叠加分析,可应用到道路、河流、环境污染源、居民点、辐射源等的空间分析,为某种应用目的提供科学依据,另外,结合不同的专业模型,可以在生活、军事、城乡规划等领域发挥重要的作用。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">针对点、线、面不同的几何类型,建立缓冲区的方式相互有所不同。建立点缓冲区比较简单,即以某点要素为圆心,以缓冲半径</span> <span style="font-size: 10pt;" lang="EN-US"><font face="Times New="New" Roman">R</font> </span><span style="font-family: 宋体; font-size: 10pt;">作圆,得到点要素的缓冲区;线要素的缓冲区是以线为轴,以</span> <span style="font-size: 10pt;" lang="EN-US"><font face="Times New="New" Roman">R</font> </span><span style="font-family: 宋体; font-size: 10pt;">为距离作两侧的平行线,在线的两端构建两个半圆弧段,和平行线一起组成缓冲区;面缓冲区的建立,是以面要素的边界为基线向内外侧作平行线,平行线和基线里的区域就是面缓冲区。除此之外,还可以对栅格数据建立缓冲区,根据不同的模型方程建立动态缓冲区,不论对什么样的数据建立缓冲区,其基本方法都是相似的。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">缓冲区实现算法有矢量方法和栅格方法两种。其中矢量方法数据量小,方法相对成熟,栅格图像需要进行栅格像元之间进行布尔运算,当缓冲区较大时会带来较重的运算负荷,实际运用中存在一定的局限性。矢量方法算法一般遵循以下步骤:</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><u><span style="font-family: 宋体; font-size: 10pt;">点</span> </u><span style="font-family: 宋体; font-size: 10pt;">:确定中心点——以中心点为圆心、</span> <span style="font-size: 10pt;" lang="EN-US"><font face="Times New="New" Roman">R</font> </span><span style="font-family: 宋体; font-size: 10pt;">为半径生成一个圆——得到缓冲区边界</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><u><span style="font-family: 宋体; font-size: 10pt;">线、面</span> </u><span style="font-family: 宋体; font-size: 10pt;">:确定轴线——以距离</span> <span style="font-size: 10pt;" lang="EN-US"><font face="Times New="New" Roman">R</font> </span><span style="font-family: 宋体; font-size: 10pt;">生成中心轴线的平行曲线——处理转角弧段——对生成的弧段进行求交、合并运算——生成缓冲区边界</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">常用的矢量数据中心线扩张算法:</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20.1pt;" class="MsoNormal"><font size="4"><b><span style="font-family: 宋体; font-size: 10pt;">角分线法</span> </b><span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">基本思想:即“简单平行线法”,在轴线的两边作出平行线,在转角处形成尖角,两端形成弧段,组成缓冲区。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">缺陷:难以保证在尖角处缓冲区左右边线等宽;校正过程复杂,主要体现在轴线折角很大和很小时的情况;算法模型复杂,主要是因为几何生成过程中需要处理较多的异常。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20.1pt;" class="MsoNormal"><font size="4"><b><span style="font-family: 宋体; font-size: 10pt;">凸角圆弧法</span> </b><b><span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></b></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">基本思想:顾名思义,即是在转角外侧用圆弧来代替尖角,内侧仍然使用尖角的方法,生成缓冲区。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">实施步骤:</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 0pt="0pt" 17.85pt; text-indent: -17.85pt;" class="MsoNormal"><font size="4"><span style="font-size: 10pt;" lang="EN-US"><span><font face="Times New="New" Roman">1.<span style="'font:" 7pt="7pt" /normal "Times New="New" Roman"; font-size-adjust: none; font-stretch: normal;'> </span></font></span></span><span style="font-family: 宋体; font-size: 10pt;">直线性判断,判断相邻三点是否在同一直线上;</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 0pt="0pt" 17.85pt; text-indent: -17.85pt;" class="MsoNormal"><font size="4"><span style="font-size: 10pt;" lang="EN-US"><span><font face="Times New="New" Roman">2.<span style="'font:" 7pt="7pt" /normal "Times New="New" Roman"; font-size-adjust: none; font-stretch: normal;'> </span></font></span></span><span style="font-family: 宋体; font-size: 10pt;">折点凸凹性判断,确定转角的地方哪侧使用直线求交,哪侧使用圆弧连接;</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 0pt="0pt" 17.85pt; text-indent: -17.85pt;" class="MsoNormal"><font size="4"><span style="font-size: 10pt;" lang="EN-US"><span><font face="Times New="New" Roman">3.<span style="'font:" 7pt="7pt" /normal "Times New="New" Roman"; font-size-adjust: none; font-stretch: normal;'> </span></font></span></span><span style="font-family: 宋体; font-size: 10pt;">凸点圆弧的嵌入,即将转角外侧形成的圆弧和两边的线段相连;</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 0pt="0pt" 17.85pt; text-indent: -17.85pt;" class="MsoNormal"><font size="4"><span style="font-size: 10pt;" lang="EN-US"><span><font face="Times New="New" Roman">4.<span style="'font:" 7pt="7pt" /normal "Times New="New" Roman"; font-size-adjust: none; font-stretch: normal;'> </span></font></span></span><span style="font-family: 宋体; font-size: 10pt;">边线关系的判别与处理,岛屿多边形参与缓冲区边界的构成,重叠多边形不参与缓冲区边界的构成;</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt 17.85pt; text-indent: -17.85pt;" class="MsoNormal"><font size="4"><span style="font-size: 10pt;" lang="EN-US"><span><font face="Times New="New" Roman">5.<span style="'font:" 7pt="7pt" /normal "Times New="New" Roman"; font-size-adjust: none; font-stretch: normal;'> </span></font></span></span><span style="font-family: 宋体; font-size: 10pt;">缓冲区边界的形成,具体是将重叠区域进行合并,绘制外围的边线,包括岛屿多边形的轮廓,形成最终的缓冲区边界。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p><font size="4"> </font><p style="margin: 0cm="0cm" 0cm="0cm" 7.8pt; text-indent: 20pt;" class="MsoNormal"><font size="4"><span style="font-family: 宋体; font-size: 10pt;">在缓冲区算法中,需要注意的一个问题是<u>缓冲区多边形的重叠与合并</u>,包括同一要素缓冲区的重叠和多个要素之间缓冲区的重叠。栅格数据缓冲区内的栅格具有一个与其影响度对应的一个值,如果重叠区域具有相同影响度则任取一值,如果不同则采取影响度大的代替影响度小的方法处理。对于矢量数据的处理算法有三种:数学运算法;矢量-栅格转换法;矢量-栅格混合法。</span> <span style="font-size: 10pt;" lang="EN-US"><o:p></o:p></span></font></p></div> |
|
|