栅格数据AE

简介:

转自原文 栅格数据AE

两个星期以来一直与栅格数据打交道,对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);
public static IRasterLayer SetViewShedRenderer(IRaster pInRaster,string sField,string sPath)
{
IRasterDescriptor pRD = new RasterDescriptorClass();
pRD.Create(pInRaster, new QueryFilterClass(), sField);
IReclassOp pReclassOp = new RasterReclassOpClass();
IGeoDataset 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.Extent;
pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref objExtent, ref objSnap);
pEnv.OutSpatialReference = pGeodataset.SpatialReference;
IRasterLayer pRLayer = new RasterLayerClass();
IRasterBandCollection pRsBandCol = pGeodataset as IRasterBandCollection;
IRasterBand pRasterBand = pRsBandCol.Item(0);
pRasterBand.ComputeStatsAndHist();
IRasterStatistics pRasterStatistic = pRasterBand.Statistics;
double dMaxValue = pRasterStatistic.Maximum ;
double dMinValue = pRasterStatistic.Minimum ;
INumberRemap pNumRemap = new NumberRemapClass();
pNumRemap.MapRange(dMinValue, 0, 0);
pNumRemap.MapRange(0, dMaxValue, 1);
IRemap pRemap = pNumRemap as IRemap;
IRaster pOutRaster = pReclassOp.ReclassByRemap(pGeodataset, pRemap, false) as IRaster ;
pRLayer.CreateFromRaster(pOutRaster);
return pRLayer;
}
复制代码

栅格图层和矢量图层的属性表浏览

复制代码
if (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.esriGeometryPolyline)
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("Shape");
IFeature pFea = pCursor.NextFeature();
while (pFea != null)
{
DataRow pRow = pTable.NewRow();
for (int i = 0; i < pFCls.Fields.FieldCount; i++)
{
if (i == ishape)
{
pRow[i] = shape;
continue;
}
pRow[i] = pFea.get_Value(i).ToString();
}
pTable.Rows.Add(pRow);
pFea = pCursor.NextFeature();
}
dataGridView1.DataSource = 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 IRasterBandCollection;
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();
while (pRrow != null)
{
DataRow pRow = pTable.NewRow();
for (int i =0 ;i<pRrow .Fields .FieldCount ;i++)
{
pRow[i] = pRrow.get_Value(i).ToString () ;
}
pTable.Rows.Add(pRow);
pRrow = pCursor.NextRow();
}
dataGridView1.DataSource = pTable;
}
}
复制代码

 

创建栅格数据集

  View Code

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。





    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6735978.html ,如需转载请自行联系原作者
相关文章
|
7月前
|
算法 知识图谱
数据包络分析(DEA)——SBM模型
数据包络分析(DEA)——SBM模型
671 0
|
缓存 NoSQL
KUC720AE101 ABB 遵循提取、解码和执行步骤
KUC720AE101 ABB 遵循提取、解码和执行步骤
144 0
KUC720AE101   ABB 遵循提取、解码和执行步骤
KUC711AE101 3BHB004661R0101 整体速度取决于开关的速度
KUC711AE101 3BHB004661R0101 整体速度取决于开关的速度
96 0
KUC711AE101 3BHB004661R0101 整体速度取决于开关的速度
ABB KUC711AE101 3BHB004661R0101 用于以压缩形式存档数据
ABB KUC711AE101 3BHB004661R0101 用于以压缩形式存档数据
ABB KUC711AE101 3BHB004661R0101 用于以压缩形式存档数据
ALLEN BRADLEY 842E-CM-MIP3BA 保留原始流中存在的所有信息
ALLEN BRADLEY 842E-CM-MIP3BA 保留原始流中存在的所有信息
ALLEN BRADLEY 842E-CM-MIP3BA  保留原始流中存在的所有信息
|
TensorFlow 算法框架/工具 计算机视觉
CV之FE:基于TF进行FE——去除异常(被损坏)图像 和单通道图像
CV之FE:基于TF进行FE——去除异常(被损坏)图像 和单通道图像
CV之FE:基于TF进行FE——去除异常(被损坏)图像 和单通道图像
|
定位技术 NoSQL 数据库