zoukankan      html  css  js  c++  java
  • ArcEngine DEM叠加影像

    代码执行前:

    代码执行后:

    影像叠加代码:

            /// <summary>
            /// 叠加DEM
            /// </summary>
            /// <param name="pRasterLayer">DEM栅格</param>
            /// <param name="pOutRastLay">影像栅格</param>
            private void SufraceDEM(IRasterLayer pRasterLayer, IRasterLayer pOutRastLay)
            {
                IRasterSurface pRasterSurface = new RasterSurface();
                pRasterSurface.PutRaster(pRasterLayer.Raster, 0);
                ISurface pSurface = pRasterSurface as ISurface;
                ILayerExtensions pLayExtensions = pOutRastLay as ILayerExtensions;
                I3DProperties p3DProperties = null;
                for (int i = 0; i < pLayExtensions.ExtensionCount; i++)
                {
                    if (pLayExtensions.get_Extension(i) is I3DProperties)
                    {
                        p3DProperties = pLayExtensions.get_Extension(i) as I3DProperties;
                    }
                }
                p3DProperties.ZFactor =5; //夸张系数
                p3DProperties.BaseOption = esriBaseOption.esriBaseSurface;
                p3DProperties.BaseSurface = pSurface;
                p3DProperties.Apply3DProperties(pOutRastLay);
            }

    按钮调用代码:

     ILayer pLayer = getLayerByname("dem_project.tif");
     IRasterLayer pDemRasterLayer = pLayer as IRasterLayer;
     ILayer pImgLayer = getLayerByname("sx_img_3857.tif");
     IRasterLayer pImgRasterLayer = pImgLayer as IRasterLayer;
     SufraceDEM(pDemRasterLayer, pImgRasterLayer);
     axSceneControl1.SceneGraph.RefreshViewers();
    getLayerByname方法:
        /// <summary>
            /// 获取指定图层通过名称
            /// </summary>
            private ILayer getLayerByname(String name)
            {
                ILayer layer = null;
                int count = axSceneControl1.Scene.LayerCount;
                if (count == 0) MessageBox.Show("请加载图层");
                for (int i = 0; i < count; i++)
                {
                    layer = axSceneControl1.Scene.get_Layer(i);
                    if (name == layer.Name.ToString())
                    {
                        break;
                    }
                }
                return layer;
    
            }

    另外扩展一下影像叠加TIN的方法:

           /// <summary>
            /// 叠加TIN
            /// </summary>
            private void AddTINSufrace(IRasterLayer pOutRastLay, ITin tin)
            {
                ITinAdvanced pTINAdvanced = tin as ITinAdvanced;
                ISurface pSurface = pTINAdvanced.Surface;
                ILayerExtensions pLayExtensions = pOutRastLay as ILayerExtensions;
                I3DProperties p3DProperties = null;
                for (int i = 0; i < pLayExtensions.ExtensionCount; i++)
                {
                    if (pLayExtensions.get_Extension(i) is I3DProperties)
                    {
                        p3DProperties = pLayExtensions.get_Extension(i) as I3DProperties;
                    }
                }
                p3DProperties.ZFactor =3;
                p3DProperties.BaseOption = esriBaseOption.esriBaseSurface;
                p3DProperties.BaseSurface = pSurface;
                p3DProperties.Apply3DProperties(pOutRastLay);
            }

    TIN叠加调用:

    ILayer layer = getLayerByname("Tin");
    ITinLayer tinlayer = layer as ITinLayer;
    ILayer pImgLayer = getLayerByname("sx_img_3857.tif");
    IRasterLayer pImgRasterLayer = pImgLayer as IRasterLayer;
    AddTINSufrace(pImgRasterLayer, tinlayer.Dataset);
  • 相关阅读:
    数据仓库基本概念
    收藏--关于命名规范、维度明细层及集市汇总层设计的思考
    Thinkphp6框架学习:有关数据库的基本操作
    算法第一章作业
    解决 Intellij IDEA Cannot Resolve Symbol ‘BASE Decoder’ 问题
    利用Kruskal算法求最小生成树解决聪明的猴子问题 -- 数据结构
    利用BFS解决拯救007问题 -- 数据结构
    列出连通集(DFS及BFS遍历图) -- 数据结构
    42行代码完成深入虎穴
    利用Tarjan算法解决(LCA)二叉搜索树的最近公共祖先问题——数据结构
  • 原文地址:https://www.cnblogs.com/GIScore/p/6534616.html
Copyright © 2011-2022 走看看