Class GeometryTransformer
Geometry
into
an output Geometry
, 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 whichever transformX
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 return null
,
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 return null
(for instance, it may not be possible for a transformLineString implementation
to return at least two points - in this case, it should return null
).
The transform(Geometry)
method itself will always
return a non-null Geometry object (but this may be empty).
- Version:
- 1.7
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final CoordinateSequence
copy
(CoordinateSequence seq) Convenience method which provides a standard way of copyingCoordinateSequence
sprotected final CoordinateSequence
createCoordinateSequence
(Coordinate[] coords) Convenience method which provides standard way of creating aCoordinateSequence
Utility function to make input geometry availablefinal Geometry
protected CoordinateSequence
transformCoordinates
(CoordinateSequence coords, Geometry parent) Transforms aCoordinateSequence
.protected Geometry
transformGeometryCollection
(GeometryCollection geom, Geometry parent) protected Geometry
transformLinearRing
(LinearRing geom, Geometry parent) Transforms a LinearRing.protected Geometry
transformLineString
(LineString geom, Geometry parent) Transforms aLineString
geometry.protected Geometry
transformMultiLineString
(MultiLineString geom, Geometry parent) protected Geometry
transformMultiPoint
(MultiPoint geom, Geometry parent) protected Geometry
transformMultiPolygon
(MultiPolygon geom, Geometry parent) protected Geometry
transformPoint
(Point geom, Geometry parent) protected Geometry
transformPolygon
(Polygon geom, Geometry parent)
-
Field Details
-
factory
-
-
Constructor Details
-
GeometryTransformer
public GeometryTransformer()
-
-
Method Details
-
getInputGeometry
Utility function to make input geometry available- Returns:
- the input geometry
-
transform
-
createCoordinateSequence
Convenience method which provides standard way of creating aCoordinateSequence
- Parameters:
coords
- the coordinate array to copy- Returns:
- a coordinate sequence for the array
-
copy
Convenience method which provides a standard way of copyingCoordinateSequence
s- Parameters:
seq
- the sequence to copy- Returns:
- a deep copy of the sequence
-
transformCoordinates
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
-
transformPoint
-
transformMultiPoint
-
transformLinearRing
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
Transforms aLineString
geometry.- Parameters:
geom
-parent
-- Returns:
-
transformMultiLineString
-
transformPolygon
-
transformMultiPolygon
-
transformGeometryCollection
-