Class SimpleSnapRounder

java.lang.Object
org.locationtech.jts.noding.snapround.SimpleSnapRounder
All Implemented Interfaces:
Noder

public class SimpleSnapRounder extends Object implements Noder
Uses Snap Rounding to compute a rounded, fully noded arrangement from a set of SegmentStrings. Implements the Snap Rounding technique described in the papers by Hobby, Guibas & Marimont, and Goodrich et al. Snap Rounding assumes that all vertices lie on a uniform grid; hence the precision model of the input must be fixed precision, and all the input vertices must be rounded to that precision.

This implementation uses simple iteration over the line segments. This is not the most efficient approach for large sets of segments.

This implementation appears to be fully robust using an integer precision model. It will function with non-integer precision models, but the results are not 100% guaranteed to be correctly noded.

Version:
1.7
  • Field Details

  • Constructor Details

  • Method Details

    • getNodedSubstrings

      public Collection getNodedSubstrings()
      Description copied from interface: Noder
      Returns a Collection of fully noded SegmentStrings. The SegmentStrings have the same context as their parent.
      Specified by:
      getNodedSubstrings in interface Noder
      Returns:
      a Collection of NodedSegmentStrings representing the substrings
    • computeNodes

      public void computeNodes(Collection inputSegmentStrings)
      Description copied from interface: Noder
      Computes the noding for a collection of SegmentStrings. Some Noders may add all these nodes to the input SegmentStrings; others may only add some or none at all.
      Specified by:
      computeNodes in interface Noder
      Parameters:
      inputSegmentStrings - a Collection of NodedSegmentStrings
    • checkCorrectness

      private void checkCorrectness(Collection inputSegmentStrings)
    • snapRound

      private void snapRound(Collection segStrings, LineIntersector li)
    • findInteriorIntersections

      private List findInteriorIntersections(Collection segStrings, LineIntersector li)
      Computes all interior intersections in the collection of SegmentStrings, and returns their Coordinates. Does NOT node the segStrings.
      Returns:
      a list of Coordinates for the intersections
    • computeSnaps

      private void computeSnaps(Collection segStrings, Collection snapPts)
      Computes nodes introduced as a result of snapping segments to snap points (hot pixels)
      Parameters:
      li -
    • computeSnaps

      private void computeSnaps(NodedSegmentString ss, Collection snapPts)
    • computeVertexSnaps

      public void computeVertexSnaps(Collection edges)
      Computes nodes introduced as a result of snapping segments to vertices of other segments
      Parameters:
      edges - the list of segment strings to snap together
    • computeVertexSnaps

      private void computeVertexSnaps(NodedSegmentString e0, NodedSegmentString e1)
      Performs a brute-force comparison of every segment in each SegmentString. This has n^2 performance.