YouTube | Facebook | X(Twitter) | RSS

ASCII グリッドをラスターに変換して空間参照を定義

2016/9/1 (木)

'ラスタをASCIIグリッドに変換し、さらに投影法を定義して新しいRasterDatasetを作成するサンプル
'ラスタの設定を変更すると上書きできないので、ASCII変換用に一旦テンポラリのRasterDatasetを作成している
 
Sub subConvertASCII2Raster()
 
'ASCIIファイルフルパス
Dim srcFile As String
srcFile = "F:\My Documents\SpatialData\Raster\ASCII\ASCII_Raster.txt"
 
'RasterDatasetを格納するWorkspace
Dim dstDir As String
dstDir = "F:\My Documents\SpatialData\Raster\ASCII\"
 
'RasterDataset名
Dim dstName As String
dstName = "RasterName"
 
'テンポラリRasterDataset名
Dim dstNameTemp As String
dstNameTemp = "Temp"
 
'RasterConversionOpオブジェクトの作成
Dim pRasterImportOp As IRasterImportOp
Set pRasterImportOp = New RasterConversionOp
 
Dim pRasterWS As IWorkspace
Set pRasterWS = OpenRasterWorkspace(dstDir)
 
Dim pRasterDs As IRasterDataset2
Set pRasterDs = pRasterImportOp.ImportFromASCII(srcFile, pRasterWS, dstNameTemp, "GRID", False)
 
Dim pRasterProps As IRasterProps
Set pRasterProps = pRasterDs.CreateDefaultRaster
 
Dim pRasterBandCollection As IRasterBandCollection
Set pRasterBandCollection = pRasterProps
 
pRasterProps.SpatialReference = fncSpatialReference(esriSRProjCS_JGD2000_Japan_Zone_9, False)
 
Dim pRasterDs2 As IRasterDataset
Set pRasterDs2 = pRasterBandCollection.SaveAs(dstName, pRasterWS, "GRID")
 
Call subDeleteRaster
 
End Sub
 
Sub subDeleteRaster()
 
Dim srcFile As String
srcFile = "F:\My Documents\SpatialData\Raster\ASCII\ASCII_Raster.txt"
 
Dim dstDir As String
dstDir = "F:\My Documents\SpatialData\Raster\ASCII\"
 
Dim dstName As String
dstName = "RasterName"
 
 
Dim dstNameTemp As String
dstNameTemp = "Temp"
 
DeleteRaster dstDir, dstNameTemp
 
End Sub
 
 
Public Function DeleteRaster(dir As String, name As String) As Boolean
    Dim pRDS As IRasterDataset
    Set pRDS = OpenRasterDataset(dir, name)
     
    Dim pDS As IDataset
    Set pDS = pRDS
     
    If pDS.CanDelete = True Then
        pDS.delete
        DeleteRaster = True
    Else
        MsgBox "データセットを削除できません", vbExclamation, "エラー"
    End If
     
End Function
 
Public Function OpenRasterDataset(sDir As String, sName As String) As IRasterDataset
  Dim pRW As IRasterWorkspace
  Set pRW = OpenRasterWorkspace(sDir)
  Set OpenRasterDataset = pRW.OpenRasterDataset(sName)
End Function
 
 
Public Function OpenRasterWorkspace(sDir As String) As IRasterWorkspace
  Dim pRasterWSFact As IWorkspaceFactory
  Set pRasterWSFact = New RasterWorkspaceFactory
  Set OpenRasterWorkspace = pRasterWSFact.OpenFromFile(sDir, 0)
End Function
 
 
Function fncSpatialReference(valType As Variant, blnGeographic As Boolean) As ISpatialReference
  
 'DeveloperHelpから以下を参照
  
 '地理座標系(pcsType)
 'esriSRGeoCSType Contains
 'esriSRGeoCS2Type Constants
 'esriSRGeoCS3Type Constants
  
 '投影座標系(gcsType)
 'esriSRProjCSType Constants
 'esriSRProjCS2Type Constants
 'esriSRProjCS3Type Constants
 'esriSRProjCS4Type Constants
  
 '例
 'valType = esriSRProjCS_JGD2000_Japan_Zone_9     'JGD2000 平面直角座標系第9系
 'valType = esriSRGeoCS_JapanGeodeticDatum2000    'JGD2000 地理座標系
  
 Dim pSpatialReferenceFactory As ISpatialReferenceFactory
 Set pSpatialReferenceFactory = New SpatialReferenceEnvironment
  
 If blnGeographic = True Then
     Dim pGeographicCoordinateSystem As IGeographicCoordinateSystem
     Set pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem(valType)
      
     Set fncSpatialReference = pGeographicCoordinateSystem
      
 Else
     Dim pProjectedCoordinateSystem As IProjectedCoordinateSystem
     Set pProjectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(valType)
  
     Set fncSpatialReference = pProjectedCoordinateSystem
 End If
  
 End Function
  • この記事を書いた人

羽田 康祐

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

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