nannan
通视分析是三维GIS中常用的分析功能,用于判断三维场景中任意两点之间的通视情况。可根据在 3D 空间中相对于某表面或多面体要素类提供的障碍的位置,计算观察点与被观察点之间的通视性,沿着这些点之间的视线确定可见性。
通视分析示意图如下:
通视分析需要用户指定观察点和被观察点,观察点与被观察点是一对多的关系,一个观察点可对应多个被观察点进行分析,一个被观察点只能对应一个观察点进行通视分析。分析结果输出线将沿着输入视线的可见与不可见部分进行划分,绿色表示可见,红色表示不可见。
操作步骤:
1.在场景中添加需进行通视分析的模型数据,在“三维分析”选项卡上的“空间分析”组中,单击“通视分析”按钮,弹出“三维空间分析”面板。
2. 将鼠标移至场景中,当鼠标状态变为+ 时,即可在数据表面单击鼠标选取观察点。
3.添加一个观察点之后,鼠标状态会自动切换为拾取被观察点的状态,可继续添加一个或多个被观察点。在移动鼠标绘制被观察点时,可实时显示观察点与鼠标所在位置处的通视情况。
4.同时,在“三维空间分析”面板中,选中“通视分析”结点,单击工具栏中的“添加”按钮,可在场景的适当位置单击拾取添加观察点;选中通视分析结点目录下的某个观察点结点,单击工具栏中的“添加”按钮,可在场景的适当位置单击拾取该观察点对应的被观察点。
5.添加观察点与被观察点后,会实时分析观察点与对应被观察点之间的可见性。
6.全选被观察点后,勾选高亮显示障碍物,场景中会高亮显示障碍物,自动弹出障碍物相关属性信息。
以下代码示范.Net组件如何在三维场景中进行通视性分析:
public void VisibilityAnalyst(SceneControl sceneControl)
{
// 设置交互模式为三维通视分析模式
sceneControl.Action = Action3D.Intervisibility;
// 设置通视性分析的场景为三维控件的场景。
VisibilityAnalyst3D.Scene = sceneControl.Scene;
// 观察点
Point3D viewPoint = new Point3D(116.101074944241,40.6654658434974,853.498245092109);
// 目标点
Point3D targetPoint = new Point3D(116.112775633765, 40.7851918021846, 1020.92712477595);
// 判断两点知否通视,并保存分析结果到通视分析结果对象
VisibleResult3D Vres = VisibilityAnalyst3D.IsVisible(viewPoint, targetPoint);
// 如果两点不通视,则将不通视线和通视线绘制到场景跟踪层
if (!Vres.Visible)
{
sceneControl.Scene.TrackingLayer.Add(Vres.LineVisible, "pass");
sceneControl.Scene.TrackingLayer.Add(Vres.LineInvisible, "notpass");
}
// 如果两点通视,则将通视线绘制到跟踪层
else
{
sceneControl.Scene.TrackingLayer.Add(Vres.LineVisible, "visible");
}
}