Package org.locationtech.jts.geomgraph
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 Summary
-
Fields inherited from class org.locationtech.jts.geomgraph.PlanarGraph
edgeEndList, edges, nodes
-
-
Constructor Summary
Constructors Constructor Description GeometryGraph(int argIndex, Geometry parentGeom)GeometryGraph(int argIndex, Geometry parentGeom, BoundaryNodeRule boundaryNodeRule)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddEdge(Edge e)Add an Edge computed externally.voidaddPoint(Coordinate pt)Add a point computed externally.SegmentIntersectorcomputeEdgeIntersections(GeometryGraph g, LineIntersector li, boolean includeProper)SegmentIntersectorcomputeSelfNodes(LineIntersector li, boolean computeRingSelfNodes)Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection tests.SegmentIntersectorcomputeSelfNodes(LineIntersector li, boolean computeRingSelfNodes, boolean isDoneIfProperInt)Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection tests.voidcomputeSplitEdges(List edgelist)static intdetermineBoundary(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)EdgefindEdge(LineString line)BoundaryNodeRulegetBoundaryNodeRule()CollectiongetBoundaryNodes()Coordinate[]getBoundaryPoints()GeometrygetGeometry()CoordinategetInvalidPoint()booleanhasTooFewPoints()This constructor is used by clients that wish to add Edges explicitly, rather than adding a Geometry.intlocate(Coordinate pt)Determines theLocationof the givenCoordinatein this geometry.-
Methods inherited from class org.locationtech.jts.geomgraph.PlanarGraph
add, addEdges, addNode, addNode, find, findEdge, findEdgeEnd, findEdgeInSameDirection, getEdgeEnds, getEdgeIterator, getNodeIterator, getNodes, insertEdge, isBoundaryNode, linkAllDirectedEdges, linkResultDirectedEdges, linkResultDirectedEdges, printEdges
-
-
-
-
Constructor Detail
-
GeometryGraph
public GeometryGraph(int argIndex, Geometry parentGeom)
-
GeometryGraph
public GeometryGraph(int argIndex, Geometry parentGeom, BoundaryNodeRule boundaryNodeRule)
-
-
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()
-
getBoundaryNodeRule
public BoundaryNodeRule getBoundaryNodeRule()
-
getBoundaryNodes
public Collection getBoundaryNodes()
-
getBoundaryPoints
public Coordinate[] getBoundaryPoints()
-
findEdge
public Edge findEdge(LineString line)
-
computeSplitEdges
public void computeSplitEdges(List edgelist)
-
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 usecomputeRingSelfNodes- iffalse, 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 usecomputeRingSelfNodes- iffalse, intersection checks are optimized to not test rings for self-intersectionisDoneIfProperInt- 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)
-
locate
public int locate(Coordinate pt)
Determines theLocationof the givenCoordinatein this geometry.- Parameters:
pt- the point to test- Returns:
- the location of the point in the geometry
-
-