1.polygon与lineString左右位置关系
private String LEFT = "left";
private String RIGHT = "right";
public static String getPositionPolygonTolLn2(Polygon polygon, LineString lineString) {
if (polygon.intersects(lineString)) {
return "";
}
Coordinate vertexPoint = polygon.getCoordinate();
Coordinate coordinate = polygon.getCoordinate();
LineSegment lineSegment = AddataCommonTools.getPointNearestLnSeg(coordinate, lineString);
if (Orientation.LEFT == lineSegment.orientationIndex(vertexPoint)) {
return LEFT;
} else if (Orientation.RIGHT == lineSegment.orientationIndex(vertexPoint)) {
return RIGHT;
} else {
return "";
}
}
2.lineString与lineString的左右位置关系
private String LEFT = "left";
private String RIGHT = "right";
public static String getPositionLn1TolLn2(LineString ln1, LineString ln2) {
Coordinate startPoint = ln2.getStartPoint().getCoordinate();
Coordinate endPoint = ln2.getEndPoint().getCoordinate();
Coordinate midPoint = getLineStringMidPointCoordinate(ln1);
if (Orientation.LEFT == Orientation.index(startPoint, endPoint, midPoint)) {
return LEFT;
} else if (Orientation.RIGHT == Orientation.index(startPoint, endPoint, midPoint)) {
return RIGHT;
} else {
return "";
}
}
3.判断geometry与lineString的位置关系
/**
* geometry 在linestring的左边还是右边
*
* @param lineString
* @param geometry
* @return 右边或上返回为true, 其它返回false
*/
private boolean orientationJudge(LineString lineString, Geometry geometry) {
Coordinate coordinate = geometry.getCoordinate();
LineSegment lineSegment = AddataCommonTools.getPointNearestLnSeg(coordinate, lineString);
return lineSegment.orientationIndex(coordinate) == Orientation.LEFT ? false : true;
}