APP下载

三维场景下可视性分析技术的研究

2020-04-01李娟

关键词:可视性观测站视点

李娟

(山西省测绘地理信息院 第三测绘院,山西 太原 030002)

0 引言

可视性分析是三维地理信息系统(3D GIS)所特有的一种空间分析技术。随着GIS由二维向三维扩展,可视性分析技术在GIS中发挥着越来越重要的作用,在诸如森林防火瞭望塔和机场雷达等选址、路径规划及导航、战场上火力和火炮的有效打击范围、建筑的阻挡分析及日照分析等方面[1-2]都有重要应用。

可视性分析的结果受到许多复杂因素的影响,如地形、房屋建筑、植被、观测点和观测目标的位置等。传统的可视性分析算法主要是针对地形数据[3-4],其中通视分析常用算法主要通过判断斜率和高程值来确定可视性,如Janus、Dyntacs、ModSAF、Bresenham算法等[3-7];视域分析算法主要有R2和R3算法、Xdraw算法、双增量法和参考面法[3-9]。随着3D GIS的发展,很多学者对三维场景中比较重要的房屋建筑等模型数据的可视性分析方法进行了研究,如尹长林等[10]提出了基于投影和高程差值等方法实现了城市三维场景中地形和建筑模型的可视性分析;周永望等[11]将LOS可视算法和平面视域算法扩展到了立体视域计算中,并利用三维视球法建立了城市可视性衡量的指标模型。靳海亮等[12]通过计算投影区和视锥体底面的差集实现了三维城市的可视域分析。

以上方法没有或较少考虑到三维场景中的其他数据,忽略了这些数据的影响会导致相应的三维场景可视性分析结果出现偏差。本文基于一种改进的射线与三角形面求交算法,可以对三维场景下多种影响因素的数据进行通盘考虑,有效实现三维场景下的通视分析、视域分析及可视球等可视性分析,并对多视点的视域分析结果的定量化进行了探索。

1 射线与三角形面求交算法的改进

在三维场景中,可以将视线看成一条射线,这样只需判断射线在到达目标点之前是否与场景的其他对象有交点,有交点则不可视,反之则可视。射线与三维场景的求交计算最终可以归结为射线与构成场景模型的三角形面的求交[13]。实际分析中,该算法涉及大量多余的射线与三角形面求交,导致不必要的计算。因此,本文基于轴对齐包围盒和投影技术对求交算法进行改进,算法通过剔除多余的三角形面片,筛选出需要进行求交的三角形面,尽可能地减少了求交次数以提高效率。

1.1 射线与三角形求交算法

(1)

将一个三角形Q用三个顶点来表示,即Q{V1,V2,V3},则三角形内的任意一点都可以由以下方程式表示:

Q(a,b,c)=aV1+bV2+cV3

(2)

式中,a+b+c=1时,(a,b,c)又称为三角形Q的重心坐标,由于a=1-(b+c),因此常用(b,c)来表示重心坐标,将公式(1)代入公式(2)中就可以得到射线与三角形Q的交点方程:

(3)

如果0≤b≤1,0≤c≤1并且b+c≤1,那么交点位于三角形内,否则位于三角形外。射线与三角形面相交示意图如图1所示。

图1 射线与三角形面相交示意图Fig.1 Schematic diagram of ray intersecting with triangle surface

1.2 筛选三角形面

如果空间线段与三角形面相交,则二者在任意面上的投影有交点;反之,如果空间线段在某个面上的投影与三角形面在此面上的投影没有交点,则二者不相交。因此,可以通过判断构成视线的线段与构成场景模型的三角形面在水平面(xy面)和垂直面(xz面和yz面)上的投影是否有交点,剔除多余的三角形面,提高求交计算的效率。

为方便计算,采用包含对象且平行于坐标轴的最小六面体来代替空间三角形面进行投影。该最小六面体称为轴对齐包围盒,即“AABB包围盒”。其构造简单,储存空间小,便于计算。

筛选三角形面的算法流程图如图2所示。

基于AABB包围盒的投影算法如图3所示。其中O为视点,P为目标点,ABC为空间三角形。三角形ABC的AABB包围盒可以用体对角线的两个顶点来表示,即(xmin,ymin,zmin)和(xmax,ymax,zmax)。其中xmin为三角形ABC各顶点x坐标的最小值,即xmin=min{xA,xB,xC};xmax为三角形ABC各顶点x坐标的最大值,即xmax=max{xA,xB,xC}。ymin,ymax,zmin,zmax的值同理。

图2 三角形面的筛选流程Fig.2 Process of screening trianglessurface

图3 基于AABB包围盒的投影算法示意图Fig.3 Schematic diagram of projection algorithm based on AABB bounding box

AABB包围盒与线段OP在xy面上的投影分别为矩形R1R2R3R4和线段O′P′。其投影是否相交可以通过线段O′P′的两个端点与矩形R1R2R3R4的关系来判断。

线段O′P′两个端点的坐标分别为(x0,y0)和(xp,yp),矩形R1R2R3R4的端点坐标为(xmix,ymax)(xmax,ymax)(xmax,ymix)和(xmin,ymin)。矩形R1R2R3R4可以将平面划分为9个区域,分区情况如图4所示,其中矩形R1R2R3R4的四条边均属于0区。

图4 xy平面的分区情况示意图Fig.4 Schematic diagram of partition in xy plane

线段的两个端点与矩形的关系如下:

(1)线段有端点位于0区,此时线段与矩形相交。

点(x,y)位于0区需满足条件xmix≤x≤xmax,ymix≤y≤ymax。

(2)线段所有端点均不在0区。此时,需要通过线段O′P′与矩形对角线R1R3和R4R2是否相交来判断。如果不相交,线段完全在矩形外部;反之,线段相交且有一部分在矩形内部。

如果两线段相交,则两线段必然相互跨立对方,即一条线段的两个点要位于另一条线段的两边。线段与矩形对角线的关系如图5所示,其是否相交满足以下:

(4)

(5)

当d1≤0或d2≤0时,线段与矩形相交;反之,不相交。

图5 线段与矩形对角线的关系示意图Fig.5 Schematic diagram of relationship between line segment and rectangular diagonal

2 可视性分析的实现

2.1 通视分析的实现

通视分析的基本原理是判断观察点到目标点的视线之间是否存在物体遮挡,是视域分析的基础,其方法如下:

2.1.1 点与点通视分析

点与点通视分析步骤如下:

(1)在三维场景中取任一点O,根据观察点的高度h求出观察点O′的位置坐标。

(2)在三维场景中取目标点P,根据射线与三角形面的求交算法,用以O′为原点的射线O′P与三维场景进行求交计算。如果求交结果为空,则点O′与点P间通视,连接线段O′P,并以绿色的线进行绘制;如果求交结果不为空,且满足O′最近的支点与O′的距离小于视线O′P的长度,则点O′与点P间有遮挡,取离点O′最近的交点M,连接线段O′P并以绿色的线绘制出来,表示可通视;连接线段MP并以红色的线绘制出来,表示不通视。

点与点通视分析结果如图6所示。

图6 点与点通视分析Fig.6 Visibility analysis of point to point

2.1.2 点与线通视分析

点与线的通视分析步骤如下:

(1)在三维场景中取任一点O,根据观察点的高度h求出观察点O′的位置坐标。

(4)将点O′和R以开放式图形库(Open Graphics Library,OpenGL)中GL_TRIANGLE_FAN的连接方式绘制出来,将集合R′以OpenGL中GL_TRIANGLE_STRIP的连接方式绘制出来。

点与线通视分析结果如图7所示。

图7 点与线通视分析Fig.7 Visibility analysis of point to line

2.1.3 点与面通视

点与面的通视则是研究某一个区域内的通视情况,是计算观察点可视的地形表面几何的问题。

2.2 视域分析的实现

视域分析按照视点的数目可以分为单视点视域分析和多视点视域分析两类[3]。单视点视域分析是多视点视域分析的特殊情况,因此以多视点视域分析进行说明。

视域分析的基本思想是将整个测区范围尽可能的细分,以点代面,那么视域分析就可以转化为两点之间是否可视的问题。视域分析的结果就是视域范围内的所有点与观测点通视性的集合。例如,某测区范围内有3个观测站分别是观测站1(X.8704°N,Y.7411°E)、观测站2(X.8732°N,Y.7446°E)和观测站3(X.8746°N,Y.7381°E),其中X为某整数且X∈[0,90),Y为某整数且Y∈[0,180)。观测站的高度分别为8.0、5.0和6.0 m,观测站的观测半径分别为480.0、450.0和500.0 m。对测区范围内的3个观测站进行多视点视域分析的流程如图8所示。

3个观测站的多视点视域分析的步骤如下:

(1)根据观测站的观测半径计算3个观测站所覆盖的观测范围,并根据观测范围提取与其有交集的地形瓦片数据。

图8 多视点视域分析的流程Fig.8 Process of viewshed analysis of multi viewpoints

(2)对瓦片数据中的每个网格按一定的顺序进行遍历,按图9所示剖分方式将每个网格进行三角剖分,该剖分方式可以有效避免拉近或拉远场景导致的地形分辨率变化对视域分析结果的影响,计算三角形的包围球的球心坐标O。

图9 瓦片中单个网格的剖分方式Fig.9 Subdivision method of a single grid in Tiles

(3)获取站点观测范围内的三角形。即分别将每个观测站到球心O的距离与观测半径进行比较,如果大于半径的值,则认为包围球所包含的三角形在观测范围之外;小于半径的值,则三角形在观察范围之内。如果没有一个观测站的观测范围包含这个三角形,则继续遍历其他的三角形按上述方式继续判断是否在观测范围内。

(4)对于在某一观测站观测范围内的三角形,将以其包围球球心的坐标代替这个三角形与观测站进行可视性判断。如果球心与观测站点的连线与场景没有交点,或离观测站最近的交点到球心的距离小于包围球的半径的话,则认为三角形区域对于该观测站是可视的;否则,不可视。

(5)将三角形与各个观测站进行可视性判断之后,如果只有1个观测站与其通视,则三角形的颜色值为绿色,表示为某一观测站所单独可视;如果有大于等于2的观测站与其通视,则三角形的颜色值为黄色,表示为多个观测站所共同可视;如果没有观测站与其通视,则三角形的颜色值为红色,表示没有观测站能够观测到。

(6)将三角形按照有关参数(颜色值、属于哪个测站等)分类存储起来,并以.txt文档的形式输出。

(7)遍历其他的三角形按(3)中所述方式判断每个三角形的可视情况,直到遍历瓦片的所有三角形。

3个观测站的多视点视域分析的实现结果如图10所示。

对于上述视域分析的结果,可以通过计算三角形的面积来求出3个观测站所有可视区域的面积(图10中绿色标记区域与黄色标记区域的面积之和)、所有不可视区域的面积(图9中红色标记区域的面积)和公共可视区域的面积(图9中黄色标记区域的面积)。对于每一观测站而言,可以求出这个观测站的可视范围的面积、不可视范围的面积以及与它有公共可视范围的观测站数目、观测站名称和公共可视域的面积,实现了可视域分析结果的定量统计。结果可以.txt文档的形式输出。

表1 整个观测区视域分析结果(单位:m2)

表2各观测站视域分析的定量化结果(单位:m2)

Table 2Quantitative results of each observation station’s visibility results (unit:m2)

分析结果观测站名称各测站可视面积各测站不可视面积各观测站的公共可视情况个数观测站名称公共可视面积观测站1435 190314 1181观测站341 557.3 观测站2328 094325 5371观测站333 459.8 观测站3173 156628 1252观测站141 557.3观测站233 459.8

绿色为可视区域、红色为不可视区域,黄色为公共可视区域图10 多视点视域分析结果举例Green: visible area, red: invisible area,yellow: public visible areaFig.10 Viewshed analysis of multi viewpoints

观测区域视域分析的定量化结果如表1所示,各个观测站视域分析的定量化结果如表2所示。

2.3 可视球的实现

可视球是某一视点以一定的可视距离在空间任意方向上通视情况的集合。利用求交算法实现可视球的基本思路是在水平观测方向和垂直观测方向上内插求交线段,分别在这两个方向上进行求交计算。垂直方向上记录每条线段与场景的第一个交点,并连线形成可视球的经线。水平方向上记录相同垂直观测角的每条线段与场景的第一个交点,并连线形成可视球的纬线。若线段与场景无交点,仅在一定整数观测角时绘制经纬线。本文在三维场景中任选取一点作为视点,以可视距离为50 m进行可视球分析,实现结果如图11所示。

图11 可视球Fig.11 Viewsphere

3 结论

本文针对三维场景中的可视性分析所用到的射线与三角形面求交的算法以及实现各个可视性分析的方法进行了研究,并基于改进算法筛选多余三角形,提高求交效率,实现了通视分析、视域分析、可视球等分析,为三维场景下的可视性分析提供了可行的方案。同时,研究了多视点视域分析的问题,基于分块求交的思想,细分测区,将视域分析转化成两点之间的通视问题,实现了多视点视域分析的可视化,并对分析结果按照整个观测区域和各观测站的可视情况进行分类统计。分析结果明确了可视面积、不可视面积以及公共可视面积的情况,为森林防火瞭望塔等的选址决策提供了有力的参考。

猜你喜欢

可视性观测站视点
基于高频GPS的沂沭断裂带两侧震时位移分析
四川省甘孜州:航拍四川稻城高海拔宇宙线观测站
EN 17353∶2020《防护服 中等风险情况下的增强可视性装备》
荷兰 哈林维利特水闸 “TIJ”蛋形鸟类观测站
太原观象台站址迁移对气温变化的影响分析
环境视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
How Cats See The World
寻找新的视点