-
Notifications
You must be signed in to change notification settings - Fork 1
Explicit Tiling
Jip Claassens edited this page Jul 6, 2026
·
17 revisions
Configuration Examples Explicit Tiling
For some time/memory intensive operations, such as the determination of a dwelling type of each pand in the BAG, an explicit tiling of polygons can be implemented to limit the number of objects worked on simultaneously and thereby reduce the memory usage.
unit<uint32> TileDomain :=
='union_unit('+AsItemList('CreateTiles/LoopPolygons/'+string(CreateTiles/TileSet/name)+'/shape')+')'
{
attribute<rdc> geometry (poly) :=
='union_data(.,'+AsItemList(
'CreateTiles/LoopPolygons/'+string(CreateTiles/TileSet/name)+'/shape/geometry')+
')';
}
container CreateTiles
{
parameter<float32> NrofTiles_horizontal := 5f;
parameter<float32> NrofTiles_vertical := 5f;
// bounding box of The Netherlands
parameter<meter> x_min := 0[meter];
parameter<meter> x_max := 280000[meter];
parameter<meter> y_min := 300000[meter];
parameter<meter> y_max := 625000[meter];
parameter<meter> x_div := (x_max - x_min) / NrofTiles_horizontal;
parameter<meter> y_div := (y_max - y_min) / NrofTiles_vertical;
unit<uint32> TileSet := range(uint32, 0, uint32(NrofTiles_horizontal * NrofTiles_vertical))
{
attribute<uint32> values := id(.);
attribute<string> name := 'Tile'+ string(values);
attribute<uint32> row_number := values / NrofTiles_horizontal[uint32];
attribute<uint32> col_number := mod(values, NrofTiles_horizontal[uint32]);
}
container LoopPolygons := for_each_ne(
TileSet/name
,'CreatePolygons('+string(TileSet/values)+','+string(TileSet/row_number)+','+string(TileSet/col_number)+')'
);
template CreatePolygons
{
parameter<uint32> TileNumber;
parameter<uint32> row_number;
parameter<uint32> col_number;
unit<uint32> shape: nrofrows = 1
{
attribute<rdc> left_top :=
const(point(x_min + col_number[float32] *x_div, y_max-row_number[float32] *y_div, rdc), .);
attribute<rdc> right_top :=
const(point(x_min + (col_number[float32]+1f)*x_div, y_max-row_number[float32] *y_div, rdc), .);
attribute<rdc> right_bottom :=
const(point(x_min + (col_number[float32]+1f)*x_div, y_max-(row_number[float32]+1f)*y_div, rdc), .);
attribute<rdc> left_bottom :=
const(point(x_min + col_number[float32] *x_div, y_max-(row_number[float32]+1f)*y_div, rdc), .);
attribute<rdc> geometry (poly) :=
points2sequence(pointset/point, pointset/sequence, pointset/order);
}
unit<uint32> pointset: nrofrows = 5
{
attribute<rdc> point :=
union_data(
., shape/left_top, shape/right_top, shape/right_bottom, shape/left_bottom, shape/left_top
);
attribute<shape> sequence := const(0,., shape);
attribute<uint32> order := id(.);
}
}
}
GeoDMS ©Object Vision BV. Source code distributed under GNU GPL-3. Documentation distributed under CC BY-SA 4.0.