Class GeometryFixer

java.lang.Object
org.locationtech.jts.geom.util.GeometryFixer

public class GeometryFixer extends Object
Fixes a geometry to be a valid geometry, while preserving as much as possible of the shape and location of the input. Validity is determined according to Geometry.isValid().

Input geometries are always processed, so even valid inputs may have some minor alterations. The output is always a new geometry object.

Semantic Rules

  1. Vertices with non-finite X or Y ordinates are removed (as per Coordinate.isValid().
  2. Repeated points are reduced to a single point
  3. Empty atomic geometries are valid and are returned unchanged
  4. Empty elements are removed from collections
  5. Point: keep valid coordinate, or EMPTY
  6. LineString: coordinates are fixed
  7. LinearRing: coordinates are fixed. Keep valid ring, or else convert into LineString
  8. Polygon: transform into a valid polygon, preserving as much of the extent and vertices as possible.
    • Rings are fixed to ensure they are valid
    • Holes intersecting the shell are subtracted from the shell
    • Holes outside the shell are converted into polygons
  9. MultiPolygon: each polygon is fixed, then result made non-overlapping (via union)
  10. GeometryCollection: each element is fixed
  11. Collapsed lines and polygons are handled as follows, depending on the keepCollapsed setting:
    • false: (default) collapses are converted to empty geometries (and removed if they are elements of collections)
    • true: collapses are converted to a valid geometry of lower dimension
Author:
Martin Davis
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new instance to fix a given geometry.
  • Method Summary

    Modifier and Type
    Method
    Description
    static Geometry
    fix(Geometry geom)
    Fixes a geometry to be valid.
    static Geometry
    fix(Geometry geom, boolean isKeepMulti)
    Fixes a geometry to be valid, allowing to set a flag controlling how single item results from fixed MULTI geometries should be returned.
    Gets the fixed geometry.
    void
    setKeepCollapsed(boolean isKeepCollapsed)
    Sets whether collapsed geometries are converted to empty, (which will be removed from collections), or to a valid geometry of lower dimension.
    void
    setKeepMulti(boolean isKeepMulti)
    Sets whether fixed MULTI geometries that consist of only one item should still be returned as MULTI geometries.

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • GeometryFixer

      public GeometryFixer(Geometry geom)
      Creates a new instance to fix a given geometry.
      Parameters:
      geom - the geometry to be fixed
  • Method Details

    • fix

      public static Geometry fix(Geometry geom)
      Fixes a geometry to be valid.
      Parameters:
      geom - the geometry to be fixed
      Returns:
      the valid fixed geometry
    • fix

      public static Geometry fix(Geometry geom, boolean isKeepMulti)
      Fixes a geometry to be valid, allowing to set a flag controlling how single item results from fixed MULTI geometries should be returned.
      Parameters:
      geom - the geometry to be fixed
      isKeepMulti - a flag indicating if MULTI geometries should not be converted to single instance types if they consist of only one item.
      Returns:
      the valid fixed geometry
    • setKeepCollapsed

      public void setKeepCollapsed(boolean isKeepCollapsed)
      Sets whether collapsed geometries are converted to empty, (which will be removed from collections), or to a valid geometry of lower dimension. The default is to convert collapses to empty geometries.
      Parameters:
      isKeepCollapsed - whether collapses should be converted to a lower dimension geometry
    • setKeepMulti

      public void setKeepMulti(boolean isKeepMulti)
      Sets whether fixed MULTI geometries that consist of only one item should still be returned as MULTI geometries. The default is to keep MULTI geometries.
      Parameters:
      isKeepMulti - flag whether to keep MULTI geometries.
    • getResult

      public Geometry getResult()
      Gets the fixed geometry.
      Returns:
      the fixed geometry