当前位置:首页 > 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();
共分享92篇相关文档