精华内容
下载资源
问答
  • 两点通视分析,可以把线构成模型,然后从第一人称摄像机(Z方向)看下去,形成深度图。 然后再把深度图与线的z值进行比较,距离大的就是深度图该位置是其他物体。 下一步经过投影坐标判断。 ...

    两点通视分析,可以把线构成模型,然后从第一人称摄像机(Z方向)看下去,形成深度图。

    然后再把深度图与线的z值进行比较,距离大的就是深度图该位置是其他物体。

    下一步经过投影坐标判断。

    展开全文
  • VC_6_0环境下实现两点通视分析算法.
  • //获取两点的实际高度 float elevation1=source->GetValue(row1,col1); int drow,dcol,urow,ucol,row,col,epss; //计算在行列方向上的增量 drow=row1-row0; dcol=col1-col0; urow=((drow>0))-1;//在行方向(y)...
  • 三维分析之通视分析

    千次阅读 2019-07-12 08:58:33
    通视分析是三维GIS中常用的分析功能,用于判断三维场景中任意两点之间的通视情况。可根据在 3D 空间中相对于某表面或多面体要素类提供的障碍的位置,计算观察点与被观察点之间的通视性,沿着这些点之间的视线确定...

    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");
         }
    }
    
    
    展开全文
  • CesiumCesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速...利用DEM判断地形上任意两点之间是否可以互相可见的技术方法,分为视线通视分析和可视...

    8469304c59dc5db2537f2ecde1941c95.png

    Cesium

    Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。

    通视分析

    通视分析是指以某一点为观察点,研究某一区域通视情况的地形分析。利用DEM判断地形上任意两点之间是否可以互相可见的技术方法,分为视线通视分析和可视域分析,前者判断任意两点之间或者多点之间能否通视,后者对于给定的观察点,分析观察所覆盖的区域。

    其中可视域是从一个或者多个观察的可以看见的地表范围。可视域分析是在栅格数据数据集上,对于给定的一个观察点,基于一定的相对高度,查找给定的范围内观察点所能通视覆盖的区域,也就是给定点的通视区域范围,分析结果是得到一个栅格数据集。在确定发射塔的位置、雷达扫描的区域、以及建立森林防火瞭望塔的时候,都会用到可视域分析。可视域分析在航海、航空以及军事方面有较为广泛的应用。

    本章节首先处理这两种分析中的较为简单的通视分析,即给定的任意两点之间是否可见。

    简单的认知

    先上几张图,对于通视分析有个基本的直观了解,图片均来源于百度,如有侵权,请告知。

    d87506842abd2b0134de8196acb06e05.png

    4b46e7c3bdd6ff6ff9a0197f23861b95.png

    Cesium中通视分析的做法

    原理:采用射线法来判别两点之间是否有其他物体所遮挡(比如Entity、Primitive、Terrain、3DTiles等)

    接口API

    • Cesium.Cesium3DTileset
    • Cesium.Cartesian3
    • Cesium.Ray
    • Cesium.Scene

    具体步骤
    1.设置你自己的AccessToken,如果不用Ion上的网络资源可省略这步

    81c834deb4ada28ed554768e8c57b2bc.png


    2.初始化容器

    d47abf747aa4efcb6ab491c56b123c67.png


    3.加载3dtiles模型,作为通视的模型

    beef0e31e42486c4dbfa92737502b5f7.png


    4.指定观察点

    设置观察点所在的视点高度为100m

    78121770eea2a87b9ff4f1819259a500.png

    ……

    最终实现效果图:

    5034625dd22f8b1db4a5463d868eead7.png

    更多详情见小专栏

    Cesium专栏-空间分析之通视分析 - 小专栏xiaozhuanlan.com
    12a4d6270e5efddc024f7d017e016e41.png

    对本专栏感兴趣的话,可以关注一波

    GIS之家店铺:GIS之家
    GIS之家源码咨询:GIS之家webgis入门开发系列demo源代码咨询

    展开全文
  • 通视分析是指以某一点为观察点,研究到目标点通视情况的模拟分析。可以分为粗查询和细查询种 1、粗查询是根据视线与模型包围盒之间的空间关系进行分析; 2、细查询是根据视线与模型三角格网面之间的空间关系进行...

    **

    通视分析

    **

    一:技术原理:

    通视分析是指以某一点为观察点,研究到目标点通视情况的模拟分析。可以分为粗查询和细查询两种
    1、粗查询是根据视线与模型包围盒之间的空间关系进行分析;
    2、细查询是根据视线与模型三角格网面之间的空间关系进行分析;
    如果视线与任何模型存在相交,则该两点间不可通视。

    通视分析主要分为三步:确定缓冲区范围,设置查询条件,进行空间查询。
    在这里插入图片描述

    二:实现通视分析:

    1. .Net代码

    private bool ViewAnalysis() 
    {   
        AxRenderControl rendercontrol=getRenderControl();//获取控件
    
         //创建线(模拟实际视线)
        IGeometryFactory gfactory=new GeometryFactory();
        IPolyline line=gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
    
        //创建点,构造线段端点
        IPoint point=gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ) as IPoint;
        point.SetCoords(15388.76,35690.94,36.97,0,0);
        line.AppendPoint(point);
        point.SetCoords(15434.14,35716.11,5.2,0,0);
        line.AppendPoint(point);
    
        //获取建筑图层要素类
        IFeatureClass fc=buildingfc;
    
        //设置空间查询条件
        ISpatialFilter filter = new SpatialFilterClass();
        filter.Geometry = line;
        filter.SpatialRel = gviSpatialRel.gviSpatialRelEnvelope;
        filter.GeometryField = "Geometry";
    
        //粗判断
        if(fc.GetCount(filter)==0){
           return true;//可以通视
        }
    
        //粗查询
        IFdeCursor cursor = fc.Search(filter, false);
        IRowBuffer row = null;
    
        //细查询(排除与包围盒相交,但与模型不相交的情况)
        while ((row = cursor.NextRow()) != null)
        {
            int geometryIndex = row.FieldIndex("Geometry");
            if (geometryIndex != -1)
            {
                IModelPoint modelPoint = row.GetValue(geometryIndex) as IModelPoint;
                IModel model = (fc.FeatureDataSet as IResourceManager).GetModel(modelPoint.ModelName);//获取模型
                IGeometryConvertor gc = new GeometryConvertor();
                IMultiTriMesh triMesh = gc.ModelPointToTriMesh(model, modelPoint, false);//将模型三角化
    
                if (triMesh != null)
                {
                    ILine l = geoFactory.CreateGeometry(gviGeometryType.gviGeometryLine, gviVertexAttribute.gviVertexAttributeZ) as ILine;
                    l.StartPoint = line.StartPoint;
                    l.EndPoint = line.EndPoint;
                    IVector3 v3 = triMesh.LineSegmentIntersect(l);//分析三角面与线段交点
                    if (v3 != null){
                       return false;//不可以通视
                    }
                }
            }
        }  
        return true;//可以通视
    }
    

    2. JS代码

    function ViewAnalysis()
    {
        var __g=document.getElementById("__g");//获取控件
    
        //创建线(模拟实际视线)
        var gfactory=__g.geometryFactory;
        var line=gfactory.createGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);
    
        //创建点,构造线段端点
        var point=gfactory.createGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);
        point.setCoords(15388.76,35690.94,36.97,0,0);
        line.appendPoint(point);
        point.setCoords(15434.14,35716.11,5.2,0,0);
        line.appendPoint(point);
    
        //获取建筑图层要素类
        var fc=buildingfc;
    
        //设置空间查询条件
        var filter = __g.new_SpatialFilter;//新建空间查询条件
        filter.geometry = line;
        filter.spatialRel = gviSpatialRel.gviSpatialRelEnvelope;
        filter.geometryField = "Geometry";
    
        //粗判断
        if(fc.getCount(filter)==0){
           return true;//可以通视
        }
    
        //粗查询
        var cursor = fc.search(filter, false);
        var row = null;
    
        //细查询(排除与包围盒相交,但与模型不相交的情况)
        while ((row = cursor.nextRow()) != null)
        {
            var geometryIndex = row.fieldIndex("Geometry");
            if (geometryIndex != -1)
            {
                var modelPoint = row.getValue(geometryIndex);
                var model = fc.featureDataSet.getModel(modelPoint.modelName);//获取模型
                var gc = __g.geometryConvertor;
                var triMesh = gc.modelPointToTriMesh(model, modelPoint, false);//将模型三角化
    
                if (triMesh != null)
                {
                    var l = geoFactory.createGeometry(gviGeometryType.gviGeometryLine, gviVertexAttribute.gviVertexAttributeZ);
                    l.startPoint = polyline.startPoint;
                    l.endPoint = polyline.endPoint;
                    var v3 = triMesh.lineSegmentIntersect(l);//分析三角面与线段交点
                    if (v3 != null){
                       return false;//不可以通视
                    }
                }
            }
        }  
        return true;//可以通视 
    }
    

    重点解析

    1、模型的包围盒范围会略大于模型本身,并不能替代模型进行通视分析。为了分析结果的准确性,我们引入了三角网格面ITriMesh。它可以更好的贴合模型,较为准确的反映了模型的实际空间范围。
    在这里插入图片描述
    2、模型的三角网格化速度较慢,不推荐直接对整个要素类格网化。用包围盒先进行粗查询有利于排除不影响分析的模型,进一步提高分析效率。

    三:注意事项

    1、本节示例代码中使用了SDKDEMO.FDB数据,可以在SDK安装目录下的Samples\Media文件夹中找到。
    2、空间查询的Geometry对象需要与查询的要素类保持相同的空间参考,才能保证查询结果的准确。
    3、更多示例请参考SDK高级篇SightlineAnalysis。

    展开全文
  • 通视分析结果显示空间距离、垂直距离、水平距离、起点海拔及两点之间是否可视。 不仅如此,LSV还可以进行可视域分析、雷达分析、填挖方分析、剖面分析等分析功能。 转载于:...
  • 通视分析是三维GIS中常用的分析功能,用于判断三维场景中任意两点之间的通视情况。可根据在 3D 空间中相对于某表面或多面体要素类提供的障碍的位置,计算观察点与被观察点之间的通视性,沿着这些点之间的视线确定...
  • CesiumCesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速...利用DEM判断地形上任意两点之间是否可以互相可见的技术方法,分为视线通视分析和可视...
  • 三维场景下通视分析

    2008-04-11 15:30:00
    通视分析的类型大致有:一点对整个区域的通视面积计算,两点之间的通视性判断,多点通视面积的交集计算,由被覆盖的可视面积反求待定位置与高度等。本文章着重讲解三维场景下前两种通视分析类型的算法和编码。 ...
  • 基于Cesium的通视分析的实现

    千次阅读 2018-02-19 00:04:07
    基于Cesium三维地图项目记录_通视分析功能的实现##实现了剖面分析功能之后,下面来看看如何实现通视分析,还是基本按照之前的思路实现;了解软件LocaScape是怎么实现的; 网址如下:...
  • 通视分析是指以某一点为观察点,研究某一区域通视情况的地形分析。用户在模型上选取任意两点之间是否可以互相可见的技术方法,主要用于判断任意两点之间能否通视; 图层管理(√) dom 点扩散(√) 轨迹回放(√...
  • 三维可视分析包括通视分析和可视域分析。前者用来判断两点之间是否通视,后者用于对观察点的可视范围进行分析。涉及到的控件:sceneControl相关事件:Tracking,TrackedScene属性:TrackingLayerSightLine(通视线)...
  • ArcGIS中3D视线分析:[构造视线],[通视性]工具。ArcGIS中提供了个关于视线分析工具:构造一个观察到目标地物的所有视线,视线为3D线要素。指定一些障碍物,在视线线要素中添加一个Visibility字段,0表示障碍物...
  • 如在工程建设上,可用于如土方量计算、通视分析等;在防洪减灾方面,DEM是进行水文分析如汇水区分析、水系网络分析、降雨分析、蓄洪计算、淹没分析等的基础;在无线通讯上,可用于蜂窝电话的基站分析等等。建立DEM的...
  • GIS可视性分析概述

    2020-08-30 11:12:17
    可视性分析一般指从一个或多个位置所能看到的范围或可见程度。 可视域分析 ... 根据给定的观察和被观察,在输入的栅格表面上对这之间能否相互通视进行分析。 当前地图窗口中必须存...
  • VisiableAnalysis-master.rar

    2019-07-04 14:13:25
    Cesium通视分析插件,通过鼠标选点,计算两点之间是否通视、水平距离、垂直距离、空间距离等
  • 对于新手而言, 快速有效地建立三维模型是一大难题, 其实归纳一下无非是以下几个难点。● 软件中的建模指令不熟悉。● 新手掌握工程制图...基于以上列出的 3 点, 前两点可以在长期的建模训练中得到解决或加强...
  • 对于新手而言, 快速有效地建立三维模型是一大难题, 其实归纳一下无非是以下几个难点。● 软件中的建模指令不熟悉。● 新手掌握工程制图...基于以上列出的 3 点, 前两点可以在长期的建模训练中得到解决或加强...
  • 介绍了空间中两点通视性问题的基本算法;给出了局部最优单调区间的定义;通过分析视线方向与地形遮挡点之间的关系,提出了基于局部最优区间和最大高程限制的通视性改进算法,给出了算法的实现方法;改进算法只对一般...
  • 后续将分享一些下面的功能: 图层管理(√) dom 扩散(√) 轨迹回放(√) 测量(√) ...通视分析 开挖分析 双屏对比(个 cesium 窗体,同步窗口信息) 矢量白膜自定义shader 系列 cesium 与 echar
  • 二计算,坡度的正切=垂直相对高度/水平实地距离02通视问题通过作地形剖面图来解决,如果过已知两点作的地形剖面图无山地或山脊阻挡,则两地可互相通视;注意凸坡(等高线上疏下密)不可见,凹坡(等高线上密下疏)可见;...
  • 通视问题:通过作地形剖面图来解决,如果过已知两点作的地形剖面图无山地或山脊阻挡,则两地可互相通视;注意凸坡(等高线上疏下密)不可见,凹坡(等高线上密下疏)可见;注意题中要求,分析图中景观图是仰视或俯视可见。...
  • CDA一级考试知识考得基础,考试形式中国式考试,单选+多选+案例分析题形式。 涉及到数据分析概述、数据结构、数据库基础、描述性统计分析、多维数据透视分析、 业务数据分析、业务分析报告与数据可视化报表。话...
  • 地理信息系统算法基础

    千次下载 热门讨论 2009-06-20 10:57:53
    12.4通视分析算法 12.4.1判断两点之间的可视性的算法 12.4.2计算可视域的算法 思考题 第13章空间数据挖掘算法 13.1概述 13.2分类算法 13.2.1数据分类的基本过程 13.2.2决策树分类概述 13.2.3决策树的...
  • 12.4通视分析算法 12.4.1判断两点之间的可视性的算法 12.4.2计算可视域的算法 思考题 第13章空间数据挖掘算法 13.1概述 13.2分类算法 13.2.1数据分类的基本过程 13.2.2决策树分类概述 13.2.3决策树的...
  • VC++通用GIS功能开发解决方案

    热门讨论 2006-03-16 00:00:00
    #量算多点距离#计算线段最大坡度#计算区域面积#计算区域高程#两点通视#中心通视# #区域坡度图#断面图#区域通行分析 全部分析采用实时数据显示(操作同时显示结果)技术,配以最后结果显示。 几点说明: ======...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

两点通视分析