Example #1
0
        public void Init()
        {
            try
            {
                //根据选择的矢量文件的路径打开工作空间
                string   fileN    = panImage;
                FileInfo fileInfo = new FileInfo(fileN);
                string   filePath = fileInfo.DirectoryName;
                string   fileName = fileInfo.Name;

                IWorkspaceFactory wsf        = new RasterWorkspaceFactory();
                IWorkspace        wp         = wsf.OpenFromFile(filePath, 0);
                IRasterWorkspace  rw         = (IRasterWorkspace)wp;
                IRasterDataset    panDataset = rw.OpenRasterDataset(fileName);

                IRaster2       multiRaster2 = m_raster as IRaster2;
                IRasterDataset multiDataset = multiRaster2.RasterDataset;
                //默认波段顺序,RGB和近红外
                //创建全色和多光谱栅格数据集的full栅格对象
                IRaster panRaster   = ((IRasterDataset2)panDataset).CreateFullRaster();
                IRaster multiRaster = ((IRasterDataset2)multiDataset).CreateFullRaster();
                //设置红外波段
                IRasterBandCollection rasterbandCol = (IRasterBandCollection)multiRaster;
                IRasterBandCollection infredRaster  = new RasterClass();
                infredRaster.AppendBand(rasterbandCol.Item(3));

                //设置全色波段的属性
                IRasterProps panSharpenRasterProps = (IRasterProps)multiRaster;
                IRasterProps panRasterProps        = (IRasterProps)panRaster;
                panSharpenRasterProps.Width  = panRasterProps.Width;
                panSharpenRasterProps.Height = panRasterProps.Height;
                panSharpenRasterProps.Extent = panRasterProps.Extent;
                multiRaster.ResampleMethod   = rstResamplingTypes.RSP_BilinearInterpolationPlus;

                //创建全色锐化过滤器和设置其参数
                IPansharpeningFilter pansharpenFilter = new PansharpeningFilterClass();
                pansharpenFilter.InfraredImage     = (IRaster)infredRaster;
                pansharpenFilter.PanImage          = (IRaster)panRaster;
                pansharpenFilter.PansharpeningType = esriPansharpeningType.esriPansharpeningESRI;
                pansharpenFilter.PutWeights(red, green, blue, infra);

                //将全色锐化过滤器设置于多光谱栅格对象上
                IPixelOperation pixeOperation = (IPixelOperation)multiRaster;
                pixeOperation.PixelFilter = (IPixelFilter)pansharpenFilter;

                //保存结果数据集,并加载显示
                //加载显示裁剪结果图像

                /*IRasterLayer panSharpenLayer = new RasterLayerClass();
                 * panSharpenLayer.CreateFromRaster(multiRaster);
                 * panSharpenLayer.Name = "panSharpen_Result";
                 * panSharpenLayer.SpatialReference = ((IGeoDataset)multiRaster).SpatialReference;
                 * return panSharpenLayer;*/
                m_raster = multiRaster;
            }
            catch (System.Exception ex)//异常处理,输出错误信息
            {
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #2
0
        public void Init()
        {
            //遍历子节点读取参数

            foreach (XmlNode xnl1 in m_xmlnode.ChildNodes)
            {
                if (xnl1 is XmlComment)
                {
                    continue;
                }


                XmlElement xe = (XmlElement)xnl1;
                if (xe.Name == "inputSHPPath")
                {
                    m_input_shppath = xe.InnerText;
                }
            }
            //裁剪的实现
            try
            {
                //获取矢量文件的路径和文件名字
                string   fileN    = m_input_shppath;
                FileInfo fileInfo = new FileInfo(fileN);
                string   filePath = fileInfo.DirectoryName;
                string   fileName = fileInfo.Name;

                //根据选择的矢量文件的路径打开工作空间
                IWorkspaceFactory wsf          = new ShapefileWorkspaceFactory();
                IWorkspace        wp           = wsf.OpenFromFile(filePath, 0);
                IFeatureWorkspace fw           = (IFeatureWorkspace)wp;
                IFeatureClass     featureClass = fw.OpenFeatureClass(fileName);

                //构造一个剪裁过滤器
                IClipFilter2 clipRaster = new ClipFilterClass();
                clipRaster.ClippingType = esriRasterClippingType.esriRasterClippingOutside;
                //将矢量数据的几何属性加到过滤器中
                IGeometry clipGeometry;
                IFeature  feature;

                //将矢量数据中的每一个IFeature几何形状添加到clipGeometry
                for (int i = 0; i < featureClass.FeatureCount(null); i++)
                {
                    feature      = featureClass.GetFeature(i);
                    clipGeometry = feature.Shape;
                    clipRaster.Add(clipGeometry);
                }
                //将这个过滤器作用于栅格图像
                IPixelOperation pixelOp = (IPixelOperation)m_raster;
                pixelOp.PixelFilter = (IPixelFilter)clipRaster;

                //如果输入的栅格中并不包含NoData和曾经使用过的最大像素深度,则输出文件的像素深度和NoData赋值
                IRasterProps rasterProps = (IRasterProps)m_raster;
                rasterProps.NoDataValue = 0;
                rasterProps.PixelType   = rstPixelType.PT_USHORT;
                //存储剪裁结果栅格图像
                IWorkspace rstWs = wsf.OpenFromFile(@"D:\RDB", 0);
                //保存输出
                ISaveAs saveas = (ISaveAs)m_raster;
                saveas.SaveAs("clip_result.tif", rstWs, "TIFF");
            }
            catch (System.Exception ex)//捕获异常,输出异常信息
            {
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        static void Main()
        {
            #region Initialize license
            ESRI.ArcGIS.esriSystem.AoInitialize aoInit = null;
            try
            {
                ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
                aoInit = new AoInitializeClass();
                esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic);
                Console.WriteLine("License Checkout successful.");
            }
            catch (Exception exc)
            {
                // If it fails at this point, shutdown the test and ignore any subsequent errors.
                Console.WriteLine(exc.Message);
            }
            #endregion
            try
            {
                //Get the location for data installed with .net sdk
                string          versionInfo  = RuntimeManager.ActiveRuntime.Version;
                RegistryKey     regKey       = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ESRI\ArcObjectsSDK" + versionInfo + @"\.NET");
                string          path         = System.Convert.ToString(regKey.GetValue("MainDir"));
                string          rasterFolder = System.IO.Path.Combine(path, @"Samples\ArcObjectsNET\CustomNodataFilter");
                IPixelOperation raster       = (IPixelOperation)OpenRasterDataset(rasterFolder, "testimage.tif");

                if (raster == null)
                {
                    Console.WriteLine("invalid raster");
                    return;
                }

                //create nodatafilter and set properties
                CustomNodataFilter.INodataFilter nFilter = new CustomNodataFilter.NodataFilter();

                //filter out all values between 0 and 50 as nodata
                nFilter.MinNodataValue = 0;
                nFilter.MaxNodataValue = 50;

                //apply the convolutionfilter to raster
                raster.PixelFilter = nFilter;

                //set nodata value using the minimum of the nodata range
                IRasterProps rasterProps = (IRasterProps)raster;
                rasterProps.NoDataValue = 0;

                //save the filtered raster to a new raster dataset in TEMP directory
                ISaveAs saveAs = (ISaveAs)raster;
                //IWorkspace workspace = OpenWorkspace(Environment.GetEnvironmentVariable("TEMP"));
                IWorkspace workspace = OpenWorkspace(rasterFolder);
                saveAs.SaveAs("nodata.tif", workspace, "TIFF");

                Console.WriteLine("Completed");
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            //ESRI License Initializer generated code.
            //Do not make any call to ArcObjects after ShutDown()
            aoInit.Shutdown();
        }