Class PolylineRing

All Implemented Interfaces:
AutoCloseable

public final class PolylineRing extends CompositeRing implements AutoCloseable
Represents a polyline that is closed, i.e., the first point and the last point coincide.
See Also:
  • Method Details

    • finalize

      protected void finalize()
      Overrides:
      finalize in class CompositeRing
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Overrides:
      close in class CompositeRing
    • getPointCount

      public long getPointCount()
      Returns the number of points in the polyline ring.
      Returns:
      the number of points in the polyline ring.
    • getPoint

      @NotNull public Coordinate getPoint(long index) throws IllegalArgumentException
      Returns the coordinate for the requested index.
      Parameters:
      index - the index of the requested point.
      Returns:
      the point at the index.
      Throws:
      IllegalArgumentException - when requesting an invalid index.
    • getPoints

      @NotNull public List<@NotNull Coordinate> getPoints()
      Returns the list of points of this polyline ring.
      Returns:
      the list of points of this polyline ring.
    • getInterpolationType

      @NotNull public LineInterpolationType getInterpolationType()
      Returns the interpolation type of the line segment.

      One of

      Returns:
      the interpolation type of the line segment.
    • translate

      @NotNull public PolylineRing translate(@NotNull Coordinate translation)
      Translates the entire polyline ring.

      Note: when the polyline ring is defined in a geodetic reference and uses geodetic interpolation, the translation is not performed by translating the points one by one. Instead, a translation method is used that better preserves the shape of the polyline ring when moving it towards (or away from) the poles.

      Parameters:
      translation - the translation vector
      Returns:
      a new, translated geometry
    • movePoint

      @NotNull public PolylineRing movePoint(long index, @NotNull Coordinate newLocation) throws IllegalArgumentException
      Creates a new PolylineRing with a moved control point.
      Parameters:
      index - the index of the point to move. Should be in [0, getPointCount() - 1].
      newLocation - the new location of the point
      Returns:
      a new geometry
      Throws:
      IllegalArgumentException - for an invalid index
    • insertPoint

      @NotNull public PolylineRing insertPoint(long index, @NotNull Coordinate newLocation) throws IllegalArgumentException
      Creates a new PolylineRing with an newly inserted control point.
      Parameters:
      index - the index of the newly inserted control point. Should be in [0, getPointCount()]. For index 0, a new point will be added at the start of the Polyline ring. For index getPointCount(), a new point is added at the end of the Polyline ring. For other index values, a new point will be added between the point at specified (index-1) and the point at the index position.
      newLocation - the location of the new point
      Returns:
      a new geometry
      Throws:
      IllegalArgumentException - for an invalid index
    • removePoint

      @NotNull public PolylineRing removePoint(long index) throws IllegalArgumentException
      Creates a new PolylineRing with a control point removed.

      This methods returns a copy of the polyline ring if its point count is less or equal to 3.

      Parameters:
      index - the index of the point to be removed. Should be in [0, getPointCount() - 1].
      Returns:
      a new geometry
      Throws:
      IllegalArgumentException - for an invalid index
    • getArea

      public double getArea() throws IllegalArgumentException
      Returns the 2D area enclosed by this polyline ring.

      The calculations are performed in the coordinate reference of this geometry. This means that

      • for geodetic references, the curvature of the line segments are taken into account (depending on the interpolation type).
      • for other references, the calculations are cartesian.

      The returned value is expressed in the unit of measure of the reference of this geometry.

      • for geodetic references, this is always meters.
      • or other references this is typically meters, but depending on the reference the unit of measure can also be something else like millimeters or feet.

      Limitations:

      • The area calculation is performed in 2D. For 3D polyline rings, the z value will be ignored and considered as 0.
      • For this reason, geometries with a geocentric reference are not supported at all. In this case, an exception is thrown.
      • Geometries with a rhumb line interpolation type are not supported. In this case, an exception is thrown.
      • The calculations are only correct for non-self-intersecting polyline rings. If a polyline ring does self-intersect, one of the parts of ring may be considered as interior instead of exterior during this calculation, and the area will be smaller than it actually is.
      Returns:
      the 2D area enclosed by this polyline ring.
      Throws:
      IllegalArgumentException - when using this method on a geometry with a geocentric reference, or with a rhumb interpolation type.
      Since:
      2025.0
    • getOrientation

      @NotNull public Angle.Direction getOrientation() throws IllegalArgumentException
      Returns the orientation of this polyline ring.

      The calculations are performed in the coordinate reference of this geometry. This means that

      • for geodetic references, the curvature of the line segments are taken into account (depending on the interpolation type).
      • for other references, the calculations are cartesian.

      Limitations:

      • The calculation is performed in 2D. For 3D polyline rings, the z value will be ignored and considered as 0.
      • For this reason, geometries with a geocentric reference are not supported at all. In this case, an exception is thrown.
      • Geometries with a rhumb line interpolation type are not supported. In this case, an exception is thrown.
      • The orientation is not well-defined for polyline rings that self-intersect. This function will then return the orientation of the largest sub-part of the polyline ring.
      Returns:
      the orientation of this polyline ring.
      Throws:
      IllegalArgumentException - when using this method on a geometry with a geocentric reference, or with a rhumb interpolation type.
      Since:
      2025.0