Class GeometryGraph


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

      • parentGeom

        private Geometry parentGeom
      • lineEdgeMap

        private java.util.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
      • 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 java.util.Collection boundaryNodes
      • hasTooFewPoints

        private boolean hasTooFewPoints
    • Constructor Detail

      • GeometryGraph

        public GeometryGraph​(int argIndex,
                             Geometry parentGeom)
    • Method Detail

      • 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)
      • 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()
      • getBoundaryNodes

        public java.util.Collection getBoundaryNodes()
      • getBoundaryPoints

        public Coordinate[] getBoundaryPoints()
      • computeSplitEdges

        public void computeSplitEdges​(java.util.List edgelist)
      • add

        private void add​(Geometry g)
      • 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
      • 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