コンテンツにスキップ

FAQ/ 計算領域にshapefileのデータを取り込みたい

土地利用データをshapefile で作成しました。
これをDioVISTAで取り込むことはできますか。

マニュアル/ プロジェクト/ 計算領域/ 土地利用/ インポート には、shapefileの取り込む方法が書かれていませんでした。

回答

DioVISTAでは、shapefileのデータを直接取り込むことができません。

QGIS を使った例を示します。

  1. shapefile を asc 形式に変換します。

    1. QGIS を立ち上げます。対象のshapefileを読み込みます。
    2. メニュー > [ラスタ] > [変換] > [ベクタのラスタ化] を選択します。
      • 出現したダイアログに、下図のように条件を入力します。
      • ここでは座標系が緯度経度系(EPSG:4612)、メッシュサイズ10mの場合を示します。その他の場合については、 水平・鉛直解像度について をご参照ください。
      • [水平方向の解像度] = 0.000125
      • [鉛直方向の解像度] = 8.333333333333333e-05
      • [出力領域] = [....] をクリックし [レイヤの領域を使う] から 変換元のレイヤを選択
      • 無効値がある場合、[固定焼き込み値], [出力バンドに指定nodata値を割り当てる] に無効値を指定してください。
      • 整数の場合は [出力のデータ型] に整数型を、実数の場合は [出力のデータ型] に実数型を指定してください。
      • [GDAL/OGR コンソール] は次のようになりました。
        gdal_rasterize -l __県メッシュ____水系 -a 土地利用_1 -tr 0.000125 8.333333333333333e-05 -a_nodata 0.0 -te 130.0 30.0 130.1 30.1 -ot Int16 -of GTiff C:/temp/__県メッシュ____水系.shp C:/.../OUTPUT.tif
    3. メニュー > [ラスタ] > [変換] > [形式変換] を選択します。
      • 出現したダイアログに、下図のように条件を入力します。
      • [出力のCRSを上書きする] = [デフォルトCRS: EPSG:4326 - WGS 84]
      • [出力レイヤ] = [...] > [ファイルに保存...] > C:/temp/landusemesh.asc
      • [GDAL/OGR コンソール] は次のようになりました。
        gdal_translate -a_srs EPSG:4326 -of AAIGrid C:/.../OUTPUT.tif C:/temp/landusemesh.asc
  2. DioVISTAのプロジェクトを作成します。

    1. DioVISTAを立ち上げます。
    2. [メニュー] > [テンプレートから新規作成] > [緯度経度座標] を選択します。
    3. プロジェクトを保存します。
      • ここでは フォルダ C:\Temp\新規プロジェクト1 として保存し、プロジェクトファイル C:\Temp\新規プロジェクト1\新規プロジェクト1.fsxproj ができたとします。
  3. 作成したDioVISTAのプロジェクトに、計算領域を作成します。

    1. 次のPowerShellスクリプトをファイルに保存します。

      • 下記スクリプトをコピーしてメモ帳 (notepad.exe) に貼り付けます。
      • メモ帳で、変数 $projFile, $outProjFile, $ascFile, $meshSize, $centerLatitude を設定します(下記スクリプトでハイライトされているそれぞれの行の、= の右側の値を編集します)。
      • メモ帳で [メニュー] > [ファイル] > [名前を付けて保存] を選択し、フォルダ C:\Temp\新規プロジェクト1 にファイル ImportFromAsc-ToFsxproj.ps1 として保存します。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      # 取り込み先のプロジェクトファイルを指定します. 
      # このファイルに ASC ファイルを取り込みます。
      $projFile = ".\新規プロジェクト1.fsxproj"
      
      # 保存先のプロジェクトファイルを指定します(フルパスで指定).
      # ASC ファイルを取り込んだ結果を、このファイル名で保存します。
      $outProjFile = "C:\temp\新規プロジェクト2.fsxproj"
      
      # Esri Raster ASC ファイルを指定します
      $ascFile = "C:\temp\landusemesh.asc"
      
      # メッシュサイズを指定します. 
      # 選択肢: 5, 10, 25
      $meshSize = 10
      
      # 中心の緯度を指定します. 
      # 選択肢: 緯度 20 度から50度まで、1/3度単位
      # 20.000000, ..., 35.000000, 35.333334, 35.666667, ..., 50.000000 のいずれか
      $centerLatitude = 35.000000
      
      # メッシュ解像度情報のcsvファイルを指定します.
      $meshResolutionsCsv = ".\meshResolutions.csv"
      
      
      $asc = cat -Encoding utf8 $ascFile
      [int] $ncols = (($asc | ? { $_ -match "^ncols" } ) -split " +")[1]
      [int] $nrows = (($asc | ? { $_ -match "^nrows" } ) -split " +")[1]
      [double] $xllcorner = (($asc | ? { $_ -match "^xllcorner" } ) -split " +")[1]
      [double] $yllcorner = (($asc | ? { $_ -match "^yllcorner" } ) -split " +")[1]
      [double] $dx = (($asc | ? { $_ -match "^dx" } ) -split " +")[1]
      [double] $dy = (($asc | ? { $_ -match "^dy" } ) -split " +")[1]
      
      $DEG2RAD = [math]::PI / 180
      $x0 = $xllcorner * $DEG2RAD
      $y0 = $yllcorner * $DEG2RAD
      $x1 = ($xllcorner + $dx * $ncols) * $DEG2RAD
      $y1 = ($yllcorner + $dy * $nrows) * $DEG2RAD
      $resols = Import-Csv -Encoding utf8 $meshResolutionsCsv | % {
          [double] $_.lat = $_.lat
          [double] $_.hScale = $_.hScale
          [double] $_.vScale = $_.vScale
          $_
      }
      $resol = $resols | sort -Property @{Expression = { [math]::Abs($_.lat - $centerLatitude) }; } | select -First 1
      $hScale = $resol.hScale
      $vScale = $resol.vScale
      $ox = $xllcorner * $DEG2RAD * $hScale
      $oy = ($yllcorner - $centerLatitude) * $DEG2RAD * $vScale
      
      [xml] $xml = cat -Encoding utf8 $projFile
      $xCalcDomain = $xml.CreateElement("calcDomain")
      if ($null -ne $xml.floodSim.conditions.calcDomains) {
          $xml.floodSim.conditions.calcDomains.IsEmpty = $true
      }
      [void]$xml.floodSim.conditions.calcDomains.AppendChild($xCalcDomain)
      $attrs = @{
          "name"              = "計算領域1"
          "valid"             = "True"
          "inlandWatersAsSea" = "False"
          "lineStyle"         = "0 2 128 64 0 192"
          "gridLineStyle"     = "0 1 128 128 128 192"
      }
      $attrs.GetEnumerator() | % {
          $xAttr = $xml.CreateAttribute($_.Name)
          $xAttr.Value = $_.Value
          [void]$xCalcDomain.Attributes.Append($xAttr)
      }
      $xPts = $xml.CreateElement("pts")
      [void]$xCalcDomain.AppendChild($xPts)
      $coords = (($y0, $x0), ($y0, $x1), ($y1, $x1), ($y1, $x0))
      foreach ($coord in $coords) {
          $xCoord = $xml.CreateElement("coord")
          [void]$xPts.AppendChild($xCoord)
          $xCoordNode = $xml.CreateTextNode(("{0} {1}" -f $coord[0], $coord[1]))
          [void]$xCoord.AppendChild($xCoordNode)
      }
      $xMeshResolution = $xml.CreateElement("meshResolution")
      [void]$xCalcDomain.AppendChild($xMeshResolution)
      $attrs = @{
          "name"           = ("{0}m" -f $meshSize)
          "active"         = "True"
          "coordMode"      = "1"
          "utmZone"        = "0"
          "centerLatitude" = $centerLatitude
          "meshOrigin"     = ("{0} {1}" -f $ox, $oy)
          "meshSize"       = $meshSize
          "dims"           = ("{0} {1}" -f $nrows, $ncols)
      }
      $attrs.GetEnumerator() | % {
          $xAttr = $xml.CreateAttribute($_.Name)
          $xAttr.Value = $_.Value
          [void]$xMeshResolution.Attributes.Append($xAttr)
      }
      $xml.Save($outProjFile)
      
    2. meshResolutions.csv を フォルダ C:\Temp\新規プロジェクト1 に保存します。

    3. Poweshellを実行します。
      1
      2
      cd 'C:\Temp\新規プロジェクト1'
      .\ImportFromAsc-ToFsxproj.ps1
      
  4. DioVISTAのプロジェクトに、ascファイルを取り込みます。

    1. [プロジェクト] > [計算領域] > [計算領域1] > [10m] を右クリックし、 [土地利用メッシュを追加] を選択します。
    2. 追加された [土地利用] を右クリックし、 [インポート] を選択します。
    3. ステップ1で作成したascファイルを選択します。データが取り込まれました。
      • ここでは10mメッシュの [土地利用] をインポートする手順を示しましたが、同様の手順で、5m, 10m, 25mメッシュサイズの [地形], [粗度], [空隙率], [透過率X], [透過率Y], [土地利用] を読み込むことができます。

水平・鉛直解像度について

  • 元データの座標系が緯度経度系の場合
    • 元データの座標系が、EPSG:4326, EPSG:4612 or EPSG:6668などの場合です。
    • [水平方向の解像度] および [鉛直方向の解像度] は、メッシュの大きさを度で指定してください。
    • よく使われるメッシュサイズについては、 3次メッシュ分割数 の [経度(度)] および [緯度(度)] を参照してください。
  • 元データの座標系が平面直角座標系の場合
    • 元データの座標系が、いわゆる19座標, EPSG:2443 - EPSG:2461 or EPSG:6669 - EPSG:6687などの場合です。
    • [水平方向の解像度] および [鉛直方向の解像度] は、元データのメッシュサイズをmで指定してください。
    • 投影変換(gdalwarp)を行います。[メニュー] > [投影法] > [再投影] で出現したダイアログに、次の指定を行います。
      • [変換先のCRS] = [既定のCRS: EPSG:4326 - WGS 84]
      • [リサンプリング法] = [平均(Average)]
      • [追加のコマンドラインパラメータ] = [-tr 0.0003125 2.083333333333333e-4]
        (※25mメッシュの場合。その他のメッシュについては 3次メッシュ分割数 の [経度(度)] および [緯度(度)] を参照してください。)

関連項目


最終更新日: 2023-11-24