AE 栅格数据使用总结

摘要:
对于栅格数据和单波段图像数据,它显示为仅具有一个波段数据的栅格数据集,而对于多光谱图像数据,则显示为具有多个波段(=空)的栅格数据集中{objectobj=pixelBlock.GetVal;MessageBox.Show;}}6.如何在指定范围内提取网格数据通常使用两种方法来提取指定范围内的网格数据IRasterLayerExport、IExtractionOp、IEextractionOp2。IRasterLayoutExport接口提供有限的网格数据提取功能,只能使用矩形范围作为提取范围,而IExtractationOp接口提供多边形、圆和属性,矩形和其他形式用于提取网格数据。1). IRasterLayerExport接口IRasterLayoutExporterLayerExport=newRasterLayerExportClass();rLayerExport。光栅层=光栅层;//RasterLayer是指当前加载的网格层rLayerExport。Extent=clipExtent//clipExtent是指网格数据提取的范围,如果(proSpatialRef!
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 obj = 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 outGeoDataset = 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);

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

上篇duilib中各控件响应的消息类型Java八股文——网络协议下篇

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

相关文章

数据产品-数据埋点-02

1.埋点方式 1.1客户端埋点   1.1.1代码埋点 代码埋点主要有app研发手动在程序中写下代码进行统计,通过触发某个动作后程序自动发送数据。 优点:具有很强得灵活性,可以控制发散得时间和发散方式等。 缺点:人力成本和维护成本太高,需要以来app发版生效   1.1.2可视化埋点 可视化埋点以前端可视化的方式记录前端设置页面元素与对其操作的关系然后以后...

Java程序执行超时——Future接口介绍

在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交...

C#批量附加指定目录下的所有数据库文件到数据库中

应用场合:因为经常更换操作系统,所以D盘存放数据库文件目录的数据库每次都要一个一个的附加到MSSQL中,因此设计程序批量附加省时间也方便自己和大家。 程序不足:没有去研究跟实现NDF日志文件附加和多个日志文件的数据库附加。 程序源码:         /// <summary>         /// 循环查找指定目录下要附加的数据库文件和对...

数据挖掘的几种经典方法论

 目录 CRISP-DM方法 SEMMA方法 DMAIC方法 AOSP-SM模型 5A模型 数据挖掘与分析的“七步法” 一、CRISP-DM方法(最流行) CRISP-DM - Data Science Project Managementhttps://www.datascience-pm.com/crisp-dm-2/ 在老外的这个网站中,我们可以了可...

Kubernetes增强型调度器Volcano算法分析

【摘要】 Volcano 是基于 Kubernetes 的批处理系统,源自于华为云开源出来的。Volcano 方便 AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。 1      为什么K8S需要Volcano     K8S自带的的资源调度器,有一个明显的特点是:依次调度每个容器...

接口学习心得(Interface)

今天看了几篇接口的文章,看着看着,忽然有种感觉,我一直都理解错了! 我本来今天搜索文章的目的,是想查找一下,如何编写一个接口。可是看了几篇文章后,我发现,其实我这个问题的提出,就说明了我没有理解接口的用途。实际上,要明白接口,要先弄明白为什么要编写接口。我们要编写接口,是因为我们要编写的方法需要使用接口。我们编写接口的目的,是为了定制一种规范,如果用户写的...