///|
fn main {
run() catch {
error => abort("MoonMVT filter example failed: \{error}")
}
}
///|
fn run() -> Unit raise {
let source = @builder.LayerBuilder::new("places", extent=256)
for
item in [
(1UL, "Moon Harbor", true, @model.Point::new(20, 30)),
(2UL, "Crater Market", false, @model.Point::new(180, 160)),
(3UL, "Luna Port", true, @model.Point::new(230, 40)),
] {
let (id, name, capital, point) = item
source.add_points([point], id=Some(id), properties=[
@builder.property("name", @model.MvtValue::StringValue(name)),
@builder.property("capital", @model.MvtValue::BoolValue(capital)),
])
}
let encoded = @codec.encode_tile({ layers: [source.finish()], })
let decoded = @codec.decode_tile(encoded)
let capitals = @query.filter_property_equals(
decoded.layers[0],
"capital",
@model.MvtValue::BoolValue(true),
)
let eastern = @query.filter_intersects(capitals, {
min_x: 128,
min_y: 0,
max_x: 256,
max_y: 256,
})
let output = @codec.encode_tile({ layers: [eastern], })
println("source features: \{decoded.layers[0].features.length()}")
println("selected features: \{eastern.features.length()}")
println("selected tile bytes: \{output.length()}")
}