I used ne_110m_admin_0_countries.
Rendering updates for the layer at 0.1 seconds.
Geometry Generator for a Point for the marker location via line_interpolate_point
:
with_variable(
'biggest_geom',
geometry_n(order_parts($geometry, 'area($geometry)', ascending:=False), 1),
line_interpolate_point(
boundary(@biggest_geom),
perimeter(@biggest_geom)*(round(epoch(now())/100)%100/100)
)
)
Raster Image Marker with https://opengameart.org/content/character-spritesheet-duck, vertical anchor at bottom, sprite choice between walking and running (doesn’t actually work) plus the frame via
with_variable(
'biggest_geom',
geometry_n(order_parts($geometry, 'area($geometry)', ascending:=False), 1),
'/your/path/Duck/Sprites/Walking-Running/'
|| if(perimeter(@biggest_geom) < 10, 'Walking', 'Running')
|| ' 00'
|| to_string(round(epoch(now())/200)%2+1)
|| '.png'
)
Rotation did not work, I tried line_interpolate_angle
:
with_variable(
'biggest_geom',
geometry_n(order_parts($geometry, 'area($geometry)', ascending:=False), 1),
line_interpolate_angle(
boundary(@biggest_geom),
perimeter(@biggest_geom)*(round(epoch(now())/100)%100/100)
)
)
Steps via two more Geometry Generators, both for Lines using line_substring
and some nice style (inspired by the wonderful built-in cat trail preset):
with_variable(
'biggest_geom',
geometry_n(order_parts($geometry, 'area($geometry)', ascending:=False), 1),
line_substring(
boundary(@biggest_geom),
0,
perimeter(@biggest_geom)*(round(epoch(now())/100)%100/100)
)
)
Could be improved if (for example) Raster Image Marker would support:
- Choice of resampling algorithm
- Flipping
- Rotation would work, no idea what’s wrong with my expression, it works with random values, so …
- Whatever is broken with the choice between ‘Walking’ and ‘Running’ in the file path expression
Good afternoon!
Please tell me why you need to use ‘geometry_n(order_parts($geometry, ‘parea($geometry)’, ascending:=False), 1)’. Why can’t ‘$geometry’
Ha, good question. That was just for the dataset I used which had Multipolygons and I needed to make sure only one Polygon is used. You can drop the whole with_variable context if you just have non-multi Polygons.
Thanks for sharing the this idea, wonderful and fun project so learn from.