CoordVisualize/main.jl
2023-10-22 19:26:46 +09:00

154 lines
3.9 KiB
Julia

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
scatter!(
ax,
coords[:, 1],
coords[:, 3],
color = get(color_v, coords[:, 2], (hmin, hmax)),
markersize = 3,
label = "railway",
inspector_label = (plot, index, position) -> begin
"""
x: $(coords[index, 1])
y: $(coords[index, 2])
z: $(coords[index, 3])
"""
end,
)
lines!(
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,
)
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