コンテンツにスキップ

FAQ/ カルバートデータをDioVISTAにインポートするPowerShellスクリプト

盛土データをDioVISTAにインポートするPowerShellスクリプト と同様に、カルバートを一括で取り込む方法はありますか。

回答

以下のPowerShellスクリプトを試してください。

 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
#プロジェクトに盛土を追加するスクリプト
# プロジェクトファイルを指定する(入力)
$fsxproj = ".\sample.fsxproj"

# プロジェクトファイルを指定する(出力)
$newFsxproj = ".\sample_addCulvert.fsxproj"

# csvファイルを指定する(入力)
$csv = Import-Csv -Encoding UTF8 ".\Culvert.csv"

#プロジェクトの読み込み
$fsxprojInfo = Get-Item $fsxproj
[xml]$xml = (cat -Encoding UTF8 $fsxproj)

# Culvert.csvから読み込んだデータをカルバートとしてプロジェクトに追加
foreach ($id in ($csv | select -Unique "ID")) {
    $CoordInfos = $csv | where { $_.ID -eq $id.ID }
    $firstCoordInfo = $CoordInfos[0]
    $newCulvert = $xml.CreateElement("culvert")
    [void]$xml.floodSim.conditions.culverts.AppendChild($newCulvert)

    $attrs = @{
        "name"       = "カルバート" + $firstCoordInfo.ID.ToString()
        "mode"       = "0"
        "width"      = $firstCoordInfo.Width.ToString()
        "height"     = $firstCoordInfo.Height.ToString()
        "diameter"   = "1"
        "length"     = "1"
        "roughness"  = "0.014"
        "lossCoef"   = "1"
        "valid"      = "True"
        "lineStyle"  = "0 2 200 100 0 255"
    }
    $attrs.GetEnumerator() | % {
        $newAttribute = $xml.CreateAttribute($_.Name)
        $newAttribute.Value = $_.Value
        [void]$newCulvert.Attributes.Append($newAttribute)
    }

    $newPts = $xml.CreateElement("pts")
    [void]$newCulvert.AppendChild($newPts)
    foreach ($coordInfo  in $CoordInfos) {
        $coords = @{
            x = $coordInfo.X0
            y = $coordInfo.Y0
        },
        @{
            x = $coordInfo.X1
            y = $coordInfo.Y1
        }
        foreach($c in $coords){
            $coordText = "{0:0.000000000000000} {1:0.000000000000000}" -f ([double]$c.y * [Math]::PI / 180.0), ([double]$c.x * [Math]::PI / 180.0)
            $coordValue = $xml.CreateTextNode($coordText)
            $newCoord = $xml.CreateElement("coord")
            [void]$newCoord.AppendChild($coordValue)
            [void]$newPts.AppendChild($newCoord)
        }
    }
}
$xml.Save((Join-Path $fsxprojInfo.DirectoryName $newFsxproj))

盛土のデータの例を示します。これをテキストエディタに貼り付け "Culvert.csv" として保存します。エンコーディングはUTF8とします。

1
2
3
4
ID,X0,Y0,X1,Y1,Width,Height
1,140,36,140.001,36.001,1,2
2,140.002,36,140.002,36.001,2,3
3,140.003,36,140.004,36.001,3,4
カラム 内容
ID カルバートID
X0 始点の経度(degree)
Y0 始点の緯度(degree)
X1 終点の経度(degree)
Y1 終点の緯度(degree)
Width 幅(m)
Height 高さ(m)

スクリプトを実行すると、カルバート1, カルバート2, およびカルバート3が作られます。画面左から、カルバート1、カルバート2、およびカルバート3です。

「カルバート1」のプロパティを示します。

関連項目


最終更新日: 2022-07-08