public class GeometryPrecisionReducer extends Object
Geometry
according to the supplied PrecisionModel
,
ensuring that the result is valid (unless specified otherwise).
By default the geometry precision model is not changed.
This can be overridden by using setChangePrecisionModel(boolean)
.
Geometry.isValid()
is true).
To ensure this 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).
Duplicate vertices are removed.
This mode is invoked by the static method reduce(Geometry, PrecisionModel)
.
Normally, collapsed linear components (e.g. lines collapsing to a point)
are not included in the result.
This behavior can be changed
by setting setRemoveCollapsedComponents(boolean)
to false
,
or by using the static method reduceKeepCollapsed(Geometry, PrecisionModel)
.
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.
setPointwise(boolean)
.
Linear and point geometry are always reduced pointwise (i.e. without further change to
topology or structure), since this does not change validity.
Invalid inputs are allowed.
Duplicate vertices are preserved.
Collapsed components are always included in the result.
The result geometry may be invalid.
This mode is invoked by the static method reducePointwise(Geometry, PrecisionModel)
.
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)
Reduces precision of a geometry, ensuring output geometry is valid.
|
static Geometry |
reduceKeepCollapsed(Geometry geom,
PrecisionModel pm)
Reduces precision of a geometry, ensuring output polygonal geometry is valid,
and preserving collapsed linear elements.
|
static Geometry |
reducePointwise(Geometry g,
PrecisionModel precModel)
Reduce precision of a geometry in a pointwise way.
|
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)
Invalid input geometry may cause an error, unless the invalidity is below the scale of the precision reduction.
g
- the geometry to reduceprecModel
- the precision model to useIllegalArgumentException
- if the reduction fails due to invalid input geometrypublic static Geometry reduceKeepCollapsed(Geometry geom, PrecisionModel pm)
Invalid input geometry may cause an error, unless the invalidity is below the scale of the precision reduction.
g
- the geometry to reduceprecModel
- the precision model to useIllegalArgumentException
- if the reduction fails due to invalid input geometrypublic static Geometry reducePointwise(Geometry g, PrecisionModel precModel)
Invalid input geometry is allowed.
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.