开源社区里利用JTS库进行空间处理的代码参考(十)

2014-11-24 07:56:16 · 作者: · 浏览: 12
.equals2D(l1c0)) {
return true;
} else {
return l2c0.equals2D(l1cN);
}
}

/**
* @param line1 The line to match
* @param line2 The line to compare the start of with the other line
* @return
*/
public static boolean touchesAtEnd(final LineString line1,
final LineString line2) {
Coordinate l1c0 = line1.getCoordinateN(0);
Coordinate l1cN = line1.getCoordinateN(line1.getNumPoints() - 1);
Coordinate l2cN = line2.getCoordinateN(line2.getNumPoints() - 1);
if (l2cN.equals2D(l1c0)) {
return true;
} else {
return l2cN.equals2D(l1cN);
}
}

public static boolean startAndEndEqual(final LineString geometry1,
final LineString geometry2) {
Coordinate g1c0 = geometry1.getCoordinateN(0);
Coordinate g1cN = geometry1.getCoordinateN(geometry1.getNumPoints() - 1);
Coordinate g2c0 = geometry2.getCoordinateN(0);
Coordinate g2cN = geometry2.getCoordinateN(geometry2.getNumPoints() - 1);
if (g1c0.equals2D(g2c0)) {
return g1cN.equals2D(g2cN);
} else if (g1c0.equals2D(g2cN)) {
return g1cN.equals2D(g2c0);
} else {
return false;
}
}

public static boolean isBothWithinDistance(final LineString line1,
final LineString line2, final double maxDistance) {
if (isWithinDistance(line1, line2, maxDistance)) {
return isWithinDistance(line2, line1, maxDistance);
} else {
return false;
}
}

public static boolean isWithinDistance(final LineString line1,
final LineString line2, final double maxDistance) {
CoordinateSequence coordinates1 = line1.getCoordinateSequence();
for (int i = 0; i < coordinates1.size(); i++) {
Coordinate coordinate = coordinates1.getCoordinate(i);
if (!isWithinDistance(coordinate, line2, maxDistance)) {
return false;
}
}
return true;
}

public static boolean isWithinDistance(final Coordinate coordinate,
final LineString line, final double maxDistance) {
GeometryFactory factory = line.getFactory();
Point point = factory.createPoint(coordinate);
double distance = line.distance(point);
return distance <= maxDistance;
}

public static Polygon reversePolygon(final Polygon polygon) {
GeometryFactory factory = polygon.getFactory();
LineString exteriorRing = polygon.getExteriorRing();
CoordinateSequence oldCoordinates = exteriorRing.getCoordinateSequence();
ReverseCoordinateSequence newCoordinates = new ReverseCoordinateSequence(
oldCoordinates);
LinearRing shell = factory.createLinearRing(newCoordinates);
return factory.createPolygon(shell, null);
}

public static Geometry get2DGeometry(final Geometry geometry) {
GeometryFactory factory = geometry.getFactory();
if (geometry instanceof Point) {
Point point = (Point)geometry;
return factory.createPoint(get2DCoordinates(point.getCoordinateSequence()));
} else if (geometry instanceof LineString) {
LineString line = (LineString)geometry;
return factory.createLineString(get2DCoordinates(line.getCoordinateSequence()));
} else if (geometry instanceof Polygon) {

Polygon polygon = (Polygon)geometry;
LinearRing shell = (LinearRing)polygon.getExteriorRing();
LinearRing shell2d = get2DGeometry(shell);
LinearRing[] holes2d = new LinearRing[polygon.getNumInteriorRing()];
for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
LinearRing hole = (LinearRing)polygon.getI