|
JTS Topology Suite version 1.12 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.vividsolutions.jts.algorithm.LineIntersector
public abstract class LineIntersector
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute the intersection point if they do. The intersection point may be computed in a precise or non-precise manner. Computing it precisely involves rounding it to an integer. (This assumes that the input coordinates have been made precise by scaling them to an integer grid.)
Field Summary | |
---|---|
static int |
COLLINEAR
|
static int |
COLLINEAR_INTERSECTION
Indicates that line segments intersect in a line segment |
static int |
DO_INTERSECT
|
static int |
DONT_INTERSECT
These are deprecated, due to ambiguous naming |
protected Coordinate[][] |
inputLines
|
protected int[][] |
intLineIndex
The indexes of the endpoints of the intersection lines, in order along the corresponding line |
protected Coordinate[] |
intPt
|
protected boolean |
isProper
|
static int |
NO_INTERSECTION
Indicates that line segments do not intersect |
protected Coordinate |
pa
|
protected Coordinate |
pb
|
static int |
POINT_INTERSECTION
Indicates that line segments intersect in a single point |
protected PrecisionModel |
precisionModel
If makePrecise is true, computed intersection coordinates will be made precise using Coordinate#makePrecise |
protected int |
result
|
Constructor Summary | |
---|---|
LineIntersector()
|
Method Summary | |
---|---|
static double |
computeEdgeDistance(Coordinate p,
Coordinate p0,
Coordinate p1)
Computes the "edge distance" of an intersection point p along a segment. |
protected abstract int |
computeIntersect(Coordinate p1,
Coordinate p2,
Coordinate q1,
Coordinate q2)
|
abstract void |
computeIntersection(Coordinate p,
Coordinate p1,
Coordinate p2)
Compute the intersection of a point p and the line p1-p2. |
void |
computeIntersection(Coordinate p1,
Coordinate p2,
Coordinate p3,
Coordinate p4)
Computes the intersection of the lines p1-p2 and p3-p4. |
protected void |
computeIntLineIndex()
|
protected void |
computeIntLineIndex(int segmentIndex)
|
double |
getEdgeDistance(int segmentIndex,
int intIndex)
Computes the "edge distance" of an intersection point along the specified input line segment. |
Coordinate |
getEndpoint(int segmentIndex,
int ptIndex)
Gets an endpoint of an input segment. |
int |
getIndexAlongSegment(int segmentIndex,
int intIndex)
Computes the index (order) of the intIndex'th intersection point in the direction of a specified input line segment |
Coordinate |
getIntersection(int intIndex)
Returns the intIndex'th intersection point |
Coordinate |
getIntersectionAlongSegment(int segmentIndex,
int intIndex)
Computes the intIndex'th intersection point in the direction of a specified input line segment |
int |
getIntersectionNum()
Returns the number of intersection points found. |
boolean |
hasIntersection()
Tests whether the input geometries intersect. |
protected boolean |
isCollinear()
|
protected boolean |
isEndPoint()
|
boolean |
isInteriorIntersection()
Tests whether either intersection point is an interior point of one of the input segments. |
boolean |
isInteriorIntersection(int inputLineIndex)
Tests whether either intersection point is an interior point of the specified input segment. |
boolean |
isIntersection(Coordinate pt)
Test whether a point is a intersection point of two line segments. |
boolean |
isProper()
Tests whether an intersection is proper. |
static double |
nonRobustComputeEdgeDistance(Coordinate p,
Coordinate p1,
Coordinate p2)
This function is non-robust, since it may compute the square of large numbers. |
void |
setMakePrecise(PrecisionModel precisionModel)
Deprecated. use setPrecisionModel instead |
void |
setPrecisionModel(PrecisionModel precisionModel)
Force computed intersection to be rounded to a given precision model. |
java.lang.String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final int DONT_INTERSECT
public static final int DO_INTERSECT
public static final int COLLINEAR
public static final int NO_INTERSECTION
public static final int POINT_INTERSECTION
public static final int COLLINEAR_INTERSECTION
protected int result
protected Coordinate[][] inputLines
protected Coordinate[] intPt
protected int[][] intLineIndex
protected boolean isProper
protected Coordinate pa
protected Coordinate pb
protected PrecisionModel precisionModel
Constructor Detail |
---|
public LineIntersector()
Method Detail |
---|
public static double computeEdgeDistance(Coordinate p, Coordinate p0, Coordinate p1)
NOTE: This function may produce incorrect distances for inputs where p is not precisely on p1-p2 (E.g. p = (139,9) p1 = (139,10), p2 = (280,1) produces distanct 0.0, which is incorrect.
My hypothesis is that the function is safe to use for points which are the result of rounding points which lie on the line, but not safe to use for truncated points.
public static double nonRobustComputeEdgeDistance(Coordinate p, Coordinate p1, Coordinate p2)
public void setMakePrecise(PrecisionModel precisionModel)
setPrecisionModel
instead
precisionModel
- public void setPrecisionModel(PrecisionModel precisionModel)
precisionModel
- public Coordinate getEndpoint(int segmentIndex, int ptIndex)
segmentIndex
- the index of the input segment (0 or 1)ptIndex
- the index of the endpoint (0 or 1)
public abstract void computeIntersection(Coordinate p, Coordinate p1, Coordinate p2)
p
.
protected boolean isCollinear()
public void computeIntersection(Coordinate p1, Coordinate p2, Coordinate p3, Coordinate p4)
protected abstract int computeIntersect(Coordinate p1, Coordinate p2, Coordinate q1, Coordinate q2)
public java.lang.String toString()
toString
in class java.lang.Object
protected boolean isEndPoint()
public boolean hasIntersection()
public int getIntersectionNum()
public Coordinate getIntersection(int intIndex)
intIndex
- is 0 or 1
protected void computeIntLineIndex()
public boolean isIntersection(Coordinate pt)
public boolean isInteriorIntersection()
true
if either intersection point is in the interior of one of the input segmentspublic boolean isInteriorIntersection(int inputLineIndex)
true
if either intersection point is in the interior of the input segmentpublic boolean isProper()
The intersection between a point and a line segment is considered proper if the point lies in the interior of the segment (e.g. is not equal to either of the endpoints).
public Coordinate getIntersectionAlongSegment(int segmentIndex, int intIndex)
segmentIndex
- is 0 or 1intIndex
- is 0 or 1
public int getIndexAlongSegment(int segmentIndex, int intIndex)
segmentIndex
- is 0 or 1intIndex
- is 0 or 1
protected void computeIntLineIndex(int segmentIndex)
public double getEdgeDistance(int segmentIndex, int intIndex)
segmentIndex
- is 0 or 1intIndex
- is 0 or 1
|
JTS Topology Suite version 1.12 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |