Skip to content

Commit 556372c

Browse files
committed
add spatial index building gif
1 parent 8a5a12f commit 556372c

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using CairoMakie
2+
import GeoInterface as GI, GeometryOps as GO
3+
using NaturalEarth
4+
5+
6+
using GeometryOps.SpatialTreeInterface
7+
import GeometryOps.SpatialTreeInterface as STI
8+
using SortTileRecursiveTree
9+
10+
function build_spatial_index_gif(geom, index_constructor, filename; plot_leaves = true, title = splitext(filename)[1], axis = (;), figure = (;), record = (;))
11+
fig = Figure(; figure...)
12+
ax = Axis(fig[1, 1]; title = title, axis...)
13+
14+
# Create a spatial index
15+
index = index_constructor(geom)
16+
ext = STI.node_extent(index)
17+
limits!(ax, ext.X[1], ext.X[2], ext.Y[1], ext.Y[2])
18+
19+
rects = Rect2f[Rect2f((NaN, NaN), (NaN, NaN))]
20+
colors = RGBAf[to_color(:transparent)]
21+
palette = Makie.wong_colors(0.7)
22+
23+
plt = poly!(ax, rects; color = colors)
24+
25+
to_rect2(extent) = Rect2f((extent.X[1], extent.Y[1]), (extent.X[2] - extent.X[1], extent.Y[2] - extent.Y[1]))
26+
27+
function dive_in(io, plt, node, level)
28+
if STI.isleaf(node) && plot_leaves
29+
push!(rects, to_rect2(STI.node_extent(node)))
30+
push!(colors, palette[level])
31+
else
32+
for child in STI.getchild(node)
33+
dive_in(io, plt, child, level + 1)
34+
end
35+
push!(rects, to_rect2(STI.node_extent(node)))
36+
push!(colors, palette[level])
37+
end
38+
update!(plt, rects; color = colors)
39+
recordframe!(io)
40+
return
41+
end
42+
43+
Makie.record(fig, filename; record...) do io
44+
empty!(rects)
45+
empty!(colors)
46+
dive_in(io, plt, index, 1)
47+
end
48+
49+
end

0 commit comments

Comments
 (0)