ArcGIS Engine 9.2 打开多波段栅格数据

转载自:http://blog.sina.com.cn/s/blog_84f7fbbb010187cv.html

在用AE打开多波段栅格数据时,根据自己的观察,AE的IRasterBandCollection只是打开了多波段的三个波段,而对于其他的波段并没有打开,这个我觉得应该是ArcGIS公司的bug问题。我现在做的这点就遇到了这个问题,我要分析栅格数据的第四个波段,可以没有数据怎么分析呢。最后我想到了一个折中的办法,对于多波段栅格数据,前三个波段用于显示颜色,像普通打开栅格数据一样,添加图层,这个没有什么难度。然后循环打开后面的波段,一个波段一个图层,然后添加到map控件中,并设置其透明度为100,即全透明,这样的折中的解决了这个问题。
分享我的代码 我打开的是四波段。

string imgFileName;
            string LayerName;
            string imgFilePath;

            imgFilePath = "C:\\IR1";
            //shpFileName = "y0972920378.shp";
            imgFileName = "2009年12月30日4时0分FY2E红外图像.img";
            LayerName = "fengyun";


            IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
            IWorkspace workspace;
            workspace = workspaceFactory.OpenFromFile(imgFilePath, 0); //inPath栅格数据存储路径

            IRasterWorkspace rastWork = (IRasterWorkspace)workspace;
            IRasterDataset rasterDatst;
            rasterDatst = rastWork.OpenRasterDataset(imgFileName);//inName栅格文件名


            IGroupLayer pGroupLayer = new GroupLayerClass();
            IRasterLayer prasterLayer = new RasterLayerClass();
            int pBandCount;
            IRasterBandCollection pRasterBands;
            pRasterBands = (IRasterBandCollection)rasterDatst;

            pBandCount = pRasterBands.Count;
            if (pBandCount <= 3)
            {
                prasterLayer.CreateFromDataset(rasterDatst);
                prasterLayer.Name = LayerName;

                MapMain.AddLayer(prasterLayer,0);
                MapMain.Refresh();
                TOCControl.Refresh();
            }
            else
            {
                //添加 前三个波段
                prasterLayer.CreateFromDataset(rasterDatst);
                prasterLayer.Name = LayerName;

                MapMain.AddLayer(prasterLayer, 0);
                MapMain.Refresh();
                TOCControl.Refresh();

                IRasterBand pBand;
                IRaster pRaster = new RasterClass();
                //IRasterBandCollection pRasterbandColln;
                IRasterLayer pRasterLayer1 = new RasterLayerClass();
                IRasterDataset MyDs;
                string pBandname;
                //添加后面的波段
                for (int i = 3; i < pBandCount; i++)
                {
                    pBand = pRasterBands.Item(i);
                    IRasterBandCollection pRasterbandColln = (IRasterBandCollection)pRaster;
                    pRasterbandColln.Clear();
                    pRasterbandColln.AppendBand(pBand);

                    pRasterLayer1.CreateFromRaster((IRaster)pRasterbandColln);
                    pBandname = pBand.Bandname;
                    pBandname = LayerName + "-" + pBandname;
                    pRasterLayer1.Name = pBandname;

                    MapMain.AddLayer(pRasterLayer1, 0);
                    MapMain.Refresh();
                    TOCControl.Refresh();
                }

                //透明度设置
                ILayerEffects pLayerEffects;
                pLayerEffects = (ILayerEffects)MapMain.get_Layer(0);
                if (pLayerEffects.SupportsTransparency == true)
                {
                    pLayerEffects.Transparency = 100;
                }

                //透明度设置
                pLayerEffects = (ILayerEffects)MapMain.get_Layer(1);
                if (pLayerEffects.SupportsTransparency == true)
                {
                    pLayerEffects.Transparency = 35;
                }
                MapMain.Refresh();
                TOCControl.Refresh();

            }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值