FAQ/ 左岸線・右岸線のshapefileを取り込みたい¶
河川の左岸線・右岸線を、shapefile に取り込む方法を教えてください。
DioVistaでは、shapefileファイルは表示のみに使われ、プロジェクトデータとして取り込む機能が提供されていません。
shapefile データをプロジェクトに取り込むための方法はありますでしょうか。なお、対象データは、.dbf, .prj, .shp, .shx の4つのファイルから構成されています。
回答¶
河心線・河岸線の要件
DioVISTAでは、左右岸線および河心線が次のようになっている必要があります。
- 下流から上流に向かっていること
- 1個のポリラインになっていること
以下に示す例では、shapefile 内で対象の河川名のポリラインが出現する順につないで、1個のポリラインにします。元データの shapefile で上記の要件が満たされていない場合、意図したとおりに河川を作ることができないこともあります。
次のステップで取り込んでください。
-
shapefile を geojson に変換します。QGIS を例に説明します。
- 対象の shapefile をQGISにドラッグ&ドロップします。
- 対象の shapefile を右クリックし、[エクスポート] > [地物の保存] を選択します。
- [ベクタレイヤを名前を付けて保存] ダイアログで、geojson 形式でエクスポートします。[CRS] は、[EPSG: 4326 - WGS 84] にしてください。
- 河心線の geojson の例です。
1 2
{ "type": "Feature", "properties": { "W05_004": "OO川", }, "geometry": { "type": "MultiLineString", "coordinates": [ [ [ 133.000, 34.000 ], [ 133.001, 34.001 ], [ 133.002, 34.002 ] ] ] } } ...
- 左右岸線の geojson の例です。
1 2
{ "type": "Feature", "properties": { "河川名": "OO川", "左右岸": "左岸" }, "geometry": { "type": "MultiLineString", "coordinates": [ [ [ 133.000, 34.000 ], [ 133.001, 34.001 ], [ 133.002, 34.002 ] ] } } ...
-
PowerShell スクリプトを作ります。ImportFrom-GeojsonToFsxprojDRiver.ps1 として保存します。
スクリプトファイルのエンコーディング
PowerShell 5 をお使いの場合は UTF16 エンコーディングで保存してください。
PowerShell 7 をお使いの場合は UTF8 エンコーディングで保存してください。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 95 96 97 98 99 100 101 102 103 104 105 106
# 設定 ここから # 河川データを取り込む先のプロジェクトファイルを指定します。 $projPath = ".\sample.fsxproj" # プロジェクトファイルの保存先を指定します。(フルパスで指定します)。 $projOutPath = "C:\Temp\sample1.fsxproj" # 左右岸線の geojson を指定します。 $lines_lr = ".\lines_lr.json" # 河心線の geojson を指定します。 $lines_center = ".\lines_center.json" # 設定 ここまで [xml]$xml = cat -Encoding utf8 $projPath $lrLines = cat -Encoding utf8 $lines_lr | ConvertFrom-Json $centerLines = cat -Encoding utf8 $lines_center | ConvertFrom-Json $rivers = $lrLines.properties."河川名" | select -Unique $riverId = $xml.floodSim.conditions.diffusionalRivers.diffusionalRiver.Length foreach ($river in $rivers) { $xDiffusionalRiver = $xml.CreateElement("diffusionalRiver") [void]$xml.floodSim.conditions.diffusionalRivers.AppendChild($xDiffusionalRiver) # 河川の属性 $attrs = @{ "name" = $river "riverId" = $riverId "viewItems" = "8191" "inflow" = "1 0 0" "downstreamToeWaterLevel" = "0" "closeDownstreamToe" = "False" "enableConnectionToDrain" = "True" "maxTransverseInterval" = "100" "depthValidMin" = "0.01" "areaValidMin" = "0.003" "onewayRtoP" = "False" "prConnExpressionOfRiverLine" = "0" "riverWallAllowReverseOverFlow" = "False" "valid" = "True" "centerLineStyle" = "0 2 0 0 255 255" "leftLineStyle" = "0 2 51 102 255 255" "rightLineStyle" = "0 2 255 153 204 255" "transverseLineStyle" = "0 1 255 153 0 255" "riverWallLineStyle" = "0 4 204 255 204 192" "flowGraphMin" = "" "flowGraphMax" = "" "upperRiverId" = "-1" "upperRiverDistance" = "0" "confluenceIsLeft" = "False" "upperRiverIsLeft" = "False" "mainstreamRiverId" = "-1" "mainstreamRiverDistance" = "0" "distributaryIsLeft" = "False" "mainstreamRiverIsLeft" = "False" "distributaryRatio" = "0" "distributaryLimit" = "" "steadyFlowAlpha" = "1" "steadyFlowBeta" = "1" "initialPrecip" = "" "precipCorrectionFactor" = "" "watershedDelineationOnly" = "False" "conditionalInflow" = "False" } $attrs.GetEnumerator() | % { $xAttr = $xml.CreateAttribute($_.Name) $xAttr.Value = $_.Value [void]$xDiffusionalRiver.Attributes.Append($xAttr) } # 左右岸線 $sides = @{ "elementName" = "leftLine" "shapefileProperty" = "左岸" }, @{ "elementName" = "rightLine" "shapefileProperty" = "右岸" } foreach ($side in $sides) { $xLine = $xml.CreateElement($side.elementName) [void]$xDiffusionalRiver.AppendChild($xLine) $lrLine = $lrLines | ? { $_.properties."河川名" -eq $river -and $_.properties."左右岸" -eq $side.shapefileProperty } foreach ($coords in $lrLine.geometry.coordinates) { foreach ($coord in $coords) { $lon = ($coord[0] * [Math]::PI / 180.0) $lat = ($coord[1] * [Math]::PI / 180.0) $xCoordNode = $xml.CreateTextNode(("{0:0.000000000000000} {1:0.000000000000000}" -f $lat, $lon)) $xCoord = $xml.CreateElement("coord") [void]$xCoord.AppendChild($xCoordNode) [void]$xLine.AppendChild($xCoord) } } } # 河心線 $xCenterLine = $xml.CreateElement("centerLine") [void]$xDiffusionalRiver.AppendChild($xCenterLine) foreach ($centerLine in ($centerLines | ? { $_.properties."W05_004" -eq $river } )) { foreach ($coords in $centerLine.geometry.coordinates) { foreach ($coord in $coords) { $lon = ($coord[0] * [Math]::PI / 180.0) $lat = ($coord[1] * [Math]::PI / 180.0) $xCoordNode = $xml.CreateTextNode(("{0:0.000000000000000} {1:0.000000000000000}" -f $lat, $lon)) $xCoord = $xml.CreateElement("coord") [void]$xCoord.AppendChild($xCoordNode) [void]$xCenterLine.AppendChild($xCoord) } } } $riverId++ } $xml.Save($projOutPath)
-
PowerShell スクリプトを実行します。作成されたプロジェクトが "C:\Temp\sample1.fsxproj" として保存されました。
関連項目¶
最終更新日:
2023-03-20