Search in sources :

Example 6 with EdgeEnd

use of com.revolsys.geometry.geomgraph.EdgeEnd in project com.revolsys.open by revolsys.

the class EdgeEndBundle method computeLabelOn.

/**
 * Compute the overall ON location for the list of EdgeStubs.
 * (This is essentially equivalent to computing the self-overlay of a single Geometry)
 * edgeStubs can be either on the boundary (eg Polygon edge)
 * OR in the interior (e.g. segment of a LineString)
 * of their parent Geometry.
 * In addition, GeometryCollections use a {@link BoundaryNodeRule} to determine
 * whether a segment is on the boundary or not.
 * Finally, in GeometryCollections it can occur that an edge is both
 * on the boundary and in the interior (e.g. a LineString segment lying on
 * top of a Polygon edge.) In this case the Boundary is given precendence.
 * <br>
 * These observations result in the following rules for computing the ON location:
 * <ul>
 * <li> if there are an odd number of Bdy edges, the attribute is Bdy
 * <li> if there are an even number >= 2 of Bdy edges, the attribute is Int
 * <li> if there are any Int edges, the attribute is Int
 * <li> otherwise, the attribute is NULL.
 * </ul>
 */
private void computeLabelOn(final int geomIndex, final BoundaryNodeRule boundaryNodeRule) {
    // compute the ON location value
    int boundaryCount = 0;
    boolean foundInterior = false;
    for (final EdgeEnd e : this) {
        final Location loc = e.getLabel().getLocation(geomIndex);
        if (loc == Location.BOUNDARY) {
            boundaryCount++;
        }
        if (loc == Location.INTERIOR) {
            foundInterior = true;
        }
    }
    Location loc = Location.NONE;
    if (foundInterior) {
        loc = Location.INTERIOR;
    }
    if (boundaryCount > 0) {
        loc = GeometryGraph.determineBoundary(boundaryNodeRule, boundaryCount);
    }
    getLabel().setLocation(geomIndex, loc);
}
Also used : EdgeEnd(com.revolsys.geometry.geomgraph.EdgeEnd) Location(com.revolsys.geometry.model.Location)

Aggregations

EdgeEnd (com.revolsys.geometry.geomgraph.EdgeEnd)6 Label (com.revolsys.geometry.geomgraph.Label)2 Point (com.revolsys.geometry.model.Point)2 SegmentIntersector (com.revolsys.geometry.geomgraph.index.SegmentIntersector)1 IntersectionMatrix (com.revolsys.geometry.model.IntersectionMatrix)1 Location (com.revolsys.geometry.model.Location)1 Iterator (java.util.Iterator)1