ArcGIS Engine栅格数据使用总结

摘要:
IRsterWorkspace2主要用于读取以文件格式本地存储的网格数据。4.加载网格数据。以本地存储的网格数据文件为例。1.直接使用IRasterLayer接口打开网格文件,并将其加载到地图控件IRasterLayerrasterLayer=newRasterLayerClass()中;

jojojojo2002 原文 ArcGIS Engine栅格数据使用总结

简介:ArcGIS Engine栅格数据使用总结,一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集。栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理合成一副大的影像图…
 
最近做栅格数据,对AO的栅格部分应该有了一定的理解,希望高手指教:
 
1、栅格数据的存储类型
 
栅格数据一般可以存储为ESRI GRID(由一系列文件组成),TIFF格式(包括一个TIF文件和一个AUX文件),IMAGINE Image格式 在AE中一般调用ISaveAs接口来保存栅格数据
 
2、栅格数据集和栅格编目的区别
一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集
栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理合成一副大的影像图
 
3、IRasterWorkspaceEx与IRasterWorkspace ,IRsterWorkspace2的区别
1).IRasteWorkspaceEx接口主要是用来读取GeoDatabase中的栅格数据集和栅格编目
2) . IRasterWorkspace ,IRsterWorkspace2主要是用来读取以文件格式存储在本地的栅格数据
 
4、加载栅格数据
以存储在本地的栅格数据文件为例
1.直接用IRasterLayer接口打开一个栅格文件并加载到地图控件
IRasterLayer rasterLayer = new RasterLayerClass();
rasterLayer.CreateFromFilePath(fileName); // fileName指存本地的栅格文件路径
axMapControl1.AddLayer(rasterLayer, 0);
2. 用IRasterDataset接口打开一个栅格数据集
IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
IWorkspace workspace;
workspace = workspaceFactory.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.WriteLine(“Could not open the raster dataset.”);
return;
}
 
5、如何读取栅格数据的属性和遍历栅格数据
栅格数据的属性包括栅格大小,行数,列数,投影信息,栅格范围等等,见下面代码
(假设当前加载的栅格文件栅格值存储方式为:UShort类型)
IRasterProps rasterProps = (IRasterProps)clipRaster;
int dHeight = rasterProps.Height;//当前栅格数据集的行数
int dWidth = rasterProps.Width; //当前栅格数据集的列数
double dX = rasterProps.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 pnt = 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 bj = pixelBlock.GetVal(0, 0, 0);
MessageBox.Show( Convert.ToUInt32(obj).ToString());
}
}
 
6、如何提取指定的范围的栅格数据
提取指定范围内的栅格数据通常用两种方法IRasterLayerExport(esriCarto), IExtractionOp, IExtractionOp2 (esriSpatialAnalyst),IRasterLayerExport接口提供的栅格数据提取功能有限,只能以矩形范围作为提取范围,而IExtractionOp接口提供了多边形,圆,属性,矩形等几种形式作为提取栅格数据.
1).IRasterLayerExport接口
IRasterLayerExport rLayerExport = new RasterLayerExportClass();
rLayerExport.RasterLayer = rasterLayer;// rasterLayer指当前加载的栅格图层
rLayerExport.Extent = clipExtent;//clipExtent指提取栅格数据的范围
if (proSpatialRef != null)
rLayerExport.SpatialReference = proSpatialRef;// proSpatialRef当前栅格数据的投影信息
IWorkspaceFactory pWF = new RasterWorkspaceFactoryClass();
try
{
IWorkspace pRasterWorkspace = pWF.OpenFromFile(_folder, 0);// _folder指栅格文件保存路径
IRasterDataset utGeoDataset = rLayerExport.Export(pRasterWorkspace, code, strRasterType);
//调用ISaveAs接口将导出的数据集保存
……………………..
}
Catch(Exception ex)
{
Throw new Argumention(ex.Message);
}
2.IExtractionOp接口(调用此接口前,应该先检查空间许可)
IExtractionOp extraction = new RasterExtractionOpClass();
try
{
IGeoDataset geoDataset = extraction.Rectangle((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”);
}
}
catch (Exception ex)
{
MessageBox..Show(Ex.message);
}
 
7.栅格数据重采样
栅格数据的重采样主要基于三种方法:最邻近采样(NEAREST),双线性
ILINEAR)和三次卷积采样(CUBIC)。
(1).最邻近采样:它用输入栅格数据中最临近栅格值作为输出值。因此,在重采
样后的输出栅格中的每个栅格值, 都是输入栅格数据中真实存在而未加任何改变的值。这种方法简单易用,计算量小,重采样的速度最快。
(2).双线性采样:此重采样法取待采样点(x,y)点周围四个邻点,在y方向(或X方向)内插两次,再在x方向(或y方向)内插一次,得到(x,y)点的栅格值。
(3).三次卷积采样:这是进一步提高内插精度的一种方法。它的基本思想是增加邻点来获
得最佳插值函数。取待计算点周围相邻的16个点,与双线性采样类似,可先在某一方向上内插,如先在x方向上,每四个值依次内插四次,再根据四次的计算结果在y方上内插,最终得到内插结果
代码示例:采用双线性采样
IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass();
rasterGeometryProc.Resample(rstResamplingTypes.RSP_CubicConvolution, newCellSize, clipRaster);
MessageBox..Show(Ex.message);
}
 

免责声明:文章转载自《ArcGIS Engine栅格数据使用总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何将DevExpress的Gridcontrol导出到Excellinux signal之初学篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

小程序之模板消息

使用模板消息 获取模板 id 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,详见模板审核说明 页面的 <form/> 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支...

C#操作MongoDB入门

1、MongoDB安装及配置   (1)下载:       mongodb官网 https://www.mongodb.com/download-center             进入官网下载页,你会发现版本都是windows Server......  但是不要担心,本人亲测win10也可以用,所以放心大胆的下载就可以了。安装过程比较简单,下一步就...

SQL实现类似于自动刷新数据的功能

有时需要在SQL中,定时刷新某张表,比如说是要定时查询某张表的行数,通常做法就是手动的按F5去执行来刷新数据。但是如果这个定时查询历时较长,10分钟,或半小时,手动的话肯定是要崩溃了。貌似SQL没有像应用程序自动刷新的功能,可能是我还不知道有这样的功能,于是就写了一个类似自动刷新数据的脚本,需要手动中止程序的运行,当然也可以写个条件,自动结束语句的执行。...

C++的MFC 与 HTML 双向通讯

C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单 最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已经做了一个封装wxie,但是开发过程中也遇到了不少问题,在此做一下总结:  ie边框 及上下文菜单   普通嵌入到程序里面的浏览器页面都会有一个灰色的边框,这...

MATLAB文件操作及读txt文件(fopen,fseek,fread,fclose)

文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。1、文件的打开与关闭1)打开文件在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:fid=fopen(文件名,‘打开方式’)说明:其中fid用于存储文件句柄值,...

WCF学习笔记1(体系架构和行为扩展)

引用《WCF服务编程》里的一段话:“以WCF为基础框架搭建面向服务的企业级应用程序,以WF工作流引擎支撑企业应用中业务流程的传递与控制,以Cardspace和WCF固有的安全测罗保证企业信息的安全,最后以ASP.NET AJAX,WPF和SILVERLIGHT技术丰富客户端界面的绚丽表现,从而改善企业客户对应用程序的体验,这就是微软实现企业级应用的霸业宏图...