FAQ
ラスタ データセットの投影変換

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

概要

ラスター データセットに定義されている座標系を異なる座標系に変換し、別のデータとして出力する方法を示します。

サンプル コード

1.ラスター データセットへのアクセス

System.Type t = System.Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory");
IWorkspaceFactory pWorkspaceFactory = Activator.CreateInstance(t) as IWorkspaceFactory;
string strPath = @"D:\Data\tmp";
IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(strPath, 0) as IRasterWorkspace;
string strName = "dem.tif";
IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(strName);
Dim t As Type = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory")
Dim pWorkspaceFactory As IWorkspaceFactory = CType(Activator.CreateInstance(t), IWorkspaceFactory)
Dim strPath As String = "D:\Data\tmp"
Dim pRasterWorkspace As IRasterWorkspace = pWorkspaceFactory.OpenFromFile(strPath, 0)
Dim strInName As String = "dem.tif"
Dim pRasterDataset As IRasterDataset = pRasterWorkspace.OpenRasterDataset(strInName)

2.ラスター データセットのセル サイズを取得

投影変換を行う際に、パラメーターとしてラスター データセットのセル サイズが必要になります。今回は、元のラスター データセットのセル サイズを取得し、利用します。

IRasterLayer pRasterLayer = new RasterLayerClass();
pRasterLayer.CreateFromDataset(pRasterDataset);

IRaster pRaster = pRasterLayer.Raster;
IRasterProps pRasterProps = pRaster as IRasterProps;

IPoint pCell = new PointClass();
pCell.X = pRasterProps.MeanCellSize().X;
pCell.Y = pRasterProps.MeanCellSize().Y;
Dim pRasterLayer As IRasterLayer = New RasterLayer
pRasterLayer.CreateFromDataset(pRasterDataset)

Dim pRaster As IRaster = pRasterLayer.Raster
Dim pRasterProps As IRasterProps = pRaster

Dim pCell As IPoint = New Point
pCell.X = pRasterProps.MeanCellSize.X
pCell.Y = pRasterProps.MeanCellSize.Y

3. 空間参照オブジェクトの作成と投影変換

//新しく定義する座標系を持った空間参照オブジェクトを作成します。今回は、JDG2011 の平面直角座標系第 9 系を指定しています。
System.Type t2 = System.Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
ISpatialReferenceFactory2 pSpatialReferenceFactory = Activator.CreateInstance(t2) as ISpatialReferenceFactory2;
ISpatialReference pSpatialReference = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(6677);

//投影変換には、IRasterGeometryProc::ProjectFast メソッドを使用します。
IRasterGeometryProc pRasterGeomProc = new RasterGeometryProcClass();

//引数に、新しい座標系、リサンプリング タイプ、セル サイズ、元のラスター データセット(IRaster型)を指定します。
pRasterGeomProc.ProjectFast(pSpatialReference, rstResamplingTypes.RSP_NearestNeighbor, pCell, pRaster);
'新しく定義する座標系を持った空間参照オブジェクトを作成します。今回は、JDG2011 の平面直角座標系第 9 系を指定しています。
Dim t2 As Type = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment")
Dim pSpatialRefFactory As ISpatialReferenceFactory = CType(Activator.CreateInstance(t2), ISpatialReferenceFactory)
Dim pSpatialRef As ISpatialReference = pSpatialRefFactory.CreateProjectedCoordinateSystem(6677)

'投影変換には、IRasterGeometryProc::ProjectFast メソッドを使用します。
Dim pRasterGeoProc As IRasterGeometryProc = New RasterGeometryProc

'引数に、新しい座標系、リサンプリング タイプ、セル サイズ、元のラスター データセット(IRaster型)を指定します。
pRasterGeoProc.ProjectFast(pSpatialRef, rstResamplingTypes.RSP_NearestNeighbor, pCell, pRaster)

4. 投影したラスター データセットの出力

//ラスター データセットの出力は IRasterBandCollection::SaveAs メソッドを使用します。IRasterBandCollection は IRaster からキャストが可能です。
IRasterBandCollection pRasterBandCol = pRaster as IRasterBandCollection;
//出力名と出力フォーマット
string strOutName = "output.tif";
string strOutType = "TIFF";
 pRasterBandCol.SaveAs(strOutName, pRasterWorkspace as IWorkspace, strOutType);
'ラスター データセットの出力は IRasterBandCollection::SaveAs メソッドを使用します。IRasterBandCollection は IRaster からキャストが可能です。
Dim pRasterBandCollenction As IRasterBandCollection = pRaster
'出力名と出力フォーマット
Dim strOutName As String = "output.tif"
Dim strOutType As String = "TIFF"
pRasterBandCollenction.SaveAs(strOutName, pRasterWorkspace, strOutType)

備考

インターフェイスの詳細は、下記ヘルプ ページをご参考ください。

IRasterDataset Interface
IRasterProps Interface
IRasterGeometryProc Interface
IRasterBandCollection Interface

メタデータ

機能

種類

製品