Partitioned_union_polygon (dissolve by attribute)

geometric-functions partitioned_union_polygon (dissolve by attribute)


  • partitioned_union_polygon(polygon_data_item, relation)


partitioned_union_polygon(polygon_data_item, partioning) results in an attribute with all polygons from polygon_data_item, grouped by the argument relation.

Lines between adjacent polygons within each group are removed.

The domain-unit of the resulting attribute is the values-unit of the relation.

In other GIS software the term dissolve is often used for this operation.

applies to

  • attribute polygon_data_item with an ipoint or spoint value-type
  • relation with a value type of the group CanBeDomainUnit


  1. The composition type of the polygon_data_item item needs to be polygon.
  2. The domain unit of the polygon_data_item item must be of value type uint32.
  3. The domain unit of arguments polygon_data_item and relation must match.
  4. The order of points in the polygon_data_item needs to be clockwise for exterior bounds and counter clockwise for holes in polygons (right-hand-rule).

This function result in problems for (integer) coordinates larger than 2^25 (after translation where the first point is moved to (0, 0)). If your integer coordinates for instance represent mm, 2^25[mm] = about 33[km]. The reason is that for calculating intersections, products of coordinates are calculated and casted to float64 with a 53 bits mantissa (in the development/test environment of boost::polygon these were float80 values with a 64 bits mantissa). We advise to keep the size of your integer coordinates for polygons limited and for instance do not use a mm precision for country borders (meter or kilometer might be sufficient).

since version



attribute<ipoint> geometry (polygon, region) := 
   partitioned_union_polygon(ipolygon(district/geometry), region_rel);

see also