arcengine栅格数据使用情况总结.doc

上传人:小** 文档编号:3003139 上传时间:2020-06-20 格式:DOC 页数:11 大小:60.02KB
返回 下载 相关 举报
arcengine栅格数据使用情况总结.doc_第1页
第1页 / 共11页
arcengine栅格数据使用情况总结.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《arcengine栅格数据使用情况总结.doc》由会员分享,可在线阅读,更多相关《arcengine栅格数据使用情况总结.doc(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-arcengine栅格数据使用总结 两个星期以来一直与栅格数据打交道,对AO的栅格部分应该有了一定的理解,下面是自己的一点体会,希望高手指教:)1、栅格数据的存储类型栅格数据一般可以存储为ESRI GRID(由一系列文件组成),TIFF格式(包括一个TIF文件和一个AUX文件),IMAGINE Image格式 在AE中一般调用ISaveAs接口来保存栅格数据2、栅格数据集和栅格编目的区别一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为

2、具有多个波段的栅格数据集栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理合成一副大的影像图3、IRasterWorkspaceEx与IRasterWorkspace ,IRsterWorkspace2的区别1).IRasteWorkspaceEx接口主要是用来读取GeoDatabase中的栅格数据集和栅格编目2) . IRasterWorkspace ,IRsterWorkspace2主要是用来读取以文件格式存储在本地的栅格数据4、加载栅格数据(以存储在本地的栅格数据文件为例)1.直接用IRasterLayer接口打开一个栅格文

3、件并加载到地图控件IRasterLayer rasterLayer = new RasterLayerClass();rasterLayer.CreateFromFilePath(fileName); / fileName指存本地的栅格文件路径axMapControl1.AddLayer(rasterLayer, 0);2. 用IRasterDataset接口打开一个栅格数据集IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();IWorkspace workspace;workspace = workspaceFa

4、ctory.OpenFromFile(inPath, 0); /inPath栅格数据存储路径if (workspace = null)Console.WriteLine(Could not open the workspace.);return;IRasterWorkspace rastWork = (IRasterWorkspace)workspace;IRasterDataset rastDataset;rastDataset= rastWork.OpenRasterDataset(inName);/inName栅格文件名if (rastDataset = null)Console.Wri

5、teLine(Could not open the raster dataset.);return;5、如何读取栅格数据的属性和遍历栅格数据栅格数据的属性包括栅格大小,行数,列数,投影信息,栅格范围等等,见下面代码(假设当前加载的栅格文件栅格值存储方式为:UShort类型)IRasterProps rasterProps = (IRasterProps)clipRaster;int dHeight = rasterProps.Height;/当前栅格数据集的行数int dWidth = rasterProps.Width; /当前栅格数据集的列数double dX = rasterProps.

6、MeanCellSize().X; /栅格的宽度double dY = rasterProps.MeanCellSize().Y; /栅格的高度IEnvelope extent=rasterProps.Extent; /当前栅格数据集的范围rstPixelType pixelType=rasterProps.PixelType; /当前栅格像素类型IPnt pntSize = new PntClass();pntSize.SetCoords(dX, dY);IPixelBlock pixelBlock = clipRaster.CreatePixelBlock(pntSize);IPnt pn

7、t = new PntClass();for (int i = 0; i dHeight; i+)for (int j = 0; j dWidth; j+)pnt.SetCoords(i, j);clipRaster.Read(pnt, pixelBlock);if (pixelBlock != null)object obj = pixelBlock.GetVal(0, 0, 0);MessageBox.Show( Convert.ToUInt32(obj).ToString();6、如何提取指定的范围的栅格数据提取指定范围内的栅格数据通常用两种方法IRasterLayerExport(es

8、riCarto), IExtractionOp, IExtractionOp2 (url=esriSpatialAnalyst/url),IRasterLayerExport接口提供的栅格数据提取功能有限,只能以矩形范围作为提取范围,而IExtractionOp接口提供了多边形,圆,属性,矩形等几种形式作为提取栅格数据.1).IRasterLayerExport接口IRasterLayerExport rLayerExport = new RasterLayerExportClass();rLayerExport.RasterLayer = rasterLayer;/ rasterLayer指

9、当前加载的栅格图层rLayerExport.Extent = clipExtent;/clipExtent指提取栅格数据的范围if (proSpatialRef != null)rLayerExport.SpatialReference = proSpatialRef;/ proSpatialRef当前栅格数据的投影信息IWorkspaceFactory pWF = new RasterWorkspaceFactoryClass();tryIWorkspace pRasterWorkspace = pWF.OpenFromFile(_folder, 0);/ _folder指栅格文件保存路径I

10、RasterDataset outGeoDataset = rLayerExport.Export(pRasterWorkspace, code, strRasterType);/调用ISaveAs接口将导出的数据集保存.Catch(Exception ex)Throw new Argumention(ex.Message);2IExtractionOp接口(调用此接口前,应该先检查空间许可)IExtractionOp extraction = new RasterExtractionOpClass();tryIGeoDataset geoDataset = extraction.Rectan

11、gle(IGeoDataset)clipRaster, clipExtent, true);IRaster raster = geoDataset as IRaster;if (raster != null)IWorkspaceFactory WF = new RasterWorkspaceFactoryClass();IWorkspace rasterWorkspace = WF.OpenFromFile(_folder, 0);ISaveAs saveAs = (ISaveAs)raster;saveAs.SaveAs(“Result.tif”, rasterWorkspace, TIFF

12、);catch (Exception ex)MessageBox.Show(Ex.message);7栅格数据重采样栅格数据的重采样主要基于三种方法:最邻近采样(NEAREST),双线性ILINEAR)和三次卷积采样(CUBIC)。(1).最邻近采样:它用输入栅格数据中最临近栅格值作为输出值。因此,在重采样后的输出栅格中的每个栅格值, 都是输入栅格数据中真实存在而未加任何改变的值。这种方法简单易用,计算量小,重采样的速度最快。(2).双线性采样:此重采样法取待采样点(x,y)点周围四个邻点,在y方向(或X方向)内插两次,再在x方向(或y方向)内插一次,得到(x,y)点的栅格值。(3).三次卷积

13、采样:这是进一步提高内插精度的一种方法。它的基本思想是增加邻点来获得最佳插值函数。取待计算点周围相邻的16个点,与双线性采样类似,可先在某一方向上内插,如先在x方向上,每四个值依次内插四次,再根据四次的计算结果在y方上内插,最终得到内插结果代码示例:采用双线性采样IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass();rasterGeometryProc.Resample(rstResamplingTypes.RSP_CubicConvolution, newCellSize, clipRaster);Tag

14、标签: 栅格数据 ArcEngine标签:栅格 重分类 分类:AE二次开发 public static IRasterLayer SetViewShedRenderer(IRaster pInRaster,string sField,string sPath) IRasterDescriptor pRD = new RasterDescriptorClass(); pRD.Create(pInRaster, new QueryFilterClass(), sField); IReclassOp pReclassOp = new RasterReclassOpClass(); IGeoDatas

15、et pGeodataset=pInRaster as IGeoDataset; IRasterAnalysisEnvironment pEnv = pReclassOp as IRasterAnalysisEnvironment; IWorkspaceFactory pWSF=new RasterWorkspaceFactoryClass(); IWorkspace pWS = pWSF.OpenFromFile(sPath, 0); pEnv.OutWorkspace = pWS; object objSnap = null; object objExtent = pGeodataset.

16、Extent; pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objExtent, ref objSnap); pEnv.OutSpatialReference = pGeodataset.SpatialReference; IRasterLayer pRLayer = new RasterLayerClass(); IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection; /定义波段集IRasterBand pRasterB

17、and = pRsBandCol.Item(0); pRasterBand.ComputeStatsAndHist(); IRasterStatistics pRasterStatistic = pRasterBand.Statistics; /获取像元统计信息double dMaxValue = pRasterStatistic.Maximum ; double dMinValue = pRasterStatistic.Minimum ; INumberRemap pNumRemap = new NumberRemapClass(); /定义INumberRemap设定阈值pNumRemap

18、.MapRange(dMinValue, 0, 0); /设置值区间,输出值pNumRemap.MapRange(0, dMaxValue, 1); IRemap pRemap = pNumRemap as IRemap; /转换成IRemapIRaster pOutRaster = pReclassOp.ReclassByRemap(pGeodataset, pRemap, false) as IRaster ; /调用ReclassByRemap方法pRLayer.CreateFromRaster(pOutRaster); return pRLayer; 栅格图层和矢量图层的属性表浏览 i

19、f (pLyr is IFeatureLayer) DataTable pTable = new DataTable(); IFeatureLayer pFealyr = pLyr as IFeatureLayer; IFeatureClass pFCls = pFealyr.FeatureClass; string shape = ; if (pFCls.ShapeType = esriGeometryType.esriGeometryPoint) shape = Point; else if (pFCls.ShapeType = esriGeometryType.esriGeometryP

20、olyline) shape = Polyline; else if (pFCls.ShapeType = esriGeometryType.esriGeometryPolygon) shape = Polygon; for (int i = 0; i pFCls.Fields.FieldCount; i+) pTable.Columns.Add(pFCls.Fields.get_Field(i).Name); IFeatureCursor pCursor = pFCls.Search(null, false); int ishape = pFCls.Fields.FindField(Shap

21、e); IFeature pFea = pCursor.NextFeature(); while (pFea != null) DataRow pRow = pTable.NewRow(); for (int i = 0; i pFCls.Fields.FieldCount; i+) if (i = ishape) pRow = shape; continue; pRow = pFea.get_Value(i).ToString(); pTable.Rows.Add(pRow); pFea = pCursor.NextFeature(); dataGridView1.DataSource =

22、pTable; else if (pLyr is IRasterLayer) IRasterLayer pRlyr = pLyr as IRasterLayer; IRaster pRaster = pRlyr.Raster; IRasterProps pProp = pRaster as IRasterProps; pProp.PixelType = rstPixelType.PT_LONG; if (pProp.PixelType = rstPixelType.PT_LONG) IRasterBandCollection pBcol = pRaster as IRasterBandColl

23、ection; IRasterBand pBand = pBcol.Item(0); ITable pRTable = pBand.AttributeTable; DataTable pTable = new DataTable(); for (int i = 0; i pRTable.Fields.FieldCount; i+) pTable.Columns.Add(pRTable.Fields.get_Field(i).Name); ICursor pCursor= pRTable.Search(null, false); IRow pRrow= pCursor.NextRow(); wh

24、ile (pRrow != null) DataRow pRow = pTable.NewRow(); for (int i =0 ;ipRrow .Fields .FieldCount ;i+) pRow = pRrow.get_Value(i).ToString () ; pTable.Rows.Add(pRow); pRrow = pCursor.NextRow(); dataGridView1.DataSource = pTable; IRasterWorkspace2 IRasterDataset CreateRasterDataset C# public IRasterDatase

25、t CreateFileRasterDataset(string directoryName, string fileName) / This function creates a new img file in the given workspace / and then assigns pixel values try IRasterDataset rasterDataset = null; IPoint originPoint = new PointClass(); originPoint.PutCoords(0, 0); / Create the dataset IRasterWork

26、space2 rasterWorkspace2 = null; rasterWorkspace2 = CreateRasterWorkspace(directoryName); rasterDataset = rasterWorkspace2.CreateRasterDataset(fileName, IMAGINE Image, originPoint, 200, 100, 1, 1, 1, rstPixelType.PT_UCHAR, new UnknownCoordinateSystemClass(), true); IRawPixels rawPixels = null; IPixel

27、Block3 pixelBlock3 = null; IPnt pixelBlockOrigin = null; IPnt pixelBlockSize = null; IRasterBandCollection rasterBandCollection; IRasterProps rasterProps; / QI for IRawPixels and IRasterProps rasterBandCollection = (IRasterBandCollection)rasterDataset; rawPixels = (IRawPixels)rasterBandCollection.It

28、em(0); rasterProps = (IRasterProps)rawPixels; / Create pixelblock pixelBlockOrigin = new DblPntClass(); pixelBlockOrigin.SetCoords(0, 0); pixelBlockSize = new DblPntClass(); pixelBlockSize.SetCoords(rasterProps.Width, rasterProps.Height); pixelBlock3 = (IPixelBlock3)rawPixels.CreatePixelBlock(pixelB

29、lockSize); / Read pixelblock rawPixels.Read(pixelBlockOrigin, (IPixelBlock)pixelBlock3); / Get pixeldata array System.Object, pixelData; pixelData = (System.Object,)pixelBlock3.get_PixelDataByRef(0); / Loop through all the pixels and assign value for (int i = 0; i rasterProps.Width; i+) for (int j =

30、 0; j rasterProps.Height; j+) pixelDatai, j = (i * j) % 255; / Write the pixeldata back System.Object cachePointer; cachePointer = rawPixels.AcquireCache(); rawPixels.Write(pixelBlockOrigin, (IPixelBlock)pixelBlock3); rawPixels.ReturnCache(cachePointer); / Return raster dataset return rasterDataset;

31、 catch (Exception ex) System.Diagnostics.Debug.WriteLine(ex.Message); return null; public IRasterWorkspace2 CreateRasterWorkspace(string pathName) / Create RasterWorkspace IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass(); return workspaceFactory.OpenFromFile(pathName, 0) as IRa

32、sterWorkspace2; #4楼楼主 2009-02-09 15:38 | 尤文之鹤 public IRasterDataset tin2raster(string tempBathyTIN,string geoPath, string gridName) string tinFolder = System.IO.Path.GetDirectoryName(tempBathyTIN); string tinName = System.IO.Path.GetFileName(tempBathyTIN); IRasterDataset rasterDataset = new RasterDa

33、tasetClass(); try string rasterPath = System.IO.Path.GetDirectoryName(geoPath); IWorkspaceFactory TinWF = new TinWorkspaceFactory(); ITinWorkspace TinWK = TinWF.OpenFromFile(tinFolder,0)as ITinWorkspace; ITinAdvanced2 tinAd = TinWK.OpenTin(tinName) as ITinAdvanced2; IEnvelope extent = tinAd.Extent;

34、IPoint origin = extent.LowerLeft; origin.X = origin.X - (5 * 0.5); origin.Y = origin.Y - (5 * 0.5); int nCol = (int)Math.Round(extent.Width / 5) + 1; int nRow = (int)Math.Round(extent.Height / 5) +1; ISpatialReference2 spatialRef = (ISpatialReference2)extent.SpatialReference; IWorkspaceFactory raste

35、rWF = new RasterWorkspaceFactoryClass(); IRasterWorkspace2 workSpace = (IRasterWorkspace2)rasterWF.OpenFromFile(rasterPath,0); rasterDataset = workSpace.CreateRasterDataset(gridName, GRID, origin,nCol,nRow,5,5,1,ESRI.ArcGIS.Geodatabase.rstPixelType.PT_FLOAT, spatialRef,true); IRasterBandCollection b

36、andColl = (IRasterBandCollection) rasterDataset; IRasterBand rasterBand = bandColl.Item(0); IRawPixels rawPixels = (IRawPixels)rasterBand; IPnt blockSize = new DblPntClass(); blockSize.X = nCol; blockSize.Y = nRow; IPixelBlock3 pixelBlock = (IPixelBlock3)rawPixels.CreatePixelBlock(blockSize); ITinSu

37、rface tinSurface = (ITinSurface)tinAd; IRasterProps rasterProps = (IRasterProps)rawPixels; object nodataFloat; /long nodataInt; object val = pixelBlock.get_PixelDataByRef(0); MessageBox.Show(val.ToString(); double cellsize = 5; origin.X = origin.X + (5 * 0.5); origin.Y = origin.Y + (5 * nRow) - (5 *

38、 0.5); nodataFloat = Convert.ToDouble(rasterProps.NoDataValue.ToString(); tinSurface.QueryPixelBlock(origin.X,origin.Y,cellsize,cellsize,esriRasterizationType.esriElevationAsRaster,nodataFloat,val); IPnt offset = new DblPntClass(); offset.X = 0; offset.Y = 0; rawPixels.Write(offset,pixelBlock as IPi

39、xelBlock); catch(Exception ex) MessageBox.Show(ex.ToString(); return rasterDataset; ILayer pLayer = pAxMapControl.get_Layer(this.cmbLayer.SelectedIndex); IRasterLayer pRasterLayer = pLayer as IRasterLayer; IWorkspaceFactory2 pWorkspaceFactory2 = new RasterWorkspaceFactoryClass(); IRasterWorkspace pR

40、asterWorkspace; int Index = pRasterLayer.FilePath.LastIndexOf(); string filePath = pRasterLayer.FilePath.Substring(0, Index); string fileName = pRasterLayer.FilePath.Substring(Index + 1); pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory2.OpenFromFile(filePath, 0); IRasterDataset pRasterDataset

41、 = pRasterWorkspace.OpenRasterDataset(fileName); IGeoDataset pRasterGeoDataset = pRasterDataset as IGeoDataset; IWorkspaceFactory2 pWorkspaceFactoryShp = new ShapefileWorkspaceFactoryClass(); /. IWorkspace pWorkspace = pWorkspaceFactoryShp.OpenFromFile(this.tbFolderPath.Text, 0); IConversionOp pConv

42、ersionOp = new RasterConversionOpClass(); ISpatialReference pSpatialReference = pRasterGeoDataset.SpatialReference; IGeoDataset pGeoDataset; /. pGeoDataset = pConversionOp.RasterDataToPolygonFeatureData(pRasterGeoDataset, pWorkspace, this.tbName.Text, true); IDataset pDataset1 = pGeoDataset as IDataset; IFeatureClass pFeatureClass = pDataset1 as IFeatureClass; IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; pAxMapControl.ClearLayers(); pAxMapControl.AddLayer(pFeatureLayer); pAxMapControl.Refresh();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com