Answers:
通常,我们具有有关地面位置的数据,因此我们必须使用它。地面决定了3D立体。您将该图径向投影到以查看者为中心的单位球体上:这将地面映射到球体中的某个区域。计算剩余区域的面积:这是天空对角的立体角(以弧度表示)。将其除以球体的总面积(等于4 pi),然后乘以100,即可得到天空百分比。
如果您希望使用更生动的解释,请将观看者放在一个小球形气泡的中心,然后让她在天空上绘画。将她使用的油漆量除以绘制整个气泡所需的量,然后乘以100。
实际上,这里有一些不太简单的技术细节。
当地面以三角网(TIN)给出时,到球体上的投影相当简单,因为您只需编写代码即可将三角形投影到球体上。当将地面作为网格高程模型(DEM)给出时,您可以将每个网格像元构想为3D四边形。您可以沿对角线将其分成两个三角形,并将每个三角形映射到球体上。无论哪种情况,您都会在球体上留下一组投影三角形。通过将球体投影到地图上(例如,使用立体投影),可以将这些三角形聚集到多边形区域中,从而减少到平面计算几何的标准问题(例如,使用平面扫描方法)。其余的操作很简单(对于GIS)。
此图显示了一个小巧的摩天大楼模拟城市,以一个人妖般的投影为中心,直视观察者市中心。GIS可以“合并”(形成这些多边形的并集)代表这些建筑物的侧面和屋顶的多边形,然后计算剩余的(白色)空间的面积。之所以选择Gnomonic投影,是因为将直线的建筑线渲染为线段而不是曲线。
当您只有地面和建筑物时,可以启用GIS进行此计算。这些建筑物最有可能以矩形的集合形式提供。矩形的顶点具有相对于查看者的欧几里得坐标(x,y,z)。将其转换为球坐标:即纬度和经度。为转换后的矩形创建一个多边形。对所有建筑物所有部分的所有矩形执行此操作,从而生成“多边形要素图层”。然后,在GIS中,(1)计算要素的理论集合,(2)计算结果面积,(3)从地球表面积的一半中减去(另一半用于地面), (4)除以整个地球面积(乘以100得到一个百分比)。计算工作量与N * log(N)成比例,其中N是顶点数。精度取决于GIS表示矩形的程度(您可能需要将矩形边分成更紧密间隔的顶点的序列)。根据您的准确性要求,您可以考虑使用基于蒙特卡洛的方法(例如,在另一个答复中提倡使用光线追踪),一旦您拥有数十万个顶点,也就是说,一旦观看者被数以万计的建筑物完全包围(并且可以看到其中的一部分):-)。
这是来自计算机图形世界而不是GIS的答案-因此,它是对算法的描述,而不是针对使用哪种工具的说明。
定义:射线是原点+方向;它是从原点开始并沿该方向延伸到无穷远的线。
您需要以下基本成分:
测试以查看给定的射线是否击中地面的能力。
测试以查看给定的射线是否击中建筑物的能力。
在3D笛卡尔坐标空间中的所有数据(建筑物,代表地面的信息)。
进行射线测试的确切公式取决于您如何表示“地面”(完美的球体?地形?)和“建筑物”(挤压的矩形?完整的3D模型?)。对于简单的几何图形,它们很容易找到并且易于实现。(例如,搜索“射线立方体相交”)。
无论如何,从那里得出的关于某个点的天空可见性百分比的答案都是微不足道的:从您的查询点发射具有随机方向的大量光线。从测试点可见的天空比例等于未撞击建筑物或地面的光线数量。
答案并不精确,但是您可以通过添加更多光线来将其计算到任何所需的精度水平。
如上所述,它不一定很快。但是您可以应用大量有据可查的优化。
(我希望,为计算多个点和相同建筑物数据集的天空能见度,此方法将在添加简单空间索引后将基于重投影的方法吹出水面。)
从二维表示所见,天空视野因子(SVF)由某个观测点上方的可见天空(Ω)部分定义(请参见图a)。该算法计算水平方向γi在n个方向(此处显示八个)到指定半径R(b)的垂直仰角。
为了克服现有可视化技术的缺点,提出了“天空因素”,例如分析性山体阴影中的定向照明问题。
表示可见天空部分最方便的方法是立体角Ω。这是一个对象观察者看到的物体大小的度量。物体的立体角与物体投影到以观察点为中心的单位球面上的面积A成比例。
SVF介于0和1之间。值接近1表示几乎整个半球都是可见的,在暴露的特征(平面和峰)中就是这种情况,而值0则存在于深凹陷和深谷的下部几乎看不到天空的地方 SVF是一个物理量(如果我们不通过垂直夸大来操纵高程数据)。
正如@mic_cord所指出的那样,Remote Sens。2011,3(2),398-415中发表了有关使用SVF进行数据可视化的论文。doi:10.3390 / rs3020398。
可从http://iaps.zrc-sazu.si/en/rvt#v获得免费的用于计算SVF(及更多)的工具。
Ecotect(现在是AutoDesk工具)使您可以执行此操作。更一般而言,在采光领域经常对此进行检查,并且该领域的工具可能比GIS更易于使用。(尽管我听说过可以执行此操作并计算日照量的GIS插件,但我从未设法找到它)。
在GRASS GIS版本7(实际上是不稳定的)中,有命令r.skyview(基于命令r.horizon,在稳定的GRASS v.6中也可用)。
它读取代表地形模型的光栅图像,其像素值对应于地形特征高度(例如建筑物高度),并针对每个像素计算“空中视野系数”。
您首先需要将数据(未知格式)转换为栅格数据集。
看到:
http://grass.osgeo.org/grass70/manuals/addons/r.skyview.html