public class GeometryPrecisionReducer extends Object
Geometry
according to the supplied PrecisionModel,
ensuring that the result is valid (unless specified otherwise).
By default the reduced result is topologically valid
(i.e. Geometry.isValid() is true).
To ensure this a polygonal geometry is reduced in a topologically valid fashion
(technically, by using snap-rounding).
Note that this may change polygonal geometry structure
(e.g. two polygons separated by a distance below the specified precision
will be merged into a single polygon).
In general input must be valid geometry, or an IllegalArgumentException
will be thrown. However if the invalidity is "mild" or very small then it
may be eliminated by precision reduction.
Alternatively, geometry can be reduced pointwise by using setPointwise(boolean).
In this case the result geometry topology may be invalid.
Linear and point geometry are always reduced pointwise (i.e. without further change to
topology or structure), since this does not change validity.
By default the geometry precision model is not changed.
This can be overridden by using setChangePrecisionModel(boolean).
Normally collapsed components (e.g. lines collapsing to a point)
are not included in the result.
This behavior can be changed by using setRemoveCollapsedComponents(boolean).
| Constructor and Description |
|---|
GeometryPrecisionReducer(PrecisionModel pm) |
| Modifier and Type | Method and Description |
|---|---|
Geometry |
reduce(Geometry geom)
Reduces the precision of a geometry,
according to the specified strategy of this reducer.
|
static Geometry |
reduce(Geometry g,
PrecisionModel precModel)
Convenience method for doing precision reduction
on a single geometry,
with collapses removed
and keeping the geometry precision model the same,
and preserving polygonal topology.
|
static Geometry |
reducePointwise(Geometry g,
PrecisionModel precModel)
Convenience method for doing pointwise precision reduction
on a single geometry,
with collapses removed
and keeping the geometry precision model the same,
but NOT preserving valid polygonal topology.
|
void |
setChangePrecisionModel(boolean changePrecisionModel)
Sets whether the
PrecisionModel of the new reduced Geometry
will be changed to be the PrecisionModel supplied to
specify the precision reduction. |
void |
setPointwise(boolean isPointwise)
Sets whether the precision reduction will be done
in pointwise fashion only.
|
void |
setRemoveCollapsedComponents(boolean removeCollapsed)
Sets whether the reduction will result in collapsed components
being removed completely, or simply being collapsed to an (invalid)
Geometry of the same type.
|
public GeometryPrecisionReducer(PrecisionModel pm)
public static Geometry reduce(Geometry g, PrecisionModel precModel)
g - the geometry to reduceprecModel - the precision model to useIllegalArgumentException - if the reduction fails due to invalid input geometry is invalidpublic static Geometry reducePointwise(Geometry g, PrecisionModel precModel)
g - the geometry to reduceprecModel - the precision model to usepublic void setRemoveCollapsedComponents(boolean removeCollapsed)
removeCollapsed - if true collapsed components will be removedpublic void setChangePrecisionModel(boolean changePrecisionModel)
PrecisionModel of the new reduced Geometry
will be changed to be the PrecisionModel supplied to
specify the precision reduction.
The default is to not change the precision model
changePrecisionModel - if true the precision model of the created Geometry will be the
the precisionModel supplied in the constructor.public void setPointwise(boolean isPointwise)
isPointwise - if reduction should be done pointwise onlypublic Geometry reduce(Geometry geom)
geom - the geometry to reduceIllegalArgumentException - if the reduction fails due to invalid input geometry is invalidCopyright © 2022. All rights reserved.