com.supermap.realspace.spatialanalyst

类 VisibilityAnalyst3D


  • 已过时。 
    该类已经废弃,使用Sightline 替换。

    @Deprecated
    public abstract class VisibilityAnalyst3D
    extends Object
    三维可视分析类。三维可视分析包括通视分析和可视域分析,前者用于判断两点间是否通视,后者用于对观察点的可视范围进行分析。该类已经废弃,使用Sightline代替。 通视分析是三维GIS中常用的分析功能,用于判断三维场景中任意两点之间的通视情况。
    • 构造器详细资料

      • VisibilityAnalyst3D

        public VisibilityAnalyst3D()
        已过时。 
    • 方法详细资料

      • setScene

        public static void setScene(Scene value)
        已过时。 
        设置待分析的场景对象。
        参数:
        value - 待分析的场景对象。
      • getScene

        public static Scene getScene()
        已过时。 
        返回待分析的场景对象。
        返回:
        待分析的场景对象。
      • isVisible

        public static VisibleResult3D isVisible(Point3D viewPoint,
                                                Point3D targetPoint)
        已过时。 
        根据指定的观察点和目标点,来进行通视性分析。分析的结果保存在返回值中,为通视分析结果类对象。

        通视分析是三维GIS中常用的分析功能,用于判断三维场景中任意两点之间的通视情况。

        通视分析需要用户指定观察点和目标点,分析的结果保存在 VisibleResult3D 对象中,包含了是否通视、通视线对象、不通视线对象以及障碍点的信息。

        通视分析示意图:

        分析结果如下图所示:

        参数:
        viewPoint - 指定的观察点对象。
        targetPoint - 指定的目标点对象。
        返回:
        通视分析结果类对象。
        示范代码:
        以下代码示范如何在三维场景中进行通视性分析。
         public void visibilityAnalyst(SceneControl sceneControl)
         {
                // 设置交互模式为三维通视分析模式
                sceneControl.setAction(Action3D.INTERVISIBILITY);
        
                // 设置通视性分析的场景为三维控件的场景
                VisibilityAnalyst3D.setScene(sceneControl.getScene());
        
                // 观察点
                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.isVisible()){
                        sceneControl.getScene().getTrackingLayer().add(vres.getLineInvisible(), "pass");
                        sceneControl.getScene().getTrackingLayer().add(vres.getLineInvisible(), "notpass");
                }
                // 如果两点通视,则将通视线绘制到跟踪层
                else{
                        sceneControl.getScene().getTrackingLayer().add(vres.getLineInvisible(), "visible");
                }
        }
         

Copyright © 2021–2024 SuperMap. All rights reserved.