{
//時計回りでタイポイントを取得
IPointCollection pTiePointCollection;
pTiePointCollection = new MultipointClass();
IPoint[] pPoint = new IPoint[4];
pPoint(0) = new PointClass();
pPoint(1) = new PointClass();
pPoint(2) = new PointClass();
pPoint(3) = new PointClass();
pPoint(0).PutCoords(131.328125, 33.9583333333333);
pPoint(1).PutCoords(131.34375, 33.9583333333333);
pPoint(2).PutCoords(131.34375, 33.9479166666667);
pPoint(3).PutCoords(131.328125, 33.9479166666667);
int i;
for (i = 0; i <= 3; i++) {
pTiePointCollection.AddPoint(pPoint(i));
}
//ラスタのエクステント座標を取得
IWorkspaceFactory pRasterWorkspaceFactory;
pRasterWorkspaceFactory = new RasterWorkspaceFactory();
IRasterWorkspace pRasterWorkspace;
pRasterWorkspace = pRasterWorkspaceFactory.OpenFromFile("E:\\Projects\\Data", 0); //ラスタフォルダ
IRasterDataset2 pRasterDataset;
pRasterDataset = pRasterWorkspace.OpenRasterDataset("50317235.png"); //該当ラスタファイル
//ラスタデータセットからラスタの取得
IRaster pRaster;
pRaster = pRasterDataset.CreateFullRaster;
IRasterProps pRasterProps;
pRasterProps = pRaster;
IPointCollection pRasterPointCollection;
pRasterPointCollection = new Multipoint();
pRasterPointCollection.AddPoint(pRasterProps.Extent.UpperLeft());
pRasterPointCollection.AddPoint(pRasterProps.Extent.UpperRight());
pRasterPointCollection.AddPoint(pRasterProps.Extent.LowerRight());
pRasterPointCollection.AddPoint(pRasterProps.Extent.LowerLeft());
//ジオリファレンス
IRasterGeometryProc pRasterGeometryProc;
pRasterGeometryProc = new RasterGeometryProc();
pRasterGeometryProc.Warp(pRasterPointCollection, pTiePointCollection, esriGeoTransPolyOrder1, pRaster);
pRasterGeometryProc.Register(pRaster);
//ラスタをレイヤに追加
IRasterLayer pRasterLayer;
pRasterLayer = new RasterLayer();
pRasterLayer.Name = pRasterDataset.CompleteName;
pRasterLayer.CreateFromRaster(pRaster);
IMxDocument pMxDocument;
pMxDocument = ThisDocument;
IMap pMap;
pMap = pMxDocument.FocusMap;
pMap.AddLayer(pRasterLayer);
pMxDocument.ActiveView.Refresh();
pMxDocument.UpdateContents();
}
Sub GeoReference_fromLayer()
'時計回りでタイポイントを取得
Dim pTiePointCollection As IPointCollection
Set pTiePointCollection = New MultipointClass()
Dim pPoint(3) As IPoint
Set pPoint(0) = New PointClass()
Set pPoint(1) = New PointClass()
Set pPoint(2) = New PointClass()
Set pPoint(3) = New PointClass()
pPoint(0).PutCoords 131.328125, 33.9583333333333
pPoint(1).PutCoords 131.34375, 33.9583333333333
pPoint(2).PutCoords 131.34375, 33.9479166666667
pPoint(3).PutCoords 131.328125, 33.9479166666667
Dim i As Integer
For i = 0 To 3
pTiePointCollection.AddPoint pPoint(i)
Next i
'ラスタのエクステント座標を取得
Dim pRasterWorkspaceFactory As IWorkspaceFactory
Set pRasterWorkspaceFactory = New RasterWorkspaceFactory
Dim pRasterWorkspace As IRasterWorkspace
Set pRasterWorkspace = pRasterWorkspaceFactory.OpenFromFile("E:\Projects\Data", 0)
Dim pRasterDataset As IRasterDataset2
Set pRasterDataset = pRasterWorkspace.OpenRasterDataset("50317235.png")
'ラスタデータセットからラスタの取得
Dim pRaster As IRaster
' Set pRaster = pRasterDataset.CreateDefaultRaster
Set pRaster = pRasterDataset.CreateFullRaster '変更箇所
Dim pRasterProps As IRasterProps
Set pRasterProps = pRaster
Dim pRasterPointCollection As IPointCollection
Set pRasterPointCollection = New MultipointClass()
With pRasterProps.Extent
pRasterPointCollection.AddPoint .UpperLeft
pRasterPointCollection.AddPoint .UpperRight
pRasterPointCollection.AddPoint .LowerRight
pRasterPointCollection.AddPoint .LowerLeft
End With
'ジオリファレンス
Dim pRasterGeometryProc As IRasterGeometryProc
Set pRasterGeometryProc = New RasterGeometryProc
pRasterGeometryProc.Warp pRasterPointCollection, _
pTiePointCollection, esriGeoTransPolyOrder1, pRaster
pRasterGeometryProc.Register pRaster
'ラスタをレイヤに追加
Dim pRasterLayer As IRasterLayer
Set pRasterLayer = New RasterLayer
pRasterLayer.Name = pRasterDataset.CompleteName
pRasterLayer.CreateFromRaster pRaster
Dim pMxDocument As IMxDocument
Set pMxDocument = ThisDocument
Dim pMap As IMap
Set pMap = pMxDocument.FocusMap
pMap.AddLayer pRasterLayer
pMxDocument.ActiveView.Refresh
pMxDocument.UpdateContents
End Sub