ArcGIS栅格处理总结 联系客服

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

IRaster pOutr = pLogicalop.Test(pRdes) asIRaster ; ISaveAs pSa = pOutr asISaveAs ;

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

HighestPosition:是针对好多图层进行的操作,输出的数据的像素值指的是哪个图层拥有最高值。

属性表:

有属性表的栅格数据,只是针对有单个波段的整型的栅格数据。

邻域分析:

在原有的栅格数据的基础上,通过计算3*3矩形或者自己定义的一个形状,并且定义分析的方式比如:平均值,最大值,众值等方式,来重新计算栅格数据的大小,输出新的栅格数据。

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\,0) asIRasterWorkspace ; IRaster pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster(); IRasterNeighborhood pRneighborhood = newRasterNeighborhoodClass();//创建邻域形状,设置的是邻域3*3的矩形

pRneighborhood.SetRectangle(3, 3, esriGeoAnalysisUnitsEnum.esriUnitsCells); INeighborhoodOp pNop = newRasterNeighborhoodOpClass();//邻域操作 IRaster pOutraster = pNop.FocalStatistics(pRaster asIGeoDataset,

esriGeoAnalysisStatisticsEnum.esriGeoAnalysisStatsMean, pRneighborhood,false ) asIRaster ;

ISaveAs pSa = pOutraster asISaveAs;

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

通过栅格数据创建Tin

通过栅格数据创建Tin

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

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

IRasterProps pRprops = pR asIRasterProps; IPnt pEnvpnt = newDblPntClass();

pEnvpnt.SetCoords(pRprops.Width, pRprops.Height); IRasterCursor pRcursor = pR.CreateCursorEx(pEnvpnt); IPixelBlock pPblock = pRcursor.PixelBlock; ITinEdit pTinedit = newTinClass(); IEnvelope pEnv = pRprops.Extent ; pTinedit.InitNew(pEnv );

IRasterBandCollection pRcoll = pR asIRasterBandCollection; IRawPixels pRawpixels = pRcoll.Item(0) asIRawPixels; IRasterProps pRp = pRawpixels asIRasterProps; object pNodata = pRprops.NoDataValue ;//关键点 if (pNodata.GetType().IsArray==true ) {

System.Array pArr = pNodata as System.Array; pNodata = pArr.GetValue(0); }

object pT = Type.Missing;

//可能会出现“值不在范围内的错误”原因是pNodata的值错误,不应该是一个数组:pRprops.NoDataValue

//pEnv.XMin + pRprops.MeanCellSize().X / 2, pEnv.YMax - pRprops.MeanCellSize().Y / 2指的是Tin左上角的坐标

pTinedit.AddFromPixelBlock(pEnv.XMin + pRprops.MeanCellSize().X / 2, pEnv.YMax - pRprops.MeanCellSize().Y / 2, pRprops.MeanCellSize().X, pRprops.MeanCellSize().Y, pNodata, pPblock.get_SafeArray(0), pRprops.MeanCellSize().X * 10, ref pT, out pT); pTinedit.SaveAs(@\, ref pT);

或者:用到了IRawPixels

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

IRaster2 pRaster = pRwks.OpenRasterDataset(\).CreateDefaultRaster() asIRaster2 ;

IRasterBandCollection pRbcoll = pRaster asIRasterBandCollection; IRawPixels pRawpixels = pRbcoll.Item(0) asIRawPixels; IRasterProps pRprops = pRawpixels asIRasterProps; IPnt pPnt = newDblPntClass();

pPnt.SetCoords(pRprops.Width, pRprops.Height);

IPixelBlock pPb = pRawpixels.CreatePixelBlock(pPnt);//pPb中没有值 IPnt pTl = newPntClass(); pTl.SetCoords(0, 0);

pRawpixels.Read(pTl,pPb );//将值读到pPb中 IGeoDataset pGd = pRaster asIGeoDataset; ITinEdit pTinedit = newTinClass(); pTinedit.InitNew(pGd.Extent);

System.Array pArray = pPb.get_SafeArray(0) as System.Array; double pZ= 1 ;

object pMissing = Type.Missing ; object pPointcount = 1500000; object pBool = true ;

pTinedit.AddFromPixelBlock(pGd.Extent.XMin + pRprops.MeanCellSize().X / 2, pGd.Extent.YMax - pRprops.MeanCellSize().Y / 2, pRprops.MeanCellSize().X,

pRprops.MeanCellSize().Y, pRprops.NoDataValue, pArray, pZ, ref pPointcount, outpBool);

pTinedit.SaveAs(@\, ref pMissing);

通过等高线创建Tin

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

IFeatureClass pFclass = pFwks.OpenFeatureClass(\); IGeoDataset pGeodataset = pFclass asIGeoDataset;//获得Extent范围 IField pField = pFclass.Fields.get_Field(1);//获得高程值字段 ITinEdit pTinedit = newTinClass(); pTinedit.InitNew(pGeodataset.Extent); object pO = Type.Missing ; pTinedit.AddFromFeatureClass

(pFclass,null,pField,null,esriTinSurfaceType.esriTinContour ,ref pO ) ; pTinedit.SaveAs(@\, ref pO);

通过IFeatureCursor来创建TIN

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

IFeatureClass pFclass = pFwks.OpenFeatureClass(\); IGeoDataset pGeodataset = pFclass asIGeoDataset;//获得Extent范围 IFeatureCursor pFcur = pFclass.Search(null, false);

IField pField = pFclass.Fields.get_Field(1);//获得高程值字段 ITinEdit pTinedit = newTinClass(); pTinedit.InitNew(pGeodataset.Extent); object pO = Type.Missing ;

pTinedit.AddFromFeatureCursor(pFcur, pField, null, esriTinSurfaceType.esriTinContour, ref pO); pTinedit.SaveAs(@\, ref pO);

生等高线:

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass();

IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\, 0) asIRasterWorkspace; IRaster pR = pRwks.OpenRasterDataset(\).CreateDefaultRaster(); ISurfaceOp pSurfaceop = newRasterSurfaceOpClass(); object pMissing =Type.Missing ;

IDataset pDs = pSurfaceop.Contour(pR asIGeoDataset, 3, ref pMissing) asIDataset;//可能会处错误,如果栅格数据是GRID格式文件,一个可能的原因是栅格数据没有info信息,要想运行正确要确定栅格数据是否有Info文件夹

IWorkspaceFactory pFwksfact = newShapefileWorkspaceFactoryClass();

IWorkspace pFwks = pFwksfact.OpenFromFile(@\, 0);

pDs.Copy(\, pFwks);//将生成的Shp文件复制到指定目录

创建栅格数据:

IWorkspaceFactory pWksfact = newRasterWorkspaceFactoryClass(); IRasterWorkspace pRwks = pWksfact.OpenFromFile(@\栅格数据处理集\\Temp\\data\, 0) asIRasterWorkspace;

IRasterWorkspace2 pRwks2 = pRwks asIRasterWorkspace2;

IRaster pR = pRwks.OpenRasterDataset(\).CreateDefaultRaster(); IGeoDataset p222Geodataset = pR asIGeoDataset; IEnvelope p222env = p222Geodataset.Extent; IPoint Ppoint = newPointClass();

Ppoint.PutCoords( p222env.XMin,p222env.YMin );

IPnt p222pnt = newDblPntClass();//是栅格数据的原点,此原点为创建栅格数据的左下角的坐标,而不是左上角的坐标

p222pnt.SetCoords( pR222props.Width ,pR222props.Height );

IRasterDataset pRdataset = pRwks2.CreateRasterDataset(@\栅格数据处理集

\\Temp\\data\\Create\, \,Ppoint , pRp.Width, pRp.Height, pRp.MeanCellSize().X, pRp.MeanCellSize().Y, 1, rstPixelType.PT_UCHAR , pRp.SpatialReference, true);//创建栅格数据