com.vividsolutions.jts.geomgraph

Class GeometryGraph


public class GeometryGraph
extends PlanarGraph

A GeometryGraph is a graph that models a given Geometry
Version:
1.6

Field Summary

Fields inherited from class com.vividsolutions.jts.geomgraph.PlanarGraph

cga, edgeEndList, edges, nodes

Constructor Summary

GeometryGraph(int argIndex, Geometry parentGeom)

Method Summary

void
addEdge(Edge e)
Add an Edge computed externally.
void
addPoint(Coordinate pt)
Add a point computed externally.
SegmentIntersector
computeEdgeIntersections(GeometryGraph g, LineIntersector li, boolean includeProper)
SegmentIntersector
computeSelfNodes(LineIntersector li, boolean computeRingSelfNodes)
Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection tests.
void
computeSplitEdges(List edgelist)
static int
determineBoundary(int boundaryCount)
Edge
findEdge(LineString line)
Collection
getBoundaryNodes()
Coordinate[]
getBoundaryPoints()
Geometry
getGeometry()
Coordinate
getInvalidPoint()
boolean
hasTooFewPoints()
This constructor is used by clients that wish to add Edges explicitly, rather than adding a Geometry.
static boolean
isInBoundary(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)

Methods inherited from class com.vividsolutions.jts.geomgraph.PlanarGraph

add, addEdges, addNode, addNode, find, findEdge, findEdgeEnd, findEdgeInSameDirection, getEdgeEnds, getEdgeIterator, getNodeIterator, getNodes, insertEdge, isBoundaryNode, linkAllDirectedEdges, linkResultDirectedEdges, linkResultDirectedEdges, printEdges

Constructor Details

GeometryGraph

public GeometryGraph(int argIndex,
                     Geometry parentGeom)

Method Details

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.

computeEdgeIntersections

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

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 , intersection checks are optimized to not test rings for self-intersection
Returns:
the SegmentIntersector used, containing information about the intersections found

computeSplitEdges

public void computeSplitEdges(List edgelist)

determineBoundary

public static int determineBoundary(int boundaryCount)

findEdge

public Edge findEdge(LineString line)

getBoundaryNodes

public Collection getBoundaryNodes()

getBoundaryPoints

public Coordinate[] getBoundaryPoints()

getGeometry

public Geometry getGeometry()

getInvalidPoint

public Coordinate getInvalidPoint()

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).

isInBoundary

public static boolean isInBoundary(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)