Class GeometryGraph

java.lang.Object
org.locationtech.jts.geomgraph.PlanarGraph
org.locationtech.jts.geomgraph.GeometryGraph

public class GeometryGraph extends PlanarGraph
A GeometryGraph is a graph that models a given Geometry
Version:
1.7
  • Field Details

    • parentGeom

      private Geometry parentGeom
    • lineEdgeMap

      private Map lineEdgeMap
      The lineEdgeMap is a map of the linestring components of the parentGeometry to the edges which are derived from them. This is used to efficiently perform findEdge queries
    • boundaryNodeRule

      private BoundaryNodeRule boundaryNodeRule
    • useBoundaryDeterminationRule

      private boolean useBoundaryDeterminationRule
      If this flag is true, the Boundary Determination Rule will used when deciding whether nodes are in the boundary or not
    • argIndex

      private int argIndex
    • boundaryNodes

      private Collection boundaryNodes
    • hasTooFewPoints

      private boolean hasTooFewPoints
    • invalidPoint

      private Coordinate invalidPoint
    • areaPtLocator

      private PointOnGeometryLocator areaPtLocator
    • ptLocator

      private final PointLocator ptLocator
  • Constructor Details

    • GeometryGraph

      public GeometryGraph(int argIndex, Geometry parentGeom)
    • GeometryGraph

      public GeometryGraph(int argIndex, Geometry parentGeom, BoundaryNodeRule boundaryNodeRule)
  • Method Details

    • determineBoundary

      public static int determineBoundary(BoundaryNodeRule boundaryNodeRule, int boundaryCount)
      This method implements the Boundary Determination Rule for determining whether a component (node or edge) that appears multiple times in elements of a MultiGeometry is in the boundary or the interior of the Geometry
      The SFS uses the "Mod-2 Rule", which this function implements
      An alternative (and possibly more intuitive) rule would be the "At Most One Rule": isInBoundary = (componentCount == 1)
    • createEdgeSetIntersector

      private EdgeSetIntersector createEdgeSetIntersector()
    • hasTooFewPoints

      public boolean hasTooFewPoints()
      This constructor is used by clients that wish to add Edges explicitly, rather than adding a Geometry. (An example is BufferOp).
    • getInvalidPoint

      public Coordinate getInvalidPoint()
    • getGeometry

      public Geometry getGeometry()
    • getBoundaryNodeRule

      public BoundaryNodeRule getBoundaryNodeRule()
    • getBoundaryNodes

      public Collection getBoundaryNodes()
    • getBoundaryPoints

      public Coordinate[] getBoundaryPoints()
    • findEdge

      public Edge findEdge(LineString line)
    • computeSplitEdges

      public void computeSplitEdges(List edgelist)
    • add

      private void add(Geometry g)
    • addCollection

      private void addCollection(GeometryCollection gc)
    • addPoint

      private void addPoint(Point p)
      Add a Point to the graph.
    • addPolygonRing

      private void addPolygonRing(LinearRing lr, int cwLeft, int cwRight)
      Adds a polygon ring to the graph. Empty rings are ignored. The left and right topological location arguments assume that the ring is oriented CW. If the ring is in the opposite orientation, the left and right locations must be interchanged.
    • addPolygon

      private void addPolygon(Polygon p)
    • addLineString

      private void addLineString(LineString line)
    • addEdge

      public void addEdge(Edge e)
      Add an Edge computed externally. The label on the Edge is assumed to be correct.
    • addPoint

      public void addPoint(Coordinate pt)
      Add a point computed externally. The point is assumed to be a Point Geometry part, which has a location of INTERIOR.
    • computeSelfNodes

      public SegmentIntersector computeSelfNodes(LineIntersector li, boolean computeRingSelfNodes)
      Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection tests. (E.g. rings are not tested for self-intersection, since they are assumed to be valid).
      Parameters:
      li - the LineIntersector to use
      computeRingSelfNodes - if false, intersection checks are optimized to not test rings for self-intersection
      Returns:
      the computed SegmentIntersector containing information about the intersections found
    • computeSelfNodes

      public SegmentIntersector computeSelfNodes(LineIntersector li, boolean computeRingSelfNodes, boolean isDoneIfProperInt)
      Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection tests. (E.g. rings are not tested for self-intersection, since they are assumed to be valid).
      Parameters:
      li - the LineIntersector to use
      computeRingSelfNodes - if false, intersection checks are optimized to not test rings for self-intersection
      isDoneIfProperInt - short-circuit the intersection computation if a proper intersection is found
      Returns:
      the computed SegmentIntersector containing information about the intersections found
    • computeEdgeIntersections

      public SegmentIntersector computeEdgeIntersections(GeometryGraph g, LineIntersector li, boolean includeProper)
    • insertPoint

      private void insertPoint(int argIndex, Coordinate coord, int onLocation)
    • insertBoundaryPoint

      private void insertBoundaryPoint(int argIndex, Coordinate coord)
      Adds candidate boundary points using the current BoundaryNodeRule. This is used to add the boundary points of dim-1 geometries (Curves/MultiCurves).
    • addSelfIntersectionNodes

      private void addSelfIntersectionNodes(int argIndex)
    • addSelfIntersectionNode

      private void addSelfIntersectionNode(int argIndex, Coordinate coord, int loc)
      Add a node for a self-intersection. If the node is a potential boundary node (e.g. came from an edge which is a boundary) then insert it as a potential boundary node. Otherwise, just add it as a regular node.
    • locate

      public int locate(Coordinate pt)
      Determines the Location of the given Coordinate in this geometry.
      Parameters:
      pt - the point to test
      Returns:
      the location of the point in the geometry