com.supermap.analyst.spatialanalyst
类 VisibilityAnalyst

java.lang.Object
  继承者 com.supermap.analyst.spatialanalyst.VisibilityAnalyst

public class VisibilityAnalyst
extends java.lang.Object

可视性分析类。该类提供基于栅格表面(即地形)的两点或多点间可视性分析、单点或多点可视域分析,以及两点间的通视线分析。

可视性分析又称通视分析,通常包含点间可视性分析(判断两点间是否相互可见)、可视域分析(分析给定点位置上可视的范围)和通视线分析(分析两点间视线上的可视和不可视部分)。点间可视性分析又分为两点间可视性分析和多点间可视性分析;可视域分析分为单点可视域分析和多点可视域分析。

可视性分析对军事活动、微波通讯和旅游规划开发等都有重要应用价值。如布设阵地、设置观察哨所、铺设通信线路等,有时还需要分析不可见区域,如低空侦察飞机在飞行时,要尽可能避免敌方雷达的捕捉,飞机要选择雷达盲区飞行;又如设置雷达站、电视台的发射站等通讯设施;以及旅游线路开发、航海导航等,可视性分析均能够起到辅助规划和决策的作用。


方法摘要
 void addSteppedListener(SteppedListener l)
          添加一个进度条事件(SteppedEvent)的监听器。
static DatasetGrid calculateViewShed(DatasetGrid sourceDatasetGrid, Point3D viewPoint, double startAngle, double viewAngle, double viewRadius, Datasource targetDatasource, java.lang.String targetDatasetName)
          单点可视域分析,即分析单个观察点的可视范围。
static DatasetGrid calculateViewShed(DatasetGrid sourceDatasetGrid, Point3Ds viewPoints, double[] startAngles, double[] viewAngles, double[] viewRadiuses, Datasource targetDatasource, java.lang.String targetDatasetName, ViewShedType viewShedType)
          多点可视域分析,即分析多个观察点的可视范围,可以为共同可视域或非共同可视域。
static GridAnalystSetting getAnalystSetting()
          返回栅格分析的环境设置对象。
static VisibleResult isVisible(DatasetGrid sourceDatasetGrid, Point3D fromPoint, Point3D toPoint)
          两点可视性分析,即判断两点之间是否相互可见。
static VisibleResult[] isVisible(DatasetGrid sourceDatasetGrid, Point3Ds fromPoints, Point3Ds toPoints)
          多点可视性分析,即判断多点之间是否可两两通视。
static GeoLine[] lineOfSight(DatasetGrid sourceDataset, Point3D fromPoint, Point3D toPoint)
          计算两点间的通视线,即根据地形计算观察点到目标点的视线上的可视部分和不可视部分。
static DatasetVector radarShieldAngle(DatasetGrid[] sourceDatasets, Point3D viewPoint, double startAngle, double endAngle, double viewRadius, Datasource targetDatasource, java.lang.String targetDatasetName, double interval)
          根据多个地形图和雷达中心点,返回各方位上最大的雷达遮蔽角的点数据集。
static DatasetVector radarShieldAngle(DatasetGrid sourceDataset, Point3D viewPoint, double startAngle, double endAngle, double viewRadius, Datasource targetDatasource, java.lang.String targetDatasetName, double interval)
          根据地形图和雷达中心点,返回各方位上最大的雷达遮蔽角的点数据集。
 void removeSteppedListener(SteppedListener l)
          移除一个进度条事件(SteppedEvent)的监听器。
static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
          设置栅格分析的环境设置对象。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

getAnalystSetting

public static GridAnalystSetting getAnalystSetting()
返回栅格分析的环境设置对象。

返回:
栅格分析的环境设置对象。

setAnalystSetting

public static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
设置栅格分析的环境设置对象。

参数:
gridAnalystSetting - 栅格分析的环境设置对象。

isVisible

public static VisibleResult isVisible(DatasetGrid sourceDatasetGrid,
                                      Point3D fromPoint,
                                      Point3D toPoint)
两点可视性分析,即判断两点之间是否相互可见。

基于栅格表面,判断给定的观察点与被观察点之间是否可见,称为两点间可视性分析。两点间可视性分析的结果有两种:可视与不可视。该方法返回一个 VisibleResult 对象,该对象用于返回两点间可视性分析的结果,即两点是否可视,如果不可视,会返回第一个阻碍视线的障碍点,还会给出该障碍点的建议高程值以使该点不再阻碍视线。

注意:如果指定的观察点的高程小于当前栅格表面对应位置的高程值,则观察点的高程值将被自动设置为当前栅格表面的对应位置的高程。

参数:
sourceDatasetGrid - 指定的用于可视性分析的栅格表面数据集。
fromPoint - 指定的用于可视性分析的起始点,即观察点。
toPoint - 指定的用于可视性分析的终止点,即被观察点。
返回:
可视性分析的结果,保存于 VisibleResult 类对象中。

isVisible

public static VisibleResult[] isVisible(DatasetGrid sourceDatasetGrid,
                                        Point3Ds fromPoints,
                                        Point3Ds toPoints)
多点可视性分析,即判断多点之间是否可两两通视。

多点可视性分析,是根据栅格表面,计算观察点与被观察点之间是否两两通视。两点间可视性分析请参阅另一重载方法 isVisible 方法的介绍。

如果有 m 个观测点和 n 个被观测点,将有 m * n 种观测组合。分析的结果通过一个 VisibleResult 对象数组返回,每个 VisibleResult 对象包括对应的两点是否可视,如果不可视,会给出第一个障碍点,以及该点的建议高程值以使该点不再阻碍视线。

注意:如果指定的观察点的高程小于当前栅格表面对应位置的高程值,则观察点的高程值将被自动设置为当前栅格表面的对应位置的高程。

参数:
sourceDatasetGrid - 指定的用于可视性分析的栅格表面数据集。
fromPoints - 指定的用于可视性分析的起始点,即观察点。
toPoints - 指定的用于可视性分析的终止点,即被观察点。
返回:
可视性分析的结果,保存于 m*n 大小的 VisibleResult 类对象数组中。

calculateViewShed

public static DatasetGrid calculateViewShed(DatasetGrid sourceDatasetGrid,
                                            Point3D viewPoint,
                                            double startAngle,
                                            double viewAngle,
                                            double viewRadius,
                                            Datasource targetDatasource,
                                            java.lang.String targetDatasetName)
单点可视域分析,即分析单个观察点的可视范围。

单点可视域分析是在栅格表面数据集上,对于给定的一个观察点,查找其在给定的范围内(由观察半径、观察角度决定)所能观察到的区域,也就是给定点的通视区域范围。分析的结果为一个栅格数据集,其中可视区域保持原始栅格表面的栅格值,其他区域为无值。

如下图所示,图中绿色的点为观察点,叠加在原始栅格表面上的蓝色区域即为对其进行可视域分析的结果。

注意:如果指定的观察点的高程小于当前栅格表面对应位置的高程值,则观察点的高程值将被自动设置为当前栅格表面的对应位置的高程。

参数:
sourceDatasetGrid - 指定的用于可视域分析的栅格表面数据集。
viewPoint - 指定的观察点位置。
startAngle - 指定的起始观察角度,单位为度,以正北方向为 0 度,顺时针方向旋转。指定为负值或大于 360 度,将自动换算到 0 到 360 度范围内。
viewAngle - 指定的观察角度,单位为度,最大值为 360 度。观察角度基于起始角度,即观察角度范围为 [起始角度,起始角度+观察角度]。例如起始角度为 90 度,观察角度为 90 度,那么实际观察的角度范围是从 90 度到 180 度。但注意,当指定为 0 或负值时,无论起始角度为何值,观察角度范围都为 0 到 360 度。
viewRadius - 指定的观察半径。该值限制了视野范围的大小,若观测半径小于等于 0 时,表示无限制。单位为米。
targetDatasource - 指定的用于存储结果数据集的数据源。
targetDatasetName - 指定的结果数据集的名称。
返回:
单点可视域分析结果数据集。

calculateViewShed

public static DatasetGrid calculateViewShed(DatasetGrid sourceDatasetGrid,
                                            Point3Ds viewPoints,
                                            double[] startAngles,
                                            double[] viewAngles,
                                            double[] viewRadiuses,
                                            Datasource targetDatasource,
                                            java.lang.String targetDatasetName,
                                            ViewShedType viewShedType)
多点可视域分析,即分析多个观察点的可视范围,可以为共同可视域或非共同可视域。

多点可视域分析,是根据栅格表面,对给定的观察点集合中每一个观察点进行可视域分析,然后根据指定的可视域类型,计算所有观察点的可视域的交集(称为“共同可视域”)或者并集(称为“非共同可视域”),并将结果输出到一个栅格数据集中,其中可视区域保持原始栅格表面的栅格值,其他区域为无值。

如下图所示,图中绿色的点为观察点,叠加在原始栅格表面上的蓝色区域即为对其进行可视域分析的结果。左图展示了三个观察点的共同可视域,右图则是三个观察点的非共同可视域。

注意:如果指定的观察点的高程小于当前栅格表面对应位置的高程值,则观察点的高程值将被自动设置为当前栅格表面的对应位置的高程。

参数:
sourceDatasetGrid - 指定的用于可视域分析的栅格表面数据集。
viewPoints - 指定的观察点集合。
startAngles - 指定的起始观察角度集合,与观察点一一对应。单位为度,以正北方向为 0 度,顺时针方向旋转。指定为负值或大于 360 度,将自动换算到 0 到 360 度范围内。
viewAngles - 指定的观察角度集合,与观察点和起始观察角度一一对应,单位为度,最大值为 360 度。观察角度基于起始角度,即观察角度范围为 [起始角度,起始角度+观察角度]。例如起始角度为 90 度,观察角度为 90 度,那么实际观察的角度范围是从 90 度到 180 度。
viewRadiuses - 指定的观察半径集合,与观察点一一对应。该值限制了视野范围的大小,若观测半径小于等于 0 时,表示无限制。单位为米。
targetDatasource - 指定的用于存储结果数据集的数据源。
targetDatasetName - 指定的结果数据集的名称。
viewShedType - 指定的可视域的类型,可以是多个观察点的可视域的交集,也可以是多个观察点可视域的并集。
返回:
多点可视域分析结果数据集。

lineOfSight

public static GeoLine[] lineOfSight(DatasetGrid sourceDataset,
                                    Point3D fromPoint,
                                    Point3D toPoint)
计算两点间的通视线,即根据地形计算观察点到目标点的视线上的可视部分和不可视部分。

依据地形的起伏,计算从观察点看向目标点的视线上哪些段可视或不可视,称为计算两点间的通视线。观察点与目标点间的这条线称为通视线。通视线可以帮助了解在给定点能够看到哪些位置,可服务于旅游线路规划、雷达站或信号发射站的选址,以及布设阵地、观察哨所设置等军事活动。

观察点和目标点的高程由其 Z 值确定。当观察点或目标点的 Z 值小于栅格表面上对应单元格的高程值时,则使用该单元格的栅格值作为观察点或目标点的高程来计算通视线。

计算两点间通视线的结果为一个二维线对象数组,该数组的第 0 个元素为可视线对象,第 1 个元素为不可视线对象。该数组的长度可能为 1 或 2,这是因为不可视线对象有可能不存在,此时结果数组只包含一个对象,即可视线对象。由于可视线(或不可视线)可能不连续,因此可视线或不可视线对象有可能是复杂线对象。

参数:
sourceDataset - 指定的栅格表面数据集。
fromPoint - 指定的观察点,是一个三维点对象。
toPoint - 指定的目标点,是一个三维点对象。
返回:
结果通视线,是一个二维线数组。数组含义见备注。

addSteppedListener

public void addSteppedListener(SteppedListener l)
添加一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。

removeSteppedListener

public void removeSteppedListener(SteppedListener l)
移除一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。

radarShieldAngle

public static DatasetVector radarShieldAngle(DatasetGrid sourceDataset,
                                             Point3D viewPoint,
                                             double startAngle,
                                             double endAngle,
                                             double viewRadius,
                                             Datasource targetDatasource,
                                             java.lang.String targetDatasetName,
                                             double interval)
根据地形图和雷达中心点,返回各方位上最大的雷达遮蔽角的点数据集。方位角是顺时针与正北方向的夹角。

参数:
sourceDataset - 删格数据集或DEM。不支持影像数据集。
viewPoint - 三维点对象,表示雷达中心点的坐标和雷达中心与地面的高度。
startAngle - 雷达方位起始角度,单位为度,以正北方向为 0 度,顺时针方向旋转。范围为0到360度。如果设置为小于0,默认值为0;如果该值大于360,默认为360。
endAngle - 雷达方位终止角度,单位为度,最大值为 360 度。观察角度基于起始角度,即观察角度范围为 [起始角度,终止角度)。该值必须大于起始角度。如果该值小于等于0,表示[0,360)。
viewRadius - 观察范围,单位为米。如果设置为小于0,表示整个地形图范围。
targetDatasource - 目标数据源。如传入null,默认为地形数据所在数据源。
targetDatasetName - 结果数据集名称。
interval - 方位角的间隔,即每隔多少度返回一个雷达遮蔽点。该值必须大于0且小于360。
返回:
返回的三维点数据集,Z代表该点所在位置的地形高度。该数据集记录了每个方位上雷达遮蔽角最大的点,并增加了字段"ShieldAngle"、"ShieldPosition"和"RadarDistance"分别记录了雷达遮蔽角、该点与正北方向的夹角和点与雷达中心的距离。

radarShieldAngle

public static DatasetVector radarShieldAngle(DatasetGrid[] sourceDatasets,
                                             Point3D viewPoint,
                                             double startAngle,
                                             double endAngle,
                                             double viewRadius,
                                             Datasource targetDatasource,
                                             java.lang.String targetDatasetName,
                                             double interval)
根据多个地形图和雷达中心点,返回各方位上最大的雷达遮蔽角的点数据集。方位角是顺时针与正北方向的夹角。

参数:
sourceDatasets - 删格数据集或DEM集合。不支持影像数据集。
viewPoint - 三维点对象,表示雷达中心点的坐标和雷达中心与地面的高度。
startAngle - 雷达方位起始角度,单位为度,以正北方向为 0 度,顺时针方向旋转。范围为0到360度。如果设置为小于0,默认值为0;如果该值大于360,默认为360。
endAngle - 雷达方位终止角度,单位为度,最大值为 360 度。观察角度基于起始角度,即观察角度范围为 [起始角度,终止角度)。该值必须大于起始角度。如果该值小于等于0,表示[0,360)。
viewRadius - 观察范围,单位为米。如果设置为小于0,表示整个地形图范围。
targetDatasource - 目标数据源。
targetDatasetName - 结果数据集名称。
interval - 方位角的间隔,即每隔多少度返回一个雷达遮蔽点。该值必须大于0且小于360。
返回:
返回的三维点数据集,Z代表该点所在位置的地形高度。该数据集记录了每个方位上雷达遮蔽角最大的点,并增加了字段"ShieldAngle"、"ShieldPosition"和"RadarDistance"分别记录了雷达遮蔽角、该点与正北方向的夹角和点与雷达中心的距离。