FAQ
ArcObjects におけるラスター データセットの新規作成

ナレッジ番号:5535 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

既存のファイル ジオデータベースに対して新規にラスター データセットを作成する方法を示します。

サンプル コード

//設定値
string Name = "RasterDataset";               //ラスター データセット名
double PointX = -180.00000101746991; //原点X座標
double PointY = -90.000001068692526; //原点Y座標
esriSRGeoCSType SpatialRereference = esriSRGeoCSType.esriSRGeoCS_WGS1984;  //空間参照(定数)
int CulumnCount = 43200;                      //セルの幅
int RowCount = 21600;                          //セルの高さ
double CellSizeX = 0.00833333376795053; //セルの幅サイズ
double CellSizeY = 0.00833333376795053; //セルの高さサイズ
int NumBand = 1;                                   //バンド数
rstPixelType PixelType = rstPixelType.PT_SHORT; //セル タイプ

//既存のファイル ジオデータベースへのアクセス
IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();
IRasterWorkspaceEx pRasterWorkspaceEx = (IRasterWorkspaceEx)pWorkspaceFactory.OpenFromFile(@"D:\Workspace\FileGeodatabase.gdb",0);

//空間参照の作成
ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)SpatialRereference);

//ラスターの原点の作成(原点はラスターの左上となります)
IPoint pPoint = new PointClass();
pPoint.X = PointX;
pPoint.Y = PointY;
pPoint.SpatialReference = pSpatialReference;

//セル サイズの作成
IPnt pPnt = new PntClass();
pPnt.X = CellSizeX;
pPnt.Y = CellSizeY;

//RasterStorageDef オブジェクトの作成
IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();
pRasterStorageDef.CellSize = pPnt;
pRasterStorageDef.Origin = pPoint;
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000;
pRasterStorageDef.PyramidLevel = 2;
pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
pRasterStorageDef.TileHeight = 128;
pRasterStorageDef.TileWidth = 128;
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionUnknown;

//RasterDef の作成
IRasterDef pRasterDef = new RasterDefClass();
pRasterDef.SpatialReference = pSpatialReference;

//GeometryDef オブジェクトの作成 (必須ではありません。デフォルト値を使用する場合は、CreateRasterDataset() の第7引数を null とします)
IGeometryDefEdit pGeometryDefEdit = new GeometryDefClass();
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
pGeometryDefEdit.AvgNumPoints_2 = 4;
pGeometryDefEdit.GridCount_2 = 1;
pGeometryDefEdit.set_GridSize(0, 1000);
pGeometryDefEdit.SpatialReference_2 = pSpatialReference;

//RasterDataset の作成
IRasterDataset3 pRasterDataset = (IRasterDataset3)pRasterWorkspaceEx.CreateRasterDataset(Name, NumBand, PixelType, pRasterStorageDef, "", pRasterDef, pGeometryDefEdit);


//Raster を取得してセルサイズを変更
IRaster pRaster = pRasterDataset.CreateFullRaster();
IRasterProps pRasterProp = (IRasterProps)pRaster;
int lngCol = CulumnCount;
int lngRow = RowCount;

IEnvelope pEnvelope = new EnvelopeClass();
pEnvelope.XMin = pPoint.X;
pEnvelope.XMax = pPoint.X + pPnt.X * lngCol;
pEnvelope.YMin = pPoint.Y - pPnt.Y * lngRow;
pEnvelope.YMax = pPoint.Y;

pRasterProp.Width = lngCol;
pRasterProp.Height = lngRow;
pRasterProp.Extent = pEnvelope;

//変更したセル サイズをRasterDatasetに反映(モザイクを使用)
IRasterDatasetEdit pRasterDatasetEdit = (IRasterDatasetEdit)pRasterDataset;
pRasterDatasetEdit.Mosaic(pRaster, 0);
'設定値
Dim Name As String = "RasterDataset"            'ラスター データセット名
Dim PointX As Double = -180.00000101746991      '原点X座標
Dim PointY As Double = -90.000001068692526      '原点Y座標
Dim SpatialRereference As esriSRGeoCSType = esriSRGeoCSType.esriSRGeoCS_WGS1984 '空間参照(定数)
Dim CulumnCount As Integer = 43200              'セルの幅
Dim RowCount As Integer = 21600                 'セルの高さ
Dim CellSizeX As Double = 0.00833333376795053   'セルの幅サイズ
Dim CellSizeY As Double = 0.00833333376795053   'セルの高さサイズ
Dim NumBand As Integer = 1                      'バンド数
Dim PixelType As rstPixelType = rstPixelType.PT_SHORT   'セル タイプ

'既存のファイル ジオデータベースへのアクセス
Dim pWorkspaceFactory As IWorkspaceFactory = New FileGDBWorkspaceFactoryClass()
Dim pRasterWorkspaceEx As IRasterWorkspaceEx = CType(pWorkspaceFactory.OpenFromFile("D:\Workspace\FileGeodatabase.gdb", 0),IRasterWorkspaceEx)

'空間参照の作成
Dim pSpatialReferenceFactory As ISpatialReferenceFactory = New SpatialReferenceEnvironmentClass
Dim pSpatialReference As ISpatialReference = pSpatialReferenceFactory.CreateGeographicCoordinateSystem(CType(SpatialRereference,Integer))


'ラスターの原点の作成(原点はラスタの左上となります)
Dim pPoint As IPoint = New PointClass()
pPoint.X = PointX
pPoint.Y = PointY
pPoint.SpatialReference = pSpatialReference

'セル サイズの作成
Dim pPnt As IPnt = New PntClass()
pPnt.X = CellSizeX
pPnt.Y = CellSizeY

'RasterStorageDef オブジェクトの作成
Dim pRasterStorageDef As IRasterStorageDef = New RasterStorageDefClass
pRasterStorageDef.CellSize = pPnt
pRasterStorageDef.Origin = pPoint
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000
pRasterStorageDef.PyramidLevel = 2
pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation
pRasterStorageDef.TileHeight = 128
pRasterStorageDef.TileWidth = 128
pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionUnknown

'RasterDef の作成
Dim pRasterDef As IRasterDef = New RasterDefClass()
pRasterDef.SpatialReference = pSpatialReference

'GeometryDef オブジェクトの作成(必須ではありません。デフォルト値を使用する場合は、CreateRasterDataset() の第7引数を Nothing とします)
Dim pGeometryDefEdit As IGeometryDefEdit = New GeometryDefClass()
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon
pGeometryDefEdit.AvgNumPoints_2 = 4
pGeometryDefEdit.GridCount_2 = 1
pGeometryDefEdit.GridSize(0) = 1000
pGeometryDefEdit.SpatialReference_2 = pSpatialReference

'RasterDataset の作成
Dim pRasterDataset As IRasterDataset3 = CType(pRasterWorkspaceEx.CreateRasterDataset(Name, NumBand, PixelType, pRasterStorageDef, "", pRasterDef, pGeometryDefEdit),IRasterDataset3)

'Raster を取得してセル サイズを変更
Dim pRaster As IRaster = pRasterDataset.CreateFullRaster
Dim pRasterProp As IRasterProps = CType(pRaster,IRasterProps)
Dim lngCol As Integer = CulumnCount
Dim lngRow As Integer = RowCount

Dim pEnvelope As IEnvelope = New EnvelopeClass
pEnvelope.XMin = pPoint.X
pEnvelope.XMax = (pPoint.X + (pPnt.X * lngCol))
pEnvelope.YMin = (pPoint.Y - (pPnt.Y * lngRow))
pEnvelope.YMax = pPoint.Y
pRasterProp.Width = lngCol
pRasterProp.Height = lngRow
pRasterProp.Extent = pEnvelope

'変更したセルサイズをRasterDatasetに反映(モザイクを使用)
Dim pRasterDatasetEdit As IRasterDatasetEdit = CType(pRasterDataset,IRasterDatasetEdit)
pRasterDatasetEdit.Mosaic(pRaster, 0)

参考情報

How to create a raster dataset

メタデータ

機能

種類

製品