init
This commit is contained in:
commit
ff8244896a
5 changed files with 1720 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
data/
|
1593
Manifest.toml
Normal file
1593
Manifest.toml
Normal file
File diff suppressed because it is too large
Load diff
5
Project.toml
Normal file
5
Project.toml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[deps]
|
||||||
|
EzXML = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615"
|
||||||
|
GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a"
|
||||||
|
IterTools = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
|
||||||
|
ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"
|
12
README.md
Normal file
12
README.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# 河川情報プロット
|
||||||
|
|
||||||
|
国土数値情報の河川データをプロットする
|
||||||
|
|
||||||
|
https://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-W05.html
|
||||||
|
|
||||||
|
```julia
|
||||||
|
includet("main.jl") # with Revise
|
||||||
|
xml = readxml("path/to/xml")
|
||||||
|
gb02s = get_datasets_objs(xml.root) |> get_gb
|
||||||
|
plot(gb02s)
|
||||||
|
```
|
109
main.jl
Normal file
109
main.jl
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
using EzXML
|
||||||
|
using GLMakie
|
||||||
|
using ProgressMeter
|
||||||
|
|
||||||
|
function get_datasets_objs(root_node::EzXML.Node)
|
||||||
|
findfirst("/ksj:GI/dataset/ksj:object/ksj:AA01/ksj:OBJ", root_node)
|
||||||
|
end
|
||||||
|
|
||||||
|
struct GmPoint
|
||||||
|
"PT_00000 or p000000"
|
||||||
|
id::String
|
||||||
|
"Latitude N=+"
|
||||||
|
lat::Float64
|
||||||
|
"Longitude E=+"
|
||||||
|
lon::Float64
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_coord(node_gm_point)
|
||||||
|
node_coords = findall("./jps:GM_Point.position/jps:DirectPosition/DirectPosition.coordinate", node_gm_point)
|
||||||
|
@assert length(node_coords) == 1
|
||||||
|
node_coords = first(node_coords)
|
||||||
|
x_s, y_s = split(node_coords.content)
|
||||||
|
parse(Float64, x_s), parse(Float64, y_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_points(node_objs)
|
||||||
|
T_POINT = Tuple{Float64,Float64}
|
||||||
|
points = Dict{String,T_POINT}()
|
||||||
|
for node in elements(node_objs)
|
||||||
|
if node.name != "GM_Point"
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
push!(points, node["id"] => get_coord(node))
|
||||||
|
end
|
||||||
|
points
|
||||||
|
end
|
||||||
|
|
||||||
|
struct GmCurve
|
||||||
|
id::String
|
||||||
|
pos_array::Vector{Tuple{Float64,Float64}}
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_curves(node_objs)
|
||||||
|
gm_points = get_points(node_objs)
|
||||||
|
curves = Dict{String,Vector{Tuple{Float64,Float64}}}()
|
||||||
|
for node in elements(node_objs)
|
||||||
|
if node.name != "GM_Curve"
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
points = let
|
||||||
|
node_segment = findfirst("./jps:GM_Curve.segment", node)
|
||||||
|
@assert length(elements(node_segment)) == 1
|
||||||
|
node_points = elements(findfirst("./jps:GM_LineString.controlPoint/jps:GM_PointArray", node_segment |> elements |> first))
|
||||||
|
map(node_points) do node_point
|
||||||
|
@assert length(elements(node_point)) == 1
|
||||||
|
node_pos = elements(node_point) |> first
|
||||||
|
if node_pos.name == "GM_Position.direct"
|
||||||
|
x_s, y_s = findfirst("./DirectPosition.coordinate", node_pos).content |> split
|
||||||
|
parse(Float64, x_s), parse(Float64, y_s)
|
||||||
|
elseif node_pos.name == "GM_Position.indirect"
|
||||||
|
idref = findfirst("./GM_PointRef.point", node_pos)["idref"]
|
||||||
|
gm_points[idref]
|
||||||
|
else
|
||||||
|
error("Unexpected GM_Position type $(node_pos)")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
push!(curves, node["id"] => points)
|
||||||
|
end
|
||||||
|
curves
|
||||||
|
end
|
||||||
|
|
||||||
|
@kwdef struct Gb02
|
||||||
|
id::String
|
||||||
|
loc::GmCurve
|
||||||
|
"RIN"
|
||||||
|
name::String
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_gb02(node_objs)
|
||||||
|
gm_curves = get_curves(node_objs)
|
||||||
|
gb02s = Vector{Gb02}()
|
||||||
|
for node in elements(node_objs)
|
||||||
|
if node.name != "GB02"
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
curve_ref = findfirst("./ksj:LOC", node)["idref"]
|
||||||
|
push!(gb02s, Gb02(id=node["id"], loc=GmCurve(curve_ref, gm_curves[curve_ref]), name=findfirst("./ksj:RIN", node).content))
|
||||||
|
end
|
||||||
|
gb02s
|
||||||
|
end
|
||||||
|
|
||||||
|
function plot(gb02s)
|
||||||
|
fig = Figure(; fonts=(; bold="Noto Sans CJK JP Bold", regular="Noto Sans CJK JP"))
|
||||||
|
# boundary = ((130.3, 130.7), (33.2, 33.5))
|
||||||
|
ax = Axis(fig[1, 1], aspect=nothing#= , limits=boundary =#)
|
||||||
|
@showprogress for (_i, gb02) in enumerate(gb02s)
|
||||||
|
pos = gb02.loc.pos_array .|> (((x, y),) -> (y, x))
|
||||||
|
# if !all(pos) do (x, y)
|
||||||
|
# boundary[1][1] < x < boundary[1][2] && boundary[2][1] < y < boundary[2][2]
|
||||||
|
# end
|
||||||
|
# continue
|
||||||
|
# end
|
||||||
|
lines!(ax, pos)
|
||||||
|
text!(ax, last(pos)[1], last(pos)[2]; text=gb02.name)
|
||||||
|
# display(fig)
|
||||||
|
end
|
||||||
|
fig
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue