Grid 2 polygon example
configuration-examples Grid 2 polygon
Calculating with grid-data is usually much faster than with vector-data.
If you need to transform zonal data for a small or medium raster to polygon vector data anyway, see the following example.
For larger rasters, and if you need to simplify a covering layer of polygon, while maintaining topologic relations and connectedness, which might be lost if you would call bg_simplify_multi_polygon directly, see also: https://geodms.nl/docs/poly-to-grid-to-(simplified)-polygon.html
parameter<meter> gridsize := 100[meter]; unit<spoint> griddomain : StorageName = "%SourceDataDir%/src_grid.tif" , StorageType = "gdal.grid" , DialogData = "Geografie/rdc" { attribute<float32> GridData; } unit<uint32> polydomain := select_with_org_rel(IsDefined(griddomain/GridData)) { attribute<rdc> point_rdc := org_rel[rdc]; attribute<rdc> geometry (poly) := points2sequence(pointset/point, pointset/sequence, pointset/ordinal); unit<uint32> pointset := union_unit(.,.,.,.,.) { attribute<rdc> point := union_data(. , point_rdc // left top , point_rdc + point(gridsize, 0[meter], rdc) // right top , point_rdc + point(gridsize, -gridsize, rdc) // right bottom , point_rdc + point(0[meter], -gridsize, rdc) // left bottom , point_rdc // left top ); attribute<..> sequence := union_data(., id(..), id(..), id(..), id(..), id(..))[uint32]; attribute<uint32> ordinal := union_data(., const(0,..), const(1,..), const(2,..), const(3,..), const(4,..)); } }
With yx-coord the point-defintion is: attribute<rdc> point := union_data(. , point_rdc , point_rdc + point(0[meter] , gridsize, rdc) , point_rdc + point(-gridsize, gridsize, rdc) , point_rdc + point(-gridsize, 0[meter], rdc) , point_rdc );
explanation
This example results in a set of square polygons for each grid cell with non missing data in the GridData attribute. The selection with the isDefined functions results in a uint32 domain-unit with entries for each defined cell. In this subset also other criteria can be used to make selections of the relevant set of grid cells.
The configured pointset domain unit has 5 times the number of entries of the subset domain unit. This pointset domain is used to define for each polygon the topleft, bottomleft, bottomright, topright and again topleft coordinate. With the points2sequence function these points are converted to polygons.
The square polygons can be dissolved into large polygons (interior polygon segments are removed), by using the union_polygon or partitioned_union_polygon functions.