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