From ace3bd5af7e774d40e4a5b60f6e33c0fd10e61d1 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Sat, 21 Oct 2023 21:01:07 +0900 Subject: [PATCH] init --- main.jl | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 main.jl diff --git a/main.jl b/main.jl new file mode 100644 index 0000000..7ca19c4 --- /dev/null +++ b/main.jl @@ -0,0 +1,140 @@ +using GLMakie +using ColorSchemes +using FileIO + +function get_coord_traces() + coords_traces = [] + coords_trace = [] + is_tracing = false + for (i, l) in enumerate(readlines("coord_log.txt")) + # skip logs not from coordinates + if match(r"^\[TRACECOORDS\]", l) |> isnothing + continue + end + if !is_tracing + if match(r"Logging starting", l) |> !isnothing + # @info "Logging started: $i" + is_tracing = true + empty!(coords_trace) + end + else + if match(r"Logging stopping", l) |> !isnothing + # @info "Logging stopped: $i" + is_tracing = false + push!(coords_traces, mapreduce(permutedims, vcat, coords_trace)) + continue + end + # skip non coordinates + if match(r"Coordinate:", l) |> isnothing + continue + end + coord = match(r"\(.*\)", l).match |> + (s -> split(s[2:end-1], ',')) .|> + (x -> parse(Float64, x)) + push!(coords_trace, coord) + # @info length(coords_trace) + end + end + return coords_traces +end + +coords_traces = get_coord_traces() + +coords = readchomp("coord_log.txt") |> + (s -> split(s, '\n')) |> + (vs -> filter(s -> match(r"^\[TRACECOORDS\]", s) |> !isnothing, vs)) |> + (vs -> filter(s -> match(r"Coordinate:", s) |> !isnothing, vs)) .|> + (s -> match(r"\(.*\)", s).match) .|> + (s -> begin + s[2:end-1] |> + (s -> split(s, ',')) .|> + (x -> parse(Float64, x)) + end) |> + (x -> mapreduce(permutedims, vcat, x)) + + +# fig = Figure() +# ax = Axis3(fig[1, 1]) +# scatterlines!( +# ax, +# coords[:, 1], +# - coords[:, 2], +# coords[:, 3] +# ) +# DataInspector(fig) +# +# fig + + +img = load("map.png") +yl, xl = size(img) +@assert xl % 2 == 0 && yl % 2 == 0 +xmin, xmax = extrema([- xl ÷ 2, xl ÷ 2, floor(Int64, minimum(coords[:, 1])), ceil(Int64, maximum(coords[:, 1]))]) +ymin, ymax = extrema([- yl ÷ 2, yl ÷ 2, floor(Int64, minimum(coords[:, 2])), ceil(Int64, maximum(coords[:, 2]))]) +margin = 30 +fig2 = Figure( + # ; resolution = (xmax - xmin + 10margin + 50, ymax - ymin + 10margin) +) +fig = Figure() +hmin, hmax = coords_traces .|> (m -> m[:, 2]) |> Iterators.flatten |> extrema +hconvert(h) = (h - hmin) / (hmax - hmin) +color_v = ColorSchemes.colorschemes[:roma] +# ga = fig[1, 1] = GridLayout() +# gb = fig[1, 2] = GridLayout() +ax = Axis( + fig2[1, 1], + xlabel = "x", + ylabel = "z", + aspect = DataAspect(), + alignmode = Outside(margin), +) +ax3 = Axis3(fig[1, 1], aspect = :data) +xs = -xl ÷ 2:1:xl ÷ 2 +ys = -yl ÷ 2:1:yl ÷ 2 +heatmap!( + ax, + xs, ys, + rotr90(img), + inspectable = false, +) +heatmap!( + ax3, + xs, ys, + rotr90(img), + inspectable = false, +) +# translate!(fig2.scene, -400, 0, 400) +for coords in coords_traces + scatterlines!( + ax, + coords[:, 1], + coords[:, 3], + color = get(color_v, coords[:, 2], (hmin, hmax)), + markersize = 3, + label = "railway", + # inspector_label = (plot, index, position) -> begin + # "($(coords[index, 1]), $(coords[index, 2]), $(coords[index, 3]))" + # end, + inspector_label = (_, _, _) -> "nothing", + ) + scatterlines!( + ax3, + coords[:, 1], + coords[:, 3], + coords[:, 2], + ) +end +Colorbar( + fig2[1, 2], + colormap = :roma, + limits = (hmin, hmax), + label = "y", + alignmode = Outside(margin), +) +[Box( + fig2[1, i], + color = :transparent, + strokecolor = :red, +) for i in 1:2] +DataInspector(fig2) +fig2