三维空间分析 |
通视分析是三维GIS中常用的分析功能,指以某一点为观察点,其余点为目标点,计算观察点与目标点之间的通视性,沿着这些点之间的视线确定可见性,利用不同颜色显示策略来分析观察点到目标点是否被障碍物阻挡,并在障碍物处获取障碍点,分析结果一目了然。
SuperMap iClient3D for Plugin提供了通视分析功能(Slightline类),需要用户指定观察点和目标点,分析的结果保存在SightlineResult对象中,包含了障碍点、观察点、目标点、两点间是否可见的信息。通视分析示意图如下:
图 2‑1 观察点到目标点可见
图 2‑2 观察点到目标点被障碍遮挡
通视分析广泛应用于建筑物视线遮挡判断,监控覆盖率、通讯信号覆盖、军事设施布设、军事火力覆盖等多方面。
在SuperMap iClient3D for Plugin中Slightline类提供了通视分析的多种属性和方法,Slightline类的方法及属性见下表:
表 2.1 Slightline类方法列表
返回类型 |
名称 |
描述 |
Number |
addTargetPoint |
添加目标点。 |
void |
build |
执行视线分析。 |
void |
clear |
清除分析结果。 |
Point3D |
getTargetPoint |
根据指定索引号,返回指定的目标点对象。 |
SightlineResult |
getVisibleResult |
返回指定索引通视线的分析结果。 |
void |
removeAllTargetPoints |
移除所有的目标点。 |
void |
removeTargetPoint |
移除指定索引位置的目标点对象。 |
void |
setTargetPoint |
在指定的索引位置,添加目标点。 |
表 2.2 Slightline类属性列表
返回类型 |
名称 |
描述 |
Color |
hiddenColor |
获取或设置通视分析的不可见线颜色。 |
Number |
targetPointCount |
获取视线分析中目标点的个数。 |
Point3D |
viewerPosition |
获取或者设观察者的位置。 |
Color |
visibleColor |
获取或者设通视分析的可见线颜色。 |
SightlineResult类用于存放通视分析的结果。SightlineResult类的属性如下表所示:
表 2.3 SightlineResult类属性列表
类型 |
名称 |
描述 |
Point3D |
barrierPoint |
获取通视分析的障碍点。 |
Boolean |
isVisible |
获取通视分析结果是否可视,即观察点与目标点间的可视性。 |
Point3D |
targetPoint |
获取通视分析的目标点。 |
Point3D |
viewerPosition |
获取通视分析的观察点。 |
实现通视分析的主要代码如下:
Sightline=new SuperMap.Web.Realspace.Sightline(); //将第一个点设置为观察点 Sightline.set_viewerPosition(firstpoint); var pointlength=otherpoints.length; for(i=0;i <pointlength;i++){ var otherpoint=otherpoints[i]; //依次添加目标点 Sightline.addTargetPoint(otherpoint); } //执行通视分析 Sightline.build(); |
如下代码为如何实现显示障碍点。
function ShowBarr(){ //获取目标点个数 var count = sightline.get_targetPointCount(); for(var i=0; i<count; i++){ //获取分析结果 var result = sightline.getVisibleResult(i); //获取分析结果的障碍点 var pt = result.get_barrierPoint(); if(!result.get_isVisible()){ var geoPt3d = new SuperMap.Web.Core.GeoPoint3D(pt); //将获取到障碍点显示到场景的跟踪图层中 addGeometryToScene(geoPt3d,0); } } } |
通视分析的实现效果如下图:
图 2‑3通视分析结果