# Combine Geometry¶

Doing the union operation on two geometries is one of the most expensive operations you can possibly do; while it is reasonable for small numbers (say 5-10) when you start to get up to hundreds of geometries the cost can be measured in minutes.

• Using GeometryCollection union()

In JTS 1.9 there is a new union() method that will “do the right thing”:

```static Geometry combineIntoOneGeometry( Collection<Geometry> geometryCollection ){
GeometryFactory factory = FactoryFinder.getGeometryFactory( null );

// note the following geometry collection may be invalid (say with overlapping polygons)
GeometryCollection geometryCollection =
(GeometryCollection) factory.buildGeometry( geometryCollection );

return geometryCollection.union();
}
```
• Using buffer( 0 )

You can get the same effect in JTS 1.8 using buffer(0):

```GeometryFactory factory = FactoryFinder.getGeometryFactory( null );

// note the following geometry collection may be invalid (say with overlapping polygons)
GeometryCollection geometryCollection =
(GeometryCollection) factory.buildGeometry( geometryCollection );

Geometry union = geometryCollection.buffer(0);
```
• Using union( geometry )

Using JTS versions prior to 1.9 you will need to combine the geometries one by one using geometry.union( geometry ):

```    static Geometry combineIntoOneGeometry( Collection<Geometry> geometryCollection ){
Geometry all = null;
for( Iterator<Geometry> i = geometryCollection.iterator(); i.hasNext(); ){
Geometry geometry = i.next();
if( geometry == null ) continue;
if( all == null ){
all = geometry;
}
else {
all = all.union( geometry );
}
}
return all;
}
```

The above code is pretty much too simple to live; the correct way to do things is to break up your data into regions, union all the geometries in one region together; and then combine these at the end into one big geometry (this is the approach used above by the union() method).