Class GeometryTransformer
- java.lang.Object
-
- org.locationtech.jts.geom.util.GeometryTransformer
-
- Direct Known Subclasses:
Densifier.DensifyTransformer
,DouglasPeuckerSimplifier.DPTransformer
,SnapTransformer
,TopologyPreservingSimplifier.LineStringTransformer
,VWSimplifier.VWTransformer
public class GeometryTransformer extends java.lang.Object
A framework for processes which transform an inputGeometry
into an outputGeometry
, possibly changing its structure and type(s). This class is a framework for implementing subclasses which perform transformations on various different Geometry subclasses. It provides an easy way of applying specific transformations to given geometry types, while allowing unhandled types to be simply copied. Also, the framework ensures that if subcomponents change type the parent geometries types change appropriately to maintain valid structure. Subclasses will override whichevertransformX
methods they need to to handle particular Geometry types.A typically usage would be a transformation class that transforms Polygons into Polygons, LineStrings or Points, depending on the geometry of the input (For instance, a simplification operation). This class would likely need to override the
transformMultiPolygon(MultiPolygon, Geometry)
method to ensure that if input Polygons change type the result is a GeometryCollection, not a MultiPolygon.The default behaviour of this class is simply to recursively transform each Geometry component into an identical object by deep copying down to the level of, but not including, coordinates.
All
transformX
methods may returnnull
, to avoid creating empty or invalid geometry objects. This will be handled correctly by the transformer.transformXXX
methods should always return valid geometry - if they cannot do this they should returnnull
(for instance, it may not be possible for a transformLineString implementation to return at least two points - in this case, it should returnnull
). Thetransform(Geometry)
method itself will always return a non-null Geometry object (but this may be empty).- Version:
- 1.7
- See Also:
GeometryEditor
-
-
Field Summary
Fields Modifier and Type Field Description protected GeometryFactory
factory
private Geometry
inputGeom
Possible extensions: getParent() method to return immediate parent e.g.private boolean
preserveCollections
true
if the output from a collection argument should still be a collectionprivate boolean
preserveGeometryCollectionType
true
if a homogenous collection result from aGeometryCollection
should still be a general GeometryCollectionprivate boolean
preserveType
true
if the type of the input should be preservedprivate boolean
pruneEmptyGeometry
true
if empty geometries should not be included in the result
-
Constructor Summary
Constructors Constructor Description GeometryTransformer()
-
Method Summary
-
-
-
Field Detail
-
inputGeom
private Geometry inputGeom
Possible extensions: getParent() method to return immediate parent e.g. of LinearRings in Polygons
-
factory
protected GeometryFactory factory
-
pruneEmptyGeometry
private boolean pruneEmptyGeometry
true
if empty geometries should not be included in the result
-
preserveGeometryCollectionType
private boolean preserveGeometryCollectionType
true
if a homogenous collection result from aGeometryCollection
should still be a general GeometryCollection
-
preserveCollections
private boolean preserveCollections
true
if the output from a collection argument should still be a collection
-
preserveType
private boolean preserveType
true
if the type of the input should be preserved
-
-
Method Detail
-
getInputGeometry
public Geometry getInputGeometry()
Utility function to make input geometry available- Returns:
- the input geometry
-
createCoordinateSequence
protected final CoordinateSequence createCoordinateSequence(Coordinate[] coords)
Convenience method which provides standard way of creating aCoordinateSequence
- Parameters:
coords
- the coordinate array to copy- Returns:
- a coordinate sequence for the array
-
copy
protected final CoordinateSequence copy(CoordinateSequence seq)
Convenience method which provides a standard way of copyingCoordinateSequence
s- Parameters:
seq
- the sequence to copy- Returns:
- a deep copy of the sequence
-
transformCoordinates
protected CoordinateSequence transformCoordinates(CoordinateSequence coords, Geometry parent)
Transforms aCoordinateSequence
. This method should always return a valid coordinate list for the desired result type. (E.g. a coordinate list for a LineString must have 0 or at least 2 points). If this is not possible, return an empty sequence - this will be pruned out.- Parameters:
coords
- the coordinates to transformparent
- the parent geometry- Returns:
- the transformed coordinates
-
transformMultiPoint
protected Geometry transformMultiPoint(MultiPoint geom, Geometry parent)
-
transformLinearRing
protected Geometry transformLinearRing(LinearRing geom, Geometry parent)
Transforms a LinearRing. The transformation of a LinearRing may result in a coordinate sequence which does not form a structurally valid ring (i.e. a degenerate ring of 3 or fewer points). In this case a LineString is returned. Subclasses may wish to override this method and check for this situation (e.g. a subclass may choose to eliminate degenerate linear rings)- Parameters:
geom
- the ring to simplifyparent
- the parent geometry- Returns:
- a LinearRing if the transformation resulted in a structurally valid ring
-
transformLineString
protected Geometry transformLineString(LineString geom, Geometry parent)
Transforms aLineString
geometry.- Parameters:
geom
-parent
-- Returns:
-
transformMultiLineString
protected Geometry transformMultiLineString(MultiLineString geom, Geometry parent)
-
transformMultiPolygon
protected Geometry transformMultiPolygon(MultiPolygon geom, Geometry parent)
-
transformGeometryCollection
protected Geometry transformGeometryCollection(GeometryCollection geom, Geometry parent)
-
-