arcengine栅格数据使用总结教学内容.docx

上传人:b****8 文档编号:10880736 上传时间:2023-02-23 格式:DOCX 页数:15 大小:21.75KB
下载 相关 举报
arcengine栅格数据使用总结教学内容.docx_第1页
第1页 / 共15页
arcengine栅格数据使用总结教学内容.docx_第2页
第2页 / 共15页
arcengine栅格数据使用总结教学内容.docx_第3页
第3页 / 共15页
arcengine栅格数据使用总结教学内容.docx_第4页
第4页 / 共15页
arcengine栅格数据使用总结教学内容.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

arcengine栅格数据使用总结教学内容.docx

《arcengine栅格数据使用总结教学内容.docx》由会员分享,可在线阅读,更多相关《arcengine栅格数据使用总结教学内容.docx(15页珍藏版)》请在冰豆网上搜索。

arcengine栅格数据使用总结教学内容.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1