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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM