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