# **Partitioned_union_polygon (dissolve by attribute)**

*geometric-functions partitioned_union_polygon (dissolve by attribute)*

## syntax

- partitioned_union_polygon(
*polygon_data_item*,*relation*)

## description

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

## conditions

- The composition type of the
*polygon_data_item*item needs to be polygon. - The domain unit of the
*polygon_data_item*item must be of value type uint32. - The domain unit of arguments
*polygon_data_item*and*relation*must match. - 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

7.042

## example

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