dest[coordIndex++] = coordinate;
}
previousCoordinate = coordinate;
}
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
return coordIndex;
}
public static int addReversedCoordinates(final CoordinateSequence src,
final Coordinate[] dest, final int startIndex, final Coordinate lastCoordinate) {
Coordinate endCoordinate = lastCoordinate;
int coordIndex = startIndex;
try {
for (int i = src.size() - 1; i > -1; i--) {
Coordinate coordinate = src.getCoordinate(i);
if (!coordinate.equals(endCoordinate)) {
dest[coordIndex++] = coordinate;
}
endCoordinate = coordinate;
}
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
return coordIndex;
}
public static boolean equalsExact3D(final LineString line1, final LineString line2) {
if (line1.getNumPoints() != line2.getNumPoints()) {
return false;
}
for (int i = 0; i < line1.getNumPoints(); i++) {
line1.getCoordinateN(i);
Coordinate coordinate1 = line1.getCoordinateN(i);
Coordinate coordinate2 = line2.getCoordinateN(i);
if (!coordinate1.equals3D(coordinate2)) {
return false;
}
}
return true;
}
public static boolean equalsExact3D(final Point point1, final Point point2) {
Coordinate coordinate1 = point1.getCoordinate();
Coordinate coordinate2 = point2.getCoordinate();
return (coordinate1.x == coordinate2.x) && (coordinate1.y == coordinate2.y)
&& equalsZ(coordinate1.z, coordinate2.z);
}
public static boolean equalsZ(final double z1, final double z2) {
if (z1 == z2) {
return true;
} else if (Double.isNaN(z1)) {
return (Double.isNaN(z2) || z2 == 0);
} else if (z1 == 0 && Double.isNaN(z2)) {
return true;
} else {
return false;
}
}
public static boolean equalsExact3D(final Geometry geometry1, final Geometry geometry2) {
if ((geometry1 instanceof LineString) && (geometry2 instanceof LineString)) {
LineString line1 = (LineString)geometry1;
LineString line2 = (LineString)geometry2;
return equalsExact3D(line1, line2);
} else if ((geometry1 instanceof Point) && (geometry2 instanceof Point)) {
Point point1 = (Point)geometry1;
Point point2 = (Point)geometry2;
return equalsExact3D(point1, point2);
} else if ((geometry1 instanceof MultiPoint)
&& (geometry2 instanceof MultiPoint)) {
MultiPoint multiPoint1 = (MultiPoint)geometry1;
MultiPoint multiPoint2 = (MultiPoint)geometry2;
return equalsExact3D(multiPoint1, multiPoint2);
}
return false;
}
public static boolean equalsExact3D(final GeometryCollection collection1,
final GeometryCollection collection2) {
if (collection1.getNumGeometries() != collection2.getNumGeometries()) {
return false;
} else {
for (int i = 0; i < collection1.getNumGeometries(); i++) {
Geometry geometry1 = collection1.getGeometryN(i);
Geometry geometry2 = collection2.getGeometryN(i);
if (!equalsExact3D(geometry1, geometry2)) {
return false;
}
}
}
return true;
}
public static double distance(final Coordinate coordinate, final Geometry geometry) {
GeometryFactory factory = geometry.getFactory();
Point point = factory.createPoint(coordinate);
return point.distance(ge