当前位置:首页 > 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);//创建栅格数据
共分享92篇相关文档