arcengine栅格数据使用总结两个星期以来一直与栅格数据打交道,对AO的栅格部分应该有了一定的理解,下面是自己的一点体会,希望高手指教:-)1、栅格数据的存储类型栅格数据一般可以存储为ESRIGRID(由一系列文件组成),TIFF格式(包括一个TIF文件和一个AUX文件),IMAGINEImage格式在AE中一般调用ISaveAs接口来保存栅格数据2、栅格数据集和栅格编目的区别一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理合成一副大的影像图3、IRasterWorkspaceEx与IRasterWorkspace,IRsterWorkspace2的区别1).IRasteWorkspaceEx接口主要是用来读取GeoDatabase中的栅格数据集和栅格编目2).IRasterWorkspace,IRsterWorkspace2主要是用来读取以文件格式存储在本地的栅格数据4、加载栅格数据(以存储在本地的栅格数据文件为例)1.直接用IRasterLayer接口打开一个栅格文件并加载到地图控件IRasterLayerrasterLayer=newRasterLayerClass();rasterLayer.CreateFromFilePath(fileName);//fileName指存本地的栅格文件路径axMapControl1.AddLayer(rasterLayer,0);2.用IRasterDataset接口打开一个栅格数据集IWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactory();IWorkspaceworkspace;workspace=workspaceFactory.OpenFromFile(inPath,0);//inPath栅格数据存储路径if(workspace==null){Console.WriteLine(Couldnotopentheworkspace.);return;}IRasterWorkspacerastWork=(IRasterWorkspace)workspace;IRasterDatasetrastDataset;rastDataset=rastWork.OpenRasterDataset(inName);//inName栅格文件名if(rastDataset==null){Console.WriteLine(Couldnotopentherasterdataset.);return;}5、如何读取栅格数据的属性和遍历栅格数据栅格数据的属性包括栅格大小,行数,列数,投影信息,栅格范围等等,见下面代码(假设当前加载的栅格文件栅格值存储方式为:UShort类型)IRasterPropsrasterProps=(IRasterProps)clipRaster;intdHeight=rasterProps.Height;//当前栅格数据集的行数intdWidth=rasterProps.Width;//当前栅格数据集的列数doubledX=rasterProps.MeanCellSize().X;//栅格的宽度doubledY=rasterProps.MeanCellSize().Y;//栅格的高度IEnvelopeextent=rasterProps.Extent;//当前栅格数据集的范围rstPixelTypepixelType=rasterProps.PixelType;//当前栅格像素类型IPntpntSize=newPntClass();pntSize.SetCoords(dX,dY);IPixelBlockpixelBlock=clipRaster.CreatePixelBlock(pntSize);IPntpnt=newPntClass();for(inti=0;idHeight;i++)for(intj=0;jdWidth;j++){pnt.SetCoords(i,j);clipRaster.Read(pnt,pixelBlock);if(pixelBlock!=null){objectobj=pixelBlock.GetVal(0,0,0);MessageBox.Show(Convert.ToUInt32(obj).ToString());}}6、如何提取指定的范围的栅格数据提取指定范围内的栅格数据通常用两种方法IRasterLayerExport(esriCarto),IExtractionOp,IExtractionOp2([url=]esriSpatialAnalyst[/url]),IRasterLayerExport接口提供的栅格数据提取功能有限,只能以矩形范围作为提取范围,而IExtractionOp接口提供了多边形,圆,属性,矩形等几种形式作为提取栅格数据.1).IRasterLayerExport接口IRasterLayerExportrLayerExport=newRasterLayerExportClass();rLayerExport.RasterLayer=rasterLayer;//rasterLayer指当前加载的栅格图层rLayerExport.Extent=clipExtent;//clipExtent指提取栅格数据的范围if(proSpatialRef!=null)rLayerExport.SpatialReference=proSpatialRef;//proSpatialRef当前栅格数据的投影信息IWorkspaceFactorypWF=newRasterWorkspaceFactoryClass();try{IWorkspacepRasterWorkspace=pWF.OpenFromFile(_folder,0);//_folder指栅格文件保存路径IRasterDatasetoutGeoDataset=rLayerExport.Export(pRasterWorkspace,code,strRasterType);//调用ISaveAs接口将导出的数据集保存……………………..}Catch(Exceptionex){ThrownewArgumention(ex.Message);}2.IExtractionOp接口(调用此接口前,应该先检查空间许可)IExtractionOpextraction=newRasterExtractionOpClass();try{IGeoDatasetgeoDataset=extraction.Rectangle((IGeoDataset)clipRaster,clipExtent,true);IRasterraster=geoDatasetasIRaster;if(raster!=null){IWorkspaceFactoryWF=newRasterWorkspaceFactoryClass();IWorkspacerasterWorkspace=WF.OpenFromFile(_folder,0);ISaveAssaveAs=(ISaveAs)raster;saveAs.SaveAs(“Result.tif”,rasterWorkspace,TIFF);}}catch(Exceptionex){MessageBox..Show(Ex.message);}7.栅格数据重采样栅格数据的重采样主要基于三种方法:最邻近采样(NEAREST),双线性ILINEAR)和三次卷积采样(CUBIC)。(1).最邻近采样:它用输入栅格数据中最临近栅格值作为输出值。因此,在重采样后的输出栅格中的每个栅格值,都是输入栅格数据中真实存在而未加任何改变的值。这种方法简单易用,计算量小,重采样的速度最快。(2).双线性采样:此重采样法取待采样点(x,y)点周围四个邻点,在y方向(或X方向)内插两次,再在x方向(或y方向)内插一次,得到(x,y)点的栅格值。(3).三次卷积采样:这是进一步提高内插精度的一种方法。它的基本思想是增加邻点来获得最佳插值函数。取待计算点周围相邻的16个点,与双线性采样类似,可先在某一方向上内插,如先在x方向上,每四个值依次内插四次,再根据四次的计算结果在y方上内插,最终得到内插结果代码示例:采用双线性采样IRasterGeometryProcrasterGeometryProc=newRasterGeometryProcClass();rasterGeometryProc.Resample(rstResamplingTypes.RSP_CubicConvolution,newCellSize,clipRaster);Tag标签:栅格数据ArcEngine标签:栅格重分类分类:AE二次开发publicstaticIRasterLayerSetViewShedRenderer(IRasterpInRaster,stringsField,stringsPath){IRasterDescriptorpRD=newRasterDescriptorClass();pRD.Create(pInRaster,newQueryFilterClass(),sField);IReclassOppReclassOp=newRasterReclassOpClass();IGeoDatasetpGeodataset=pInRasterasIGeoDataset;IRasterAnalysisEnvironmentpEnv=pReclassOpasIRasterAnalysisEnvironment;IWorkspaceFactorypWSF=newRasterWorkspaceFactoryClass();IWorkspacepWS=pWSF.OpenFromFile(sPath,0);pEnv.OutWorkspace=pWS;objectobjSnap=null;objectobjExtent=pGeodataset.Extent;pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue,refobjExtent,refobjSnap);pEnv.OutSpatialReference=pGeodataset.SpatialReference;IRasterLayerpRLayer=newRasterLayerClass();IRasterBandCollectionpRsBandCol=pGeodatasetasIRasterBandCollection;//定义波段集IRasterBandpRasterBand=pRsBandCol.Item(0);pRasterBand.ComputeStatsAndHist();IRasterStatisticspRasterStatistic=pRasterBand.Statistics;//获取像元统计信息doubledMaxValue=pRasterStatistic.Maximum;doubledMinValue=pRasterStatistic.Minimum;INumberRemappNumRemap=newNumberRemapClass();//定义INumberRemap设定阈值pNumRemap.MapRange(dMinValue,0,0);//设置值区间,输出值pNumRemap.MapRange(0,dMaxValue,1);IRemappRemap=pNumRemapasIRemap;//转换成IRemapIRas