YouTube | Facebook | X(Twitter) | RSS

ファイル ジオデータベースへラスター データセットを作成

2016/9/1 (木)

//設定値
string Name = "";
double PointX = -180.00000101746991;
double PointY = -90.000001068692526;
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;
 
//IRasterEdit::Write()を使用した方法(セルサイズが大きすぎるとメモリエラーとなる)
//IPnt pSize = new PntClass();
//pSize.SetCoords(lngCol, lngRow);
 
//IPixelBlock pPixcelBlock = pRaster.CreatePixelBlock(pSize);
 
//IPnt pWritePnt = new PntClass();
//pWritePnt.SetCoords(0,0);
 
//IRasterEdit pRasterEdit = (IRasterEdit)pRaster;
//pRasterEdit.Write(pWritePnt,pPixcelBlock);
 
//変更したセルサイズをRasterDatasetに反映(モザイクを使用)
IRasterDatasetEdit pRasterDatasetEdit = (IRasterDatasetEdit)pRasterDataset;
pRasterDatasetEdit.Mosaic(pRaster, 0);
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-,