コンテンツにスキップ

FAQ/ 河川の粗度係数を一括で変更したい

河川の粗度係数を距離標ごとに一括で変更する方法はないでしょうか?

回答

DioVISTAの画面上で河川の粗度係数を一括で変更する機能はございません。ただし、PowerShellを用いて対象のプロジェクトファイル(.fsxproj)を編集することにより、粗度係数を一括で変更することができます。

手順

1 インストールと起動

まず、FAQ/ PowerShell入門を参考に、PowerShellWindows Terminalをインストールします。 インストールが完了したら、Windows Terminal を起動します。

2 CSVの作成

次のコードをコピーして、メモ帳などで編集します。次の項目を適宜書き換えてください。

a 書き換える対象のDioVISTAプロジェクトファイルをフルパスで指定します。

1行目の"C:\temp\sample.fsxproj" を書き換えてください。

b 作成する CSVファイルをフルパスで指定します。

15行目の"C:\temp\riverRoghness.csv" を書き換えてください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$proj = "C:\temp\sample.fsxproj"
[xml]$xml = Get-Content $proj
$recs = @()
$xml.floodSim.conditions.diffusionalRivers.diffusionalRiver | % {
    $riverName = $_.name
    $_.transverseLines.transverseLine | % {
        $recs += [ordered]@{
            riverName = $riverName
            id  = $_.id
            distance  = $_.distance
            roughness = "0.03"
        }
    }
}
$recs | ConvertTo-Csv -UseQuotes AsNeeded | Out-File -Encoding utf8BOM "C:\temp\riverRoghness.csv"

書き換え後にWindowsTerminalに貼り付け、PowerShellで実行すると、例:"C:\temp\riverRoghness.csv"のようにCSVファイルが出力されます。

3 CSVの編集

Excel などで "riverRoghness.csv" を開き、roughnessカラムの値を編集します。 なお、riverNameは河川名、idは横断id、distanceは距離標、roughnessは粗度係数です。

図:riverRoghness.csvの例

4 CSVの取り込み

次のコードをコピーして、メモ帳などで編集します。 次の項目を適宜書き換えてください。

a 先ほど編集したCSVファイルをフルパスで指定します。

1行目の"C:\temp\riverRoghness.csv" を書き換えてください。

b 作成する DioVISTAプロジェクトファイルをフルパスで指定します。

22行目の"C:\temp\sample1.fsxproj" を書き換えてください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$recs = Import-Csv "C:\temp\riverRoghness.csv"
$recs | % {
    $found = $false
    $rec = $_
    $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver | ? { 
        $_.name -eq $rec.riverName 
    } | % {
        $_.transverseLines.transverseLine | ? {
            $_.id -eq $rec.id
        } | % {
            $_.point
            | % { 
                $_.roughness = $rec.roughness 
                $found = $true
            } 
        }
    }
    if (-not $found) {
        Write-Error ("該当するXML要素が見つかりません: {0},{1},{2},{3}" -f $rec.riverName, $rec.id, $rec.distance, $rec.roughness)
    }
}
$xml.Save("C:\temp\sample1.fsxproj")

書き換え後にWindowsTerminalに貼り付け、PowerShellで実行すると、例:"C:\temp\sample1.fsxproj" のように粗度係数が変更されたプロジェクトファイル(.fsxproj)が出力されます。

関連項目


最終更新日: 2024-05-20