Class Polygonizer

java.lang.Object
org.locationtech.jts.operation.polygonize.Polygonizer

public class Polygonizer extends Object
Polygonizes a set of Geometrys which contain linework that represents the edges of a planar graph. All types of Geometry are accepted as input; the constituent linework is extracted as the edges to be polygonized. The processed edges must be correctly noded; that is, they must only meet at their endpoints. Polygonization will accept incorrectly noded input but will not form polygons from non-noded edges, and reports them as errors.

The Polygonizer reports the follow kinds of errors:

  • Dangles - edges which have one or both ends which are not incident on another edge endpoint
  • Cut Edges - edges which are connected at both ends but which do not form part of polygon
  • Invalid Ring Lines - edges which form rings which are invalid (e.g. the component lines contain a self-intersection)
Polygonization supports extracting only polygons which form a valid polygonal geometry. The set of extracted polygons is guaranteed to be edge-disjoint. This is useful for situations where it is known that the input lines form a valid polygonal geometry.
Version:
1.7
  • Field Details

    • lineStringAdder

      private Polygonizer.LineStringAdder lineStringAdder
    • graph

      protected PolygonizeGraph graph
    • dangles

      protected Collection dangles
    • cutEdges

      protected List cutEdges
    • invalidRingLines

      protected List invalidRingLines
    • holeList

      protected List holeList
    • shellList

      protected List shellList
    • polyList

      protected List polyList
    • isCheckingRingsValid

      private boolean isCheckingRingsValid
    • extractOnlyPolygonal

      private boolean extractOnlyPolygonal
    • geomFactory

      private GeometryFactory geomFactory
  • Constructor Details

    • Polygonizer

      public Polygonizer()
      Creates a polygonizer with the same GeometryFactory as the input Geometrys. The output mask is
      invalid reference
      #ALL_POLYS
      .
    • Polygonizer

      public Polygonizer(boolean extractOnlyPolygonal)
      Creates a polygonizer and allow specifying if only polygons which form a valid polygonal geometry are to be extracted.
      Parameters:
      extractOnlyPolygonal - true if only polygons which form a valid polygonal geometry are to be extracted
  • Method Details

    • add

      public void add(Collection geomList)
      Adds a collection of geometries to the edges to be polygonized. May be called multiple times. Any dimension of Geometry may be added; the constituent linework will be extracted and used.
      Parameters:
      geomList - a list of Geometrys with linework to be polygonized
    • add

      public void add(Geometry g)
      Add a Geometry to the edges to be polygonized. May be called multiple times. Any dimension of Geometry may be added; the constituent linework will be extracted and used
      Parameters:
      g - a Geometry with linework to be polygonized
    • add

      private void add(LineString line)
      Adds a linestring to the graph of polygon edges.
      Parameters:
      line - the LineString to add
    • setCheckRingsValid

      public void setCheckRingsValid(boolean isCheckingRingsValid)
      Allows disabling the valid ring checking, to optimize situations where invalid rings are not expected.

      The default is true.

      Parameters:
      isCheckingRingsValid - true if generated rings should be checked for validity
    • getPolygons

      public Collection getPolygons()
      Gets the list of polygons formed by the polygonization.
      Returns:
      a collection of Polygons
    • getGeometry

      public Geometry getGeometry()
      Gets a geometry representing the polygons formed by the polygonization. If a valid polygonal geometry was extracted the result is a
      invalid reference
      Polygonal
      geometry.
      Returns:
      a geometry containing the polygons
    • getDangles

      public Collection getDangles()
      Gets the list of dangling lines found during polygonization.
      Returns:
      a collection of the input LineStrings which are dangles
    • getCutEdges

      public Collection getCutEdges()
      Gets the list of cut edges found during polygonization.
      Returns:
      a collection of the input LineStrings which are cut edges
    • getInvalidRingLines

      public Collection getInvalidRingLines()
      Gets the list of lines forming invalid rings found during polygonization.
      Returns:
      a collection of the input LineStrings which form invalid rings
    • polygonize

      private void polygonize()
      Performs the polygonization, if it has not already been carried out.
    • findValidRings

      private void findValidRings(List edgeRingList, List validEdgeRingList, List invalidRingList)
    • findShellsAndHoles

      private void findShellsAndHoles(List edgeRingList)
    • assignHolesToShells

      private static void assignHolesToShells(List holeList, List shellList)
    • assignHoleToShell

      private static void assignHoleToShell(EdgeRing holeER, List shellList)
    • findDisjointShells

      private static void findDisjointShells(List shellList)
    • findOuterShells

      private static void findOuterShells(List shellList)
      For each outer hole finds and includes a single outer shell. This seeds the traversal algorithm for finding only polygonal shells.
      Parameters:
      shellList - the list of shell EdgeRings
    • extractPolygons

      private static List extractPolygons(List shellList, boolean includeAll)