{ //時計回りでタイポイントを取得 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