Explicit Tiling

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 limit the number of objects worked on simultaneously and thereby reducing the memory usage.

example

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(.);
	   }
    }
}