又一篇raster

5 TIN
Tin子系统包括访问和操作tin的对象。
TINs主要用于表面模拟。
三个主要的接口:
ITinAdvanced:提供对于基本属性的访问,获取基础数据结构开始点
ITinEdit:用于TIN构建和编辑
ISurface:用于提供表面分析函数,例如等值线,剖面和volumetrics

组成的基本元素:
Triangles
edges
nodes

10 Raster子系统
包括访问和操作rasters,rasters datasets, raster catalogs工作的对象。这些对象可以基于文件,也可以基于Geodatabase。
无论是基于文件还是基于geodatabase系统的类型,都有两个类型表达栅格数据:
raster dataset:表达已经存在的数据
raster catalog:将raster dataset集合看成一个整体进行管理。
一个raster dataset有一个或者多个波段组成。Raster dataset还可以包括pyramids,statistics,colormap.

10.1 Raster data access 对象
访问raster data,必须利用workspacefactory(RasterWorkspaceFactory)建立一个workspace.
AccessWorkspaceFactory用于初始化一个Access Workspace;
SdeWorkspaceFactory用于初始化一个database workspace.
上述两个类的对象用于访问不同存贮形式的Raster数据。

Public Function OpenRasterWorkspace(sPath As String) As IRasterWorkspace
Dim pWKSF As IWorkspaceFactory
Set pWKSF = New RasterWorkspaceFactory
Dim pRasterWs As IRasterWorkspace
Set pRasterWs = pWKSF.OpenFromFile(sPath, 0)
Set OpenRasterWorkspace = pRasterWs
End Function

Workspace对象提供了访问RasterDataset对象和RasterCatalog对象的三个接口:
1.IRasterWorkspace接口
2.IRasterWorkspace2接口
以上两个接口用于打开和建立基于文件的RasterDataset。


Dim pRasterDataset as IRasterdataset
Dim pRasterWs as IRasterWorkspace2
Set pRasterWs = OpenRasterWorkspace("D:\data")
Set pRasterDataset = pRasterWs.OpenRasterDataset("airphoto.img",0)
原点,宽,高和象元原始值可以通过参数进行修改。

3.IRasterWorkspaceEX接口
通过AccessWorkspace访问基于Personal geodatabase的;通过databaseWorkspace访问寄予enterprise geodatabase的。

Dim pWorkspace as IRasterWorkspaceEx
Dim pRasterDataset as IRasterDataset
Dim pRasterCatalog as IrasterCatalog
'From a personal geodatabase.
Set pWorkspace = OpenAccessWorkspace("D:\data\images.mdb")
'Or from an enterprise geodatabase
Set pWorkspace = OpenSDEWorkspace("myserver","5151","raster", "raster","raster
Set pRasterDataset = pWorkspace.OpenRasterDataset("airphoto")
Set pRasterCatalog = pWorkspace.OpenRasterCatalog("RedLandImages")

在geodatabase中建立一个raster dataset是建立一个没有dimension的空raster dataset,它具有基本的占位符,例如波段数,象元类

型,RASTER字段属性,GEOMETRY字段属性。一旦空的raster dataset 建立后,raster象元能够从其他raster data中追加,通过

mosaicking方法。例如:

Dim pWorkspace As IRasterWorkspaceEx
Set pWorkspace = OpenSDEWorkspace ("myserver","5151","raster", "raster","raster
' Create a RasterStorageDef object for storage parameters, define compression a
Dim pStorageDef As IRasterStorageDef
Set pStorageDef = New RasterStorageDef
pStorageDef.CompressionType = esriRasterSdeCompressionTypeJPEG2000
' Create a RasterDef object for the RASTER field
Dim pRasterDef As IRasterDef
Set pRasterDef = New RasterDef
Set pRasterDef.SpatialReference = New UnknownCoordinateSystem
' Create a GeometryDef object for the GEOMETRY field
Dim pGeoDef As IGeometryDef
Set pGeoDef = New GeometryDef
Set pGeoDef.SpatialReference = New UnknownCoordinateSystem
Dim pSDERasterDs As IRasterDataset
Set pSDERasterDs = pWorkspace .CreateRasterDataset("mydataset", 1, PT_UCHAR, pS

10.2 Raster datasets
一个RasterDataset有一个或多个连续的栅格波段组成。
RasterDataset对象可以执行基本的数据集管理功能,也可以用于获取数据集属性
可以利用ISaveAs接口存储成其他格式。
Dim pSaveAs as ISaveAs
Set pSaveAs = pRasterDataset
pSaveAs.SaveAs "MyImage.img", pRasterWs, "IMAGINE Image"
pSaveAs.SaveAs "MyRaster", pWorkspace, "SDR"

RasterDataset支持IRasterBandColoection接口,除了添加,删除波段对于RasterDataset没有影响。
RasterDataset对象可以利用初始化Raster或者RasterBand对象描绘数据的其他方面。

两个方法可以用于从RasterDataset建立Raster对象。
CreateFullRaster:建立一个Raster,带有全属性
CreateDefaultRaster:建立一个Raster,拥有方形的cell,仅包含三个波段。

除了通过workspace可以访问之外,RasterDataset还可以利用RasterDataset属性从波段中获得。

10.3 Raster Bands
这个对象描绘一个Raster dataset的现有波段。
下面的代码显示了如何从Raster或者RasterDataset对象访问RasterBand。

Dim pBandCol as IRasterBandCollection
Set pBandCol = pRasterPtr 'May be a Raster or a RasterDataset
' Get the first band of the raster
Dim pRasterBand as IRasterBand
Set pRasterBand = pBandCol.Item(0)

有一些接口只支持基于文件的RasterBand,不支持Database RasterBand.
一个Raster波段包括像元值,可以通过RasterBand访问。
下面代码是访问raster colormap:

Dim pColormap As IRasterColormap
Dim HasColormap As Boolean
HasColormap = pRasterBand.HasColormap
If HasColormap = True Then Set pColormap = pRasterBand.Colormap

RasterBand支持IRawPixel接口,可以读取和写波段的像元值。

10.4 Raster
该对象与RasterDataset和RasterBand对象相比,能够改变而不影响原数据。
允许Raster表达成你想要的,你可以定义特殊投影,幅度等。这可以使Raster更加有利于显示和分析。

因为Raster的Transient nature,

IRasterProps是一个重要的接口,用于控制Raster的属性,例如幅度,宽度,高度,空间参考,像元类型,Nodata value等。

Dim pRasterProps as IRasterProps
Set pRasterProps = pRaster
pRaster.ResampleMethod = RSP_BilinearInterpolation
pRasterProps.SpatialReference = pNewSpatialReference
Dim pSaveAs as ISaveAs
Set pSaveAs = pRaster
pSaveAs.SaveAs "MyRaster", pRasterWs, "GRID"

Raster对象能够利用IPixelFilterOperation建立PixelBlock和通过像元filter修改像元值。也可以利用IrasterEdit接口直接修改Raster的

像元值。

Raster能够利用RasterLayer对象显示,这个对象是esriCarto库对象。Raster可以在RasterDataset中建立,也以从RasterLayer中获

取。
Set pRaster = pRasterLayer.Raster

10.5 Pixel blocks
这个对象包含像元队列能够从Raster 和Raster band中读取。
这个对象能够从Raster和RasterBand中创建。在创建的手需要定义pixel block,一旦建立,pixel block的大小就不能改变了。
你可以获取像元值从pixel block,改变像元值。
PixelBlockCursor或者RasterCursor两个对象允许你分割一个大的image成为许多小pixel blocks。
这个对象在9.0中得到了加强。

10.6 Raster catalogs
这个对象是9.0中新的数据类型,
这个对象用于管理raster datasets集合作为一个整体。
建立Raster catalogs,首先要建立空的Raster catalog,然后添加包含raster值的rows到raster catalog.
RasterCatalog能够利用在esriCarto库中的GdbRasterCatalogLayer对象显示。

原文地址:https://www.cnblogs.com/zhangjun1130/p/1684517.html