FAQ/ 計算領域にshapefileのデータを取り込みたい¶
土地利用データをshapefile で作成しました。
これをDioVISTAで取り込むことはできますか。
マニュアル/ プロジェクト/ 計算領域/ 土地利用/ インポート には、shapefileの取り込む方法が書かれていませんでした。
回答¶
DioVISTAでは、shapefileのデータを直接取り込むことができません。
QGIS を使った例を示します。
-
shapefile を asc 形式に変換します。
- QGIS を立ち上げます。対象のshapefileを読み込みます。
- メニュー > [ラスタ] > [変換] > [ベクタのラスタ化] を選択します。
- 出現したダイアログに、下図のように条件を入力します。
- ここでは座標系が緯度経度系(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
- メニュー > [ラスタ] > [変換] > [形式変換] を選択します。
- 出現したダイアログに、下図のように条件を入力します。
- [出力の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
-
DioVISTAのプロジェクトを作成します。
- DioVISTAを立ち上げます。
- [メニュー] > [テンプレートから新規作成] > [緯度経度座標] を選択します。
- 出現したダイアログに、[中心緯度] を入力します。ここで、1/3度単位の値を入れてください。(35, 35.333334, 35.666667 など)
- 参考: マニュアル/ メニューバー/ ファイル/ テンプレートから新規作成/ 緯度経度座標
- プロジェクトを保存します。
- ここでは フォルダ
C:\Temp\
に新規プロジェクト1
として保存し、プロジェクトファイルC:\Temp\新規プロジェクト1\新規プロジェクト1.fsxproj
ができたとします。
- ここでは フォルダ
-
作成したDioVISTAのプロジェクトに、計算領域を作成します。
-
次の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)
- 下記スクリプトをコピーしてメモ帳 (
-
meshResolutions.csv を フォルダ
C:\Temp\新規プロジェクト1
に保存します。 - Poweshellを実行します。
1 2
cd 'C:\Temp\新規プロジェクト1' .\ImportFromAsc-ToFsxproj.ps1
-
-
DioVISTAのプロジェクトに、ascファイルを取り込みます。
- [プロジェクト] > [計算領域] > [計算領域1] > [10m] を右クリックし、 [土地利用メッシュを追加] を選択します。
- 追加された [土地利用] を右クリックし、 [インポート] を選択します。
- ステップ1で作成したascファイルを選択します。データが取り込まれました。
- ここでは10mメッシュの [土地利用] をインポートする手順を示しましたが、同様の手順で、5m, 10m, 25mメッシュサイズの [地形], [粗度], [空隙率], [透過率X], [透過率Y], [土地利用] を読み込むことができます。
水平・鉛直解像度について¶
- 元データの座標系が緯度経度系の場合
- 元データの座標系が平面直角座標系の場合
- 元データの座標系が、いわゆる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