Class Segment

  • All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    Line

    public abstract class Segment
    extends Geometry
    implements java.io.Serializable
    A base class for segments. Presently only Line segments are supported.
    See Also:
    Serialized Form
    • Field Detail

      • m_xStart

        double m_xStart
      • m_yStart

        double m_yStart
      • m_xEnd

        double m_xEnd
      • m_yEnd

        double m_yEnd
      • m_attributes

        double[] m_attributes
    • Constructor Detail

      • Segment

        public Segment()
        Creates a segment with start and end points (0,0).
    • Method Detail

      • getStartXY

        public Point2D getStartXY()
        Returns XY coordinates of the start point.
      • getStartXY

        public void getStartXY​(Point2D pt)
      • setStartXY

        public void setStartXY​(Point2D pt)
        Sets the XY coordinates of the start point.
      • setStartXY

        public void setStartXY​(double x,
                               double y)
      • getStartXYZ

        public Point3D getStartXYZ()
        Returns XYZ coordinates of the start point. Z if 0 if Z is missing.
      • setStartXYZ

        public void setStartXYZ​(Point3D pt)
        Sets the XYZ coordinates of the start point.
      • setStartXYZ

        public void setStartXYZ​(double x,
                                double y,
                                double z)
      • queryStart

        public void queryStart​(Point dstPoint)
        Returns coordinates of the start point in a Point class.
      • setStart

        public void setStart​(Point srcPoint)
        Sets the coordinates of the start point in this segment.
        Parameters:
        srcPoint - The new start point of this segment.
      • getStartAttributeAsDbl

        public double getStartAttributeAsDbl​(int semantics,
                                             int ordinate)
        Returns value of the start vertex attribute's ordinate. Throws if the Point is empty.
        Parameters:
        semantics - The attribute semantics.
        ordinate - The attribute's ordinate. For example, the y coordinate of the NORMAL has ordinate of 1.
        Returns:
        Ordinate value as double.
      • getStartAttributeAsInt

        public int getStartAttributeAsInt​(int semantics,
                                          int ordinate)
        Returns the value of the start vertex attribute's ordinate. The ordinate is always 0 because integer attributes always have one component.
        Parameters:
        semantics - The attribute semantics.
        ordinate - The attribute's ordinate. For example, the y coordinate of the NORMAL has ordinate of 1.
        Returns:
        Ordinate value truncated to 32 bit integer.
      • setStartAttribute

        public void setStartAttribute​(int semantics,
                                      int ordinate,
                                      double value)
        Sets the value of the start vertex attribute.
        Parameters:
        semantics - The attribute semantics.
        value - is the array to write values to. The attribute type and the number of elements must match the persistence type, as well as the number of components of the attribute.
      • setStartAttribute

        public void setStartAttribute​(int semantics,
                                      int ordinate,
                                      int value)
      • getStartX

        public double getStartX()
        Returns the X coordinate of starting point.
        Returns:
        The X coordinate of starting point.
      • getStartY

        public double getStartY()
        Returns the Y coordinate of starting point.
        Returns:
        The Y coordinate of starting point.
      • getEndX

        public double getEndX()
        Returns the X coordinate of ending point.
        Returns:
        The X coordinate of ending point.
      • getEndY

        public double getEndY()
        Returns the Y coordinate of ending point.
        Returns:
        The Y coordinate of ending point.
      • getEndXY

        public Point2D getEndXY()
        Returns XY coordinates of the end point.
        Returns:
        The XY coordinates of the end point.
      • getEndXY

        public void getEndXY​(Point2D pt)
      • setEndXY

        public void setEndXY​(Point2D pt)
        Sets the XY coordinates of the end point.
        Parameters:
        pt - The end point of the segment.
      • setEndXY

        public void setEndXY​(double x,
                             double y)
      • getEndXYZ

        public Point3D getEndXYZ()
        Returns XYZ coordinates of the end point. Z if 0 if Z is missing.
        Returns:
        The XYZ coordinates of the end point.
      • setEndXYZ

        public void setEndXYZ​(Point3D pt)
        Sets the XYZ coordinates of the end point.
      • setEndXYZ

        public void setEndXYZ​(double x,
                              double y,
                              double z)
      • queryEnd

        public void queryEnd​(Point dstPoint)
        Returns coordinates of the end point in this segment.
        Parameters:
        dstPoint - The end point of this segment.
      • setEnd

        public void setEnd​(Point srcPoint)
        Sets the coordinates of the end point in a Point class.
        Parameters:
        srcPoint - The new end point of this segment.
      • getEndAttributeAsDbl

        public double getEndAttributeAsDbl​(int semantics,
                                           int ordinate)
        Returns value of the end vertex attribute's ordinate. Throws if the Point is empty.
        Parameters:
        semantics - The attribute semantics.
        ordinate - The attribute's ordinate. For example, the y coordinate of the NORMAL has ordinate of 1.
        Returns:
        Ordinate value as double.
      • getEndAttributeAsInt

        public int getEndAttributeAsInt​(int semantics,
                                        int ordinate)
        Returns the value of the end vertex attribute's ordinate. The ordinate is always 0 because integer attributes always have one component.
        Parameters:
        semantics - The attribute semantics.
        ordinate - The attribute's ordinate. For example, the y coordinate of the NORMAL has ordinate of 1.
        Returns:
        The ordinate value truncated to 32 bit integer.
      • setEndAttribute

        public void setEndAttribute​(int semantics,
                                    int ordinate,
                                    double value)
        Sets the value of end vertex attribute.
        Parameters:
        semantics - The attribute semantics.
        ordinate - The attribute's ordinate.
        value - Is the array to write values to. The attribute type and the number of elements must match the persistence type, as well as the number of components of the attribute.
      • setEndAttribute

        public void setEndAttribute​(int semantics,
                                    int ordinate,
                                    int value)
      • getDimension

        public final int getDimension()
        Description copied from class: Geometry
        Returns the topological dimension of the geometry object based on the geometry's type.

        Returns 0 for point and multipoint.

        Returns 1 for lines and polylines.

        Returns 2 for polygons and envelopes

        Returns 3 for objects with volume

        Specified by:
        getDimension in class Geometry
        Returns:
        Returns the integer value of the dimension of geometry.
      • isEmpty

        public final boolean isEmpty()
        Description copied from class: Geometry
        IsEmpty returns TRUE when the Geometry object does not contain geometric information beyond its original initialization state.
        Specified by:
        isEmpty in class Geometry
        Returns:
        boolean Returns TRUE if this geometry is empty.
      • setEmpty

        public final void setEmpty()
        Description copied from class: Geometry
        Returns the geometry to its original initialization state by releasing all data referenced by the geometry.
        Specified by:
        setEmpty in class Geometry
      • calculateArea2D

        public double calculateArea2D()
        Description copied from class: Geometry
        Calculates the area of the geometry. If the spatial reference is a Geographic Coordinate System (WGS84) then the 2D area calculation is defined in angular units.
        Overrides:
        calculateArea2D in class Geometry
        Returns:
        A double value representing the 2D area of the geometry.
      • intersect

        int intersect​(Segment other,
                      Point2D[] intersectionPoints,
                      double[] paramThis,
                      double[] paramOther,
                      double tolerance)
        Calculates intersections of this segment with another segment.

        Note: This is not a topological operation. It needs to be paired with the Segment.Overlap call.

        Parameters:
        other - The segment to calculate intersection with.
        intersectionPoints - The intersection points. Can be NULL.
        paramThis - The value of the parameter in the intersection points for this Segment (between 0 and 1). Can be NULL.
        paramOther - The value of the parameter in the intersection points for the other Segment (between 0 and 1). Can be NULL.
        tolerance - The tolerance value for the intersection calculation. Can be 0.
        Returns:
        The number of intersection points, 0 when no intersection points exist.
      • isIntersecting

        public boolean isIntersecting​(Segment other,
                                      double tolerance)
        Returns TRUE if this segment intersects with the other segment with the given tolerance.
      • isIntersecting

        public boolean isIntersecting​(Point2D pt,
                                      double tolerance)
        Returns TRUE if the point and segment intersect (not disjoint) for the given tolerance.
      • isEmptyImpl

        public boolean isEmptyImpl()
        Non public abstract version of the function.
      • _resizeAttributes

        void _resizeAttributes​(int newSize)
      • _attributeCopy

        static void _attributeCopy​(double[] src,
                                   int srcStart,
                                   double[] dst,
                                   int dstStart,
                                   int count)
      • _getXY

        private Point2D _getXY​(int endPoint)
      • _setXY

        private void _setXY​(int endPoint,
                            Point2D pt)
      • _getXYZ

        private Point3D _getXYZ​(int endPoint)
      • _setXYZ

        private void _setXYZ​(int endPoint,
                             Point3D pt)
      • _get

        private void _get​(int endPoint,
                          Point outPoint)
      • _set

        private void _set​(int endPoint,
                          Point src)
      • _getAttributeAsDbl

        double _getAttributeAsDbl​(int endPoint,
                                  int semantics,
                                  int ordinate)
      • _getAttributeAsInt

        private int _getAttributeAsInt​(int endPoint,
                                       int semantics,
                                       int ordinate)
      • _setAttribute

        void _setAttribute​(int endPoint,
                           int semantics,
                           int ordinate,
                           double value)
      • _setAttribute

        void _setAttribute​(int endPoint,
                           int semantics,
                           int ordinate,
                           int value)
      • copyTo

        public void copyTo​(Geometry dst)
        Description copied from class: Geometry
        Copies this geometry to another geometry of the same type. The result geometry is an exact copy.
        Specified by:
        copyTo in class Geometry
        Parameters:
        dst - The geometry instance to copy to.
      • queryInterval

        public Envelope1D queryInterval​(int semantics,
                                        int ordinate)
        Description copied from class: Geometry
        Returns the min and max attribute values at the ordinate of the Geometry.
        Specified by:
        queryInterval in class Geometry
        Parameters:
        semantics - The semantics of the interval.
        ordinate - The ordinate of the interval.
        Returns:
        The interval.
      • queryCoord

        void queryCoord​(double t,
                        Point point)
      • _equalsImpl

        boolean _equalsImpl​(Segment other)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • isClosed

        boolean isClosed()
        Returns true, when this segment is a closed curve (start point is equal to end point exactly). Note, this will return true for lines, that are degenerate to a point too.
      • reverse

        void reverse()
      • _isIntersecting

        int _isIntersecting​(Segment other,
                            double tolerance,
                            boolean bExcludeExactEndpoints)
      • _intersect

        int _intersect​(Segment other,
                       Point2D[] intersectionPoints,
                       double[] paramThis,
                       double[] paramOther,
                       double tolerance)
      • _calculateArea2DHelper

        abstract double _calculateArea2DHelper​(double xorg,
                                               double yorg)
        A helper function for area calculation. Calculates the Integral(y(t) * x'(t) * dt) for t = [0, 1]. The area of a ring is caluclated as a sum of the results of CalculateArea2DHelper.
      • _getEndPointOffset

        static int _getEndPointOffset​(VertexDescription vd,
                                      int endPoint)
      • getCoord2D

        public Point2D getCoord2D​(double t)
        Returns the coordinate of the point on this segment for the given parameter value.
      • getCoord2D

        public abstract void getCoord2D​(double t,
                                        Point2D dst)
        Returns the coordinate of the point on this segment for the given parameter value (segments are parametric curves).
        Parameters:
        t - the parameter coordinate along the segment from 0.0 to 1.0. Value of 0 returns the start point, 1 returns end point.
        dst - the coordinate where result will be placed.
      • getClosestCoordinate

        public abstract double getClosestCoordinate​(Point2D inputPoint,
                                                    boolean bExtrapolate)
        Finds a closest coordinate on this segment.
        Parameters:
        inputPoint - The 2D point to find the closest coordinate on this segment.
        bExtrapolate - TRUE if the segment is extrapolated at the end points along the end point tangents. Otherwise the result is limited to values between 0 and 1.
        Returns:
        The parametric coordinate t on the segment (0 corresponds to the start point, 1 corresponds to the end point). Use getCoord2D to obtain the 2D coordinate on the segment from t. To find the distance, call (inputPoint.sub(seg.getCoord2D(t))).length();
      • getYMonotonicParts

        abstract int getYMonotonicParts​(SegmentBuffer[] monotonicSegments)
        Splits this segment into Y monotonic parts and places them into the input array.
        Parameters:
        monotonicSegments - The in/out array of SegmentBuffer structures that will be filled with the monotonic parts. The monotonicSegments array must contain at least 3 elements.
        Returns:
        The number of monotonic parts if the split had happened. Returns 0 if the segment is already monotonic.
      • intersectionWithAxis2D

        public abstract int intersectionWithAxis2D​(boolean bAxisX,
                                                   double ordinate,
                                                   double[] resultOrdinates,
                                                   double[] parameters)
        Calculates intersection points of this segment with an infinite line, parallel to one of the axes.
        Parameters:
        bAxisX - TRUE if the function works with the line parallel to the axis X.
        ordinate - The ordinate value of the line (x for axis Y, y for axis X).
        resultOrdinates - The value of ordinate in the intersection points One ordinate is equal to the ordinate parameter. This parameter can be NULL.
        parameters - The value of the parameter in the intersection points (between 0 and 1). This parameter can be NULL.
        Returns:
        The number of intersection points, 0 when no intersection points exist, -1 when the segment coincides with the line (infinite number of intersection points).
      • _reverseImpl

        void _reverseImpl()
      • isDegenerate

        abstract boolean isDegenerate​(double tolerance)
        Returns True if the segment is degenerate to a point with relation to the given tolerance. For Lines this means the line length is not longer than the tolerance. For the curves, the distance between the segment endpoints should not be longer than the tolerance and the distance from the line, connecting the endpoints to the furtherst point on the segment is not larger than the tolerance.
      • isCurve

        abstract boolean isCurve()
      • _getTangent

        abstract Point2D _getTangent​(double t)
      • _isDegenerate

        abstract boolean _isDegenerate​(double tolerance)
      • _calculateSubLength

        double _calculateSubLength​(double t)
      • _calculateSubLength

        double _calculateSubLength​(double t1,
                                   double t2)
      • _copyToImpl

        abstract void _copyToImpl​(Segment dst)
      • cut

        public abstract Segment cut​(double t1,
                                    double t2)
        Returns subsegment between parameters t1 and t2. The attributes are interpolated along the length of the curve.
      • cut

        abstract void cut​(double t1,
                          double t2,
                          SegmentBuffer subSegmentBuffer)
        Calculates the subsegment between parameters t1 and t2, and stores the result in subSegmentBuffer. The attributes are interpolated along the length of the curve.
      • getAttributeAsDbl

        public abstract double getAttributeAsDbl​(double t,
                                                 int semantics,
                                                 int ordinate)
        Returns the attribute on the segment for the given parameter value. The interpolation of attribute is given by the attribute interpolation type.
      • _isIntersectingPoint

        abstract boolean _isIntersectingPoint​(Point2D pt,
                                              double tolerance,
                                              boolean bExcludeExactEndpoints)
      • intersectionOfYMonotonicWithAxisX

        abstract double intersectionOfYMonotonicWithAxisX​(double y,
                                                          double xParallel)
        Calculates intersection point of this segment with an infinite line, parallel to axis X. This segment must be to be y-monotonic (or horizontal).
        Parameters:
        y - The y coordinate of the line.
        xParallel - For segments, that are horizontal, and have y coordinate, this value is returned.
        Returns:
        X coordinate of the intersection, or NaN, if no intersection.
      • tToLength

        abstract double tToLength​(double t)
        Converts curves parameter t to the curve length. Can be expensive for curves.
      • lengthToT

        abstract double lengthToT​(double len)
      • distance

        public double distance​(Segment otherSegment,
                               boolean bSegmentsKnownDisjoint)
      • getBoundary

        public Geometry getBoundary()
        Description copied from class: Geometry
        Returns boundary of this geometry. Polygon and Envelope boundary is a Polyline. For Polyline and Line, the boundary is a Multi_point consisting of path end points. For Multi_point and Point null is returned.
        Specified by:
        getBoundary in class Geometry
        Returns:
        The boundary geometry.