arcengine栅格数据使用总结教学内容.docx
《arcengine栅格数据使用总结教学内容.docx》由会员分享,可在线阅读,更多相关《arcengine栅格数据使用总结教学内容.docx(15页珍藏版)》请在冰豆网上搜索。
arcengine栅格数据使用总结教学内容
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.");
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;ifor(intj=0;j{pnt.SetCoords(i,j);clipRaster.Read(pnt,pixelBlock);if(pixelBlock!=null){objectobj=pixelBlock.GetVal(O,0,0);MessageBox.Show(Convert.ToUlnt32(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(plnRaster,newQueryFilterClass(),sField);IReclassOppReclassOp=newRasterReclassOpClass();IGeoDatasetpGeodataset=plnRasterasIGeoDataset;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.ltem(O);pRasterBand.ComputeStatsAndHist();IRasterStatisticspRasterStatistic=pRasterBand.Statistics;//获取像元统计信息doubledMaxValue=pRasterStatistic.Maximum;doubledMinValue=pRasterStatistic.Minimum;INumberRemappNumRemap=newNumberRemapClass();//定义INumberRemap设定阈值pNumRemap.MapRange(dMinValue,0,0);//设置值区间,输出值pNumRemap.MapRange(O,dMaxValue,1);转换成IRemapIRemappRemap=pNumRemapasIRemap;//IRasterpOutRaster=pReclassOp.ReclassByRemap(pGeodataset,pRemap,false)asIRaster;//用ReclassByRemap方法pRLayer.CreateFromRaster(pOutRaster);returnpRLayer;}栅格图层和矢量图层的属性表浏览if(pLyrisIFeatureLayer){DataTablepTable=newDataTable();IFeatureLayerpFealyr=pLyrasIFeatureLayer;IFeatureClasspFCls=pFealyr.FeatureClass;stringshape="";if(pFCls.ShapeType==esriGeometryType.esriGeometryPoint)shape="Point";elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolyline)shape="Polyline";elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolygon)shape="Polygon";for(inti=0;i{pTable.Columns.Add(pFCIs.Fields.get_Field(i).Name);}IFeatureCursorpCursor=pFCIs.Search(null,false);intishape=pFCIs.Fields.FindField("Shape");IFeaturepFea=pCursor.NextFeature();while(pFea!=null){DataRowpRow=pTable.NewRow();for(inti=0;i{if(i==ishape){pRow=shape;continue;}pRow=pFea.get_Value(i).ToString();}pTable.Rows.Add(pRow);pFea=pCursor.NextFeature();}dataGridView1.DataSource=pTable;}elseif(pLyrisIRasterLayer){IRasterLayerpRlyr=pLyrasIRasterLayer;IRasterpRaster=pRlyr.Raster;IRasterPropspProp=pRasterasIRasterProps;pProp.PixelType=rstPixelType.PT_LONG;if(pProp.PixelType==rstPixelType.PT_LONG){IRasterBandCollectionpBcol=pRasterasIRasterBandCollection;IRasterBandpBand=pBcol.Item(0);ITablepRTable=pBand.AttributeTable;DataTablepTable=newDataTable();for(inti=0;iICursorpCursor=pRTable.Search(null,false);IRowpRrow=pCursor.NextRow();while(pRrow!=null){DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
for(intj=0;j{pnt.SetCoords(i,j);clipRaster.Read(pnt,pixelBlock);if(pixelBlock!=null){objectobj=pixelBlock.GetVal(O,0,0);MessageBox.Show(Convert.ToUlnt32(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(plnRaster,newQueryFilterClass(),sField);IReclassOppReclassOp=newRasterReclassOpClass();IGeoDatasetpGeodataset=plnRasterasIGeoDataset;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.ltem(O);pRasterBand.ComputeStatsAndHist();IRasterStatisticspRasterStatistic=pRasterBand.Statistics;//获取像元统计信息doubledMaxValue=pRasterStatistic.Maximum;doubledMinValue=pRasterStatistic.Minimum;INumberRemappNumRemap=newNumberRemapClass();//定义INumberRemap设定阈值pNumRemap.MapRange(dMinValue,0,0);//设置值区间,输出值pNumRemap.MapRange(O,dMaxValue,1);转换成IRemapIRemappRemap=pNumRemapasIRemap;//IRasterpOutRaster=pReclassOp.ReclassByRemap(pGeodataset,pRemap,false)asIRaster;//用ReclassByRemap方法pRLayer.CreateFromRaster(pOutRaster);returnpRLayer;}栅格图层和矢量图层的属性表浏览if(pLyrisIFeatureLayer){DataTablepTable=newDataTable();IFeatureLayerpFealyr=pLyrasIFeatureLayer;IFeatureClasspFCls=pFealyr.FeatureClass;stringshape="";if(pFCls.ShapeType==esriGeometryType.esriGeometryPoint)shape="Point";elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolyline)shape="Polyline";elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolygon)shape="Polygon";for(inti=0;i{pTable.Columns.Add(pFCIs.Fields.get_Field(i).Name);}IFeatureCursorpCursor=pFCIs.Search(null,false);intishape=pFCIs.Fields.FindField("Shape");IFeaturepFea=pCursor.NextFeature();while(pFea!=null){DataRowpRow=pTable.NewRow();for(inti=0;i{if(i==ishape){pRow=shape;continue;}pRow=pFea.get_Value(i).ToString();}pTable.Rows.Add(pRow);pFea=pCursor.NextFeature();}dataGridView1.DataSource=pTable;}elseif(pLyrisIRasterLayer){IRasterLayerpRlyr=pLyrasIRasterLayer;IRasterpRaster=pRlyr.Raster;IRasterPropspProp=pRasterasIRasterProps;pProp.PixelType=rstPixelType.PT_LONG;if(pProp.PixelType==rstPixelType.PT_LONG){IRasterBandCollectionpBcol=pRasterasIRasterBandCollection;IRasterBandpBand=pBcol.Item(0);ITablepRTable=pBand.AttributeTable;DataTablepTable=newDataTable();for(inti=0;iICursorpCursor=pRTable.Search(null,false);IRowpRrow=pCursor.NextRow();while(pRrow!=null){DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
pnt.SetCoords(i,j);
clipRaster.Read(pnt,pixelBlock);
if(pixelBlock!
=null)
objectobj=pixelBlock.GetVal(O,0,0);
MessageBox.Show(Convert.ToUlnt32(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!
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();
IGeoDatasetgeoDataset=extraction.Rectangle((IGeoDataset)clipRaster,clipExtent,true);
IRasterraster=geoDatasetasIRaster;
if(raster!
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(plnRaster,newQueryFilterClass(),sField);
IReclassOppReclassOp=newRasterReclassOpClass();
IGeoDatasetpGeodataset=plnRasterasIGeoDataset;
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.ltem(O);
pRasterBand.ComputeStatsAndHist();
IRasterStatisticspRasterStatistic=pRasterBand.Statistics;//获取像元统计信息
doubledMaxValue=pRasterStatistic.Maximum;
doubledMinValue=pRasterStatistic.Minimum;
INumberRemappNumRemap=newNumberRemapClass();//定义INumberRemap设定阈值
pNumRemap.MapRange(dMinValue,0,0);//设置值区间,输出值
pNumRemap.MapRange(O,dMaxValue,1);
转换成IRemap
IRemappRemap=pNumRemapasIRemap;//
IRasterpOutRaster=pReclassOp.ReclassByRemap(pGeodataset,pRemap,false)asIRaster;//
用ReclassByRemap方法
pRLayer.CreateFromRaster(pOutRaster);
returnpRLayer;
栅格图层和矢量图层的属性表浏览
if(pLyrisIFeatureLayer)
DataTablepTable=newDataTable();
IFeatureLayerpFealyr=pLyrasIFeatureLayer;
IFeatureClasspFCls=pFealyr.FeatureClass;
stringshape="";
if(pFCls.ShapeType==esriGeometryType.esriGeometryPoint)
shape="Point";
elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolyline)shape="Polyline";
elseif(pFCls.ShapeType==esriGeometryType.esriGeometryPolygon)shape="Polygon";
for(inti=0;i{pTable.Columns.Add(pFCIs.Fields.get_Field(i).Name);}IFeatureCursorpCursor=pFCIs.Search(null,false);intishape=pFCIs.Fields.FindField("Shape");IFeaturepFea=pCursor.NextFeature();while(pFea!=null){DataRowpRow=pTable.NewRow();for(inti=0;i{if(i==ishape){pRow=shape;continue;}pRow=pFea.get_Value(i).ToString();}pTable.Rows.Add(pRow);pFea=pCursor.NextFeature();}dataGridView1.DataSource=pTable;}elseif(pLyrisIRasterLayer){IRasterLayerpRlyr=pLyrasIRasterLayer;IRasterpRaster=pRlyr.Raster;IRasterPropspProp=pRasterasIRasterProps;pProp.PixelType=rstPixelType.PT_LONG;if(pProp.PixelType==rstPixelType.PT_LONG){IRasterBandCollectionpBcol=pRasterasIRasterBandCollection;IRasterBandpBand=pBcol.Item(0);ITablepRTable=pBand.AttributeTable;DataTablepTable=newDataTable();for(inti=0;iICursorpCursor=pRTable.Search(null,false);IRowpRrow=pCursor.NextRow();while(pRrow!=null){DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
pTable.Columns.Add(pFCIs.Fields.get_Field(i).Name);
IFeatureCursorpCursor=pFCIs.Search(null,false);
intishape=pFCIs.Fields.FindField("Shape");
IFeaturepFea=pCursor.NextFeature();
while(pFea!
DataRowpRow=pTable.NewRow();
for(inti=0;i{if(i==ishape){pRow=shape;continue;}pRow=pFea.get_Value(i).ToString();}pTable.Rows.Add(pRow);pFea=pCursor.NextFeature();}dataGridView1.DataSource=pTable;}elseif(pLyrisIRasterLayer){IRasterLayerpRlyr=pLyrasIRasterLayer;IRasterpRaster=pRlyr.Raster;IRasterPropspProp=pRasterasIRasterProps;pProp.PixelType=rstPixelType.PT_LONG;if(pProp.PixelType==rstPixelType.PT_LONG){IRasterBandCollectionpBcol=pRasterasIRasterBandCollection;IRasterBandpBand=pBcol.Item(0);ITablepRTable=pBand.AttributeTable;DataTablepTable=newDataTable();for(inti=0;iICursorpCursor=pRTable.Search(null,false);IRowpRrow=pCursor.NextRow();while(pRrow!=null){DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
if(i==ishape)
pRow=shape;
continue;
pRow=pFea.get_Value(i).ToString();}
pTable.Rows.Add(pRow);pFea=pCursor.NextFeature();
}dataGridView1.DataSource=pTable;
elseif(pLyrisIRasterLayer)
IRasterLayerpRlyr=pLyrasIRasterLayer;
IRasterpRaster=pRlyr.Raster;
IRasterPropspProp=pRasterasIRasterProps;pProp.PixelType=rstPixelType.PT_LONG;
if(pProp.PixelType==rstPixelType.PT_LONG){
IRasterBandCollectionpBcol=pRasterasIRasterBandCollection;IRasterBandpBand=pBcol.Item(0);
ITablepRTable=pBand.AttributeTable;
for(inti=0;iICursorpCursor=pRTable.Search(null,false);IRowpRrow=pCursor.NextRow();while(pRrow!=null){DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
ICursorpCursor=pRTable.Search(null,false);
IRowpRrow=pCursor.NextRow();while(pRrow!
=null){
DataRowpRow=pTable.NewRow();for(inti=0;ipRow=pRrow.get_Value(i).ToString();}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();}dataGridView1.DataSource=pTable;}}IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName){//Thisfunctioncreatesanewimgfileinthegivenworkspace//andthenassignspixelvaluestry{IRasterDatasetrasterDataset=null;IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);//CreatethedatasetIRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);IRawPixelsrawPixels=null;IPixelBlock3pixelBlock3=null;IPntpixelBlockOrigin=null;IPntpixelBlockSize=null;IRasterBandCollectionrasterBandCollection;IRasterPropsrasterProps;//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);//GetpixeldataarraySystem.Object[,]pixelData;pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
pRow=pRrow.get_Value(i).ToString();
}pTable.Rows.Add(pRow);pRrow=pCursor.NextRow();
IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName)
//Thisfunctioncreatesanewimgfileinthegivenworkspace
//andthenassignspixelvalues
IRasterDatasetrasterDataset=null;
IPointoriginPoint=newPointClass();originPoint.PutCoords(0,0);
//Createthedataset
IRasterWorkspace2rasterWorkspace2=null;rasterWorkspace2=CreateRasterWorkspace(directoryName);
rasterDataset=rasterWorkspace2.CreateRasterDataset(fileName,"IMAGINEImage",originPoint,200,100,1,1,1,rstPixelType.PT_UCHAR,newUnknownCoordinateSystemClass(),true);
IRawPixelsrawPixels=null;
IPixelBlock3pixelBlock3=null;
IPntpixelBlockOrigin=null;
IPntpixelBlockSize=null;
IRasterBandCollectionrasterBandCollection;
IRasterPropsrasterProps;
//QIforIRawPixelsandIRasterPropsrasterBandCollection=(IRasterBandCollection)rasterDataset;rawPixels=(IRawPixels)rasterBandCollection.Item(0);rasterProps=(IRasterProps)rawPixels;
//CreatepixelblockpixelBlockOrigin=newDblPntClass();pixelBlockOrigin.SetCoords(0,0);
pixelBlockSize=newDblPntClass();pixelBlockSize.SetCoords(rasterProps.Width,rasterProps.Height);
pixelBlock3=(IPixelBlock3)rawPixels.CreatePixelBlock(pixelBlockSize);
//ReadpixelblockrawPixels.Read(pixelBlockOrigin,(IPixelBlock)pixelBlock3);
//GetpixeldataarraySystem.Object[,]pixelData;
pixelData=(System.Object[,])pixelBlock3.get_PixelDataByRef(0);
//Loopthroughallthepixelsandassignvaluefor(inti=0;i//WritethepixeldatabackSystem.ObjectcachePointer;cachePointer=rawPixels.AcquireCache();rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);rawPixels.ReturnCache(cachePointer);//ReturnrasterdatasetreturnrasterDataset;}catch(Exceptionex){System.Diagnostics.Debug.WriteLine(ex.Message);returnnull;}}publicIRasterWorkspace2CreateRasterWorkspace(stringpathName){//CreateRasterWorkspaceIWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;#4楼[楼主]2009-02-0915:38|尤文之鹤publicIRasterDatasettin2raster(stringtempBathyTI
//Writethepixeldataback
System.ObjectcachePointer;
cachePointer=rawPixels.AcquireCache();
rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3);
rawPixels.ReturnCache(cachePointer);
//Returnrasterdataset
returnrasterDataset;
System.Diagnostics.Debug.WriteLine(ex.Message);
returnnull;
publicIRasterWorkspace2CreateRasterWorkspace(stringpathName)
//CreateRasterWorkspace
IWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass();
returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2;
#4楼[楼主]2009-02-0915:
38|尤文之鹤
publicIRasterDatasettin2raster(stringtempBathyTI
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1