ArcGIS栅格处理总结

发布时间 : 星期一 文章ArcGIS栅格处理总结更新完毕开始阅读

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster2 pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster() asIRaster2;//获得待提取的栅格数据

IRasterProps pRprops = pRaster asIRasterProps ; IRaster pMaskraster =

pRwks.OpenRasterDataset(\).CreateDefaultRaster();//获取掩膜的栅格数据

IExtractionOp pEx = newRasterExtractionOpClass();

IRaster pO = pEx.Raster(pRaster asIGeoDataset ,pMaskraster asIGeoDataset ) asIRaster ;

ISaveAs pSA = pO asISaveAs;//保存

pSA.SaveAs(\ ,pRwks asIWorkspace ,\ );

通过圆来提取栅格数据:

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster2 pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster() asIRaster2;//获得待提取的栅格数据

IRasterProps pRprops = pRaster asIRasterProps ;

IWorkspaceFactory pShpwksfact = newShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFwks = pShpwksfact.OpenFromFile(@\, 0) asIFeatureWorkspace ;

IFeatureClass pFclass = pFwks.OpenFeatureClass(\); IFeatureCursor pFcur = pFclass.Search(null, false); IFeature pFeature = pFcur.NextFeature();

IPolygon pPolygon = pFeature.Shape asIPolygon ; IArea pArea = pPolygon asIArea;

IPoint pPoint = pArea.Centroid;//获得面的中心点。 ICircularArc pCircular = newCircularArcClass();

pCircular.PutCoordsByAngle( pPoint ,0,Math.PI*2 ,pPolygon.Length /4 );//通过弧度创建一个圆,不能是角度(0-180),只能是弧度,

IExtractionOp pEx = newRasterExtractionOpClass();//通过圆来提取

IRaster pO = pEx.Circle(pRaster asIGeoDataset, pCircular, true )asIRaster ; ISaveAs pSA = pO asISaveAs;//保存

pSA.SaveAs(\ ,pRwks asIWorkspace ,\ );

IRaster,IRasterDataset的区别:

IRasterDataset是数据库里存在的数据集,有点类似FeatureClass的意思。 而IRaster是内存当中的栅格对象。

使用IRasterDataset.CreateDefaultRaster即可在内存中生成IRaster对象。

波段合成:说明:合成转换为img格式,不要求有几个波段,但是合成转换为Tif文件,

则Tif文件必须至少有三个,多个可以。

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass(); IRasterWorkspace2 pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace2 ;

IRasterBandCollection pRcoll = pRwks.OpenRasterDataset(\) asIRasterBandCollection ;

IRasterBand pRband = pRcoll.Item(1) ;//获得波段 IRasterBand prband2 = pRcoll.Item(2);

IRasterBand pRband3 = pRcoll.Item (3) ;

IRasterBandCollection pOutbandcoll = newRasterClass(); pOutbandcoll.Add (pRband ,0) ; pOutbandcoll.Add (prband2,1);

pOutbandcoll.SaveAs( \,pRwks asIWorkspace ,\ ); //pOutbandcoll.SaveAs(\

//保存为tif文件时,必须有三个以上的波段即irasterband,而img格式则不要求有多个波段。

栅格图层以范围(ienvlope)导出(VBA)。

Dim pRasterlayerEX As IRasterLayerExport Dim pMxdoc As IMxDocument Dim pMap As IMap

Dim pRlayer As IRasterLayer Set pMxdoc = ThisDocument Set pMap = pMxdoc.FocusMap Set pRlayer = pMap.Layer(0)

Set pRasterlayerEX = New RasterLayerExport

Set pRasterlayerEX.RasterLayer = pRlayer '获得praseterlayerex的栅格图层 Dim pWksfact As IWorkspaceFactory

Set pWksfact = New RasterWorkspaceFactory Dim pRwks As IRasterWorkspace

Set pRwks = pWksfact.OpenFromFile(\

pRasterlayerEX.Extent = pMxdoc.ActiveView.Extent '获得输出栅格的范围(范围是矩形形状)

pRasterlayerEX.Export pRwks, \

C#代码:以范围(ienvlope)导出

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\, 0) asIRasterWorkspace; IRaster2 pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster() asIRaster2;

IRasterLayer pRasterlayer = newRasterLayerClass(); pRasterlayer.CreateFromRaster(pRaster asIRaster);

IWorkspaceFactory pShpwksfact = newShapefileWorkspaceFactoryClass();

IFeatureWorkspace pFwks = pShpwksfact.OpenFromFile(@\, 0)asIFeatureWorkspace ;

IFeatureClass pFclass = pFwks.OpenFeatureClass(\); IFeatureCursor pFcur = pFclass.Search(null, false); IFeature pFeature = pFcur.NextFeature(); IEnvelope pEnv = pFeature.Extent;

IRasterLayerExport pRLex = newRasterLayerExportClass(); pRLex.Extent = pEnv;

pRLex.RasterLayer = pRasterlayer;

pRLex.Export(pRwks asIWorkspace, \, \);

栅格数据重分类:

重新分类用到的接口是:INumberRemap,IRemap,IReclassOp。

IReclassOp pRop = newRasterReclassOpClass();

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass(); IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ;

IRaster pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster(); INumberRemap pNumberremap = newNumberRemapClass();

pNumberremap.MapRange(0, 138.457031, 1);//一类的最小值和最大值和分类后的值 pNumberremap.MapRange(138.457031, 202.207031, 2);

pNumberremap.MapRangeToNoData(202.207031,255);//将一批数值变为nodata(数据缺省) IRemap pRemap = pNumberremap asIRemap ; pRemap.DeleteRecord(2);

IRaster pR = newRasterClass();

pR= pRop.ReclassByRemap(pRaster asIGeoDataset, pRemap, true) asIRaster ; ISaveAs pSa = pR asISaveAs;

pSa.SaveAs(\,pRwks asIWorkspace ,\); MessageBox.Show(\运行完成\,\提示\);

局域操作、邻域操作、区域操作、距离操作都有对应的接口。局域操作:ilocalop,邻域操作:ineighborhoodop接口,区域操作:izonalop,距离操作:idistanceop。

在ArcMAP中有时候会生成一个临时的栅格数据,而要将临时的栅格数据变成存储介质中的栅格数据,需要用到的接口是:Itemporarydataset。接口只是针对临时性的文

件夹,对已有的文件夹不起作用,并且只能在ArcMAP中运行。

数学运算用到的接口:IMathOp

Imathop主要用于数学操作的方法,iLogicalop主要用于逻辑操作的方法。

代码:

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster pRaster =pRwks.OpenRasterDataset(\).CreateDefaultRaster(); IMathOp pMathop = newRasterMathOpsClass();//数学运算接口。

IRaster pOutr = pMathop.Int(pRaster asIGeoDataset) asIRaster ; ISaveAs pSa = pOutr asISaveAs;

pSa.SaveAs(\,pRwks asIWorkspace ,\); MessageBox.Show(\运行完成\,\提示\);

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster pRaster =pRwks.OpenRasterDataset(\).CreateDefaultRaster(); ILogicalOp pLogicalop = newRasterMathOpsClass();//获得ILogicalop接口,用于数学运算

IRaster pOutr = pLogicalop.IsNull(pRaster asIGeoDataset ) asIRaster ;//如果数据缺失,那么输出为1,否则输出为0. ISaveAs pSa = pOutr asISaveAs;

pSa.SaveAs(\,pRwks asIWorkspace ,\); MessageBox.Show(\运行完成\,\提示\);

ILogicalOp::Test用于对栅格数据进行判断,根据查询表达式

IRasterDescriptor),符合条件得到的值为1,不符合条件的值为0 。用代码编写的只能输出Tif

IRasterDescriptor时,一定

和grid格式的栅格数据,不能输出为img格式的数据。并且用

要由属性表。

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster(); IQueryFilter pQueryfilter = newQueryFilterClass(); pQueryfilter.WhereClause = \;

IRasterDescriptor pRdes = newRasterDescriptorClass(); pRdes.Create(pRaster, pQueryfilter, \); ILogicalOp pLogicalop = newRasterMathOpsClass();

联系合同范文客服:xxxxx#qq.com(#替换为@)