///|
fn main {
run() catch {
error => abort("MoonMVT example failed: \{error}")
}
}
///|
fn run() -> Unit raise {
let places = @builder.LayerBuilder::new("places")
places.add_points(
[@model.Point::new(1200, 900)],
properties=[
@builder.property("name", @model.MvtValue::StringValue("Moon Harbor")),
@builder.property("capital", @model.MvtValue::BoolValue(true)),
],
id=Some(1UL),
)
let roads = @builder.LayerBuilder::new("roads")
roads.add_lines(
[
[
@model.Point::new(0, 2048),
@model.Point::new(1000, 1800),
@model.Point::new(2500, 2300),
@model.Point::new(4096, 2000),
],
],
properties=[
@builder.property("class", @model.MvtValue::StringValue("primary")),
],
id=Some(7UL),
)
let land = @builder.LayerBuilder::new("land")
land.add_polygons(
[
[
@model.Point::new(100, 100),
@model.Point::new(3900, 100),
@model.Point::new(3900, 3900),
@model.Point::new(100, 3900),
],
],
properties=[
@builder.property("kind", @model.MvtValue::StringValue("island")),
],
)
let tile_builder = @builder.TileBuilder::new()
tile_builder.add_built_layer(places)
tile_builder.add_built_layer(roads)
tile_builder.add_built_layer(land)
let bytes = @codec.encode_tile(tile_builder.finish())
let decoded = @codec.decode_tile(bytes)
let statistics = @query.tile_statistics(decoded)
println("encoded bytes: \{bytes.length()}")
println("layers: \{statistics.layers}")
println("features: \{statistics.features}")
println("decoded points: \{statistics.decoded_points}")
println("canonical: \{@codec.is_canonical(bytes)}")
}