All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.locationtech.jts.operation.overlay.MaximalEdgeRing Maven / Gradle / Ivy



/*
 * Copyright (c) 2016 Vivid Solutions.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v. 1.0 which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 *
 * http://www.eclipse.org/org/documents/edl-v10.php.
 */
package org.locationtech.jts.operation.overlay;

import java.util.ArrayList;
import java.util.List;

import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geomgraph.DirectedEdge;
import org.locationtech.jts.geomgraph.DirectedEdgeStar;
import org.locationtech.jts.geomgraph.EdgeRing;
import org.locationtech.jts.geomgraph.Node;

/**
 * A ring of {@link DirectedEdge}s which may contain nodes of degree > 2.
 * A MaximalEdgeRing may represent two different spatial entities:
 * 
    *
  • a single polygon possibly containing inversions (if the ring is oriented CW) *
  • a single hole possibly containing exversions (if the ring is oriented CCW) *
* If the MaximalEdgeRing represents a polygon, * the interior of the polygon is strongly connected. *

* These are the form of rings used to define polygons under some spatial data models. * However, under the OGC SFS model, {@link MinimalEdgeRing}s are required. * A MaximalEdgeRing can be converted to a list of MinimalEdgeRings using the * {@link #buildMinimalRings() } method. * * @version 1.7 * @see org.locationtech.jts.operation.overlay.MinimalEdgeRing */ public class MaximalEdgeRing extends EdgeRing { public MaximalEdgeRing(DirectedEdge start, GeometryFactory geometryFactory) { super(start, geometryFactory); } public DirectedEdge getNext(DirectedEdge de) { return de.getNext(); } public void setEdgeRing(DirectedEdge de, EdgeRing er) { de.setEdgeRing(er); } /** * For all nodes in this EdgeRing, * link the DirectedEdges at the node to form minimalEdgeRings */ public void linkDirectedEdgesForMinimalEdgeRings() { DirectedEdge de = startDe; do { Node node = de.getNode(); ((DirectedEdgeStar) node.getEdges()).linkMinimalDirectedEdges(this); de = de.getNext(); } while (de != startDe); } public List buildMinimalRings() { List minEdgeRings = new ArrayList(); DirectedEdge de = startDe; do { if (de.getMinEdgeRing() == null) { EdgeRing minEr = new MinimalEdgeRing(de, geometryFactory); minEdgeRings.add(minEr); } de = de.getNext(); } while (de != startDe); return minEdgeRings; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy