arcengine栅格数据使用总结教学内容.docx
- 文档编号:10880736
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:15
- 大小:21.75KB
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.");
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;i 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); 转换成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;i ICursorpCursor=pRTable.Search(null,false); IRowpRrow=pCursor.NextRow();while(pRrow! =null){ DataRowpRow=pTable.NewRow();for(inti=0;i pRow=pRrow.get_Value(i).ToString(); }pTable.Rows.Add(pRow);pRrow=pCursor.NextRow(); }dataGridView1.DataSource=pTable; } } IRasterWorkspace2IRasterDatasetCreateRasterDatasetC#publicIRasterDatasetCreateFileRasterDataset(stringdirectoryName,stringfileName) { //Thisfunctioncreatesanewimgfileinthegivenworkspace //andthenassignspixelvalues try { 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 //Writethepixeldataback System.ObjectcachePointer; cachePointer=rawPixels.AcquireCache(); rawPixels.Write(pixelBlockOrigin,(IPixelBlock)pixelBlock3); rawPixels.ReturnCache(cachePointer); //Returnrasterdataset returnrasterDataset; } catch(Exceptionex) { System.Diagnostics.Debug.WriteLine(ex.Message); returnnull; } } publicIRasterWorkspace2CreateRasterWorkspace(stringpathName) { //CreateRasterWorkspace IWorkspaceFactoryworkspaceFactory=newRasterWorkspaceFactoryClass(); returnworkspaceFactory.OpenFromFile(pathName,0)asIRasterWorkspace2; #4楼[楼主]2009-02-0915: 38|尤文之鹤 publicIRasterDatasettin2raster(stringtempBathyTI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arcengine 栅格 数据 使用 总结 教学内容