if (line1.getLength() > 0) {
lines.add(line1);
}
}
if (coords2Size > 1) {
LineString line2 = geometryFactory.createLineString(coords2);
if (line2.getLength() > 0) {
lines.add(line2);
}
}
return lines;
}
public static void copyCoords(final CoordinateSequence src, final int srcPos,
final CoordinateSequence dest, final int destPos, final int length) {
int dimension = Math.min(src.getDimension(), dest.getDimension());
for (int i = 0; i < length; i++) {
for (int j = 0; j < dimension; j++) {
double ordinate = src.getOrdinate(srcPos + i, j);
dest.setOrdinate(destPos + i, j, ordinate);
}
}
}
public static void setCoordinate(final CoordinateSequence coordinates,
final int i, final Coordinate coordinate) {
coordinates.setOrdinate(i, 0, coordinate.x);
coordinates.setOrdinate(i, 1, coordinate.y);
if (coordinates.getDimension() > 2) {
coordinates.setOrdinate(i, 2, coordinate.z);
}
}
public static boolean isAlmostParallel(final LineString line,
final LineString matchLine, final double maxDistance) {
CoordinateSequence coords = line.getCoordinateSequence();
CoordinateSequence matchCoords = line.getCoordinateSequence();
Coordinate previousCoordinate = coords.getCoordinate(0);
for (int i = 1; i < coords.size(); i++) {
Coordinate coordinate = coords.getCoordinate(i);
Coordinate previousMatchCoordinate = matchCoords.getCoordinate(0);
for (int j = 1; j < coords.size(); j++) {
Coordinate matchCoordinate = matchCoords.getCoordinate(i);
double distance = CGAlgorithms.distanceLineLine(previousCoordinate,
coordinate, previousMatchCoordinate, matchCoordinate);
if (distance <= maxDistance) {
double angle1 = Angle.normalizePositive(Angle.angle(
previousCoordinate, coordinate));
double angle2 = Angle.normalizePositive(Angle.angle(
previousMatchCoordinate, matchCoordinate));
double angleDiff = Math.abs(angle1 - angle2);
if (angleDiff <= Math.PI / 6) {
return true;
}
}
previousMatchCoordinate = matchCoordinate;
}
previousCoordinate = coordinate;
}
return false;
}
public static LineString getMatchingLines(final LineString line1,
final LineString line2, final double maxDistance) {
List
CoordinateSequence coords1 = line1.getCoordinateSequence();
CoordinateSequence coords2 = line1.getCoordinateSequence();
Coordinate previousCoordinate = coords1.getCoordinate(0);
boolean finish = false;
for (int i = 1; i < coords1.size() && !finish; i++) {
Coordinate coordinate = coords1.getCoordinate(i);
Coordinate previousCoordinate2 = coords2.getCoordinate(0);
for (int j = 1; j < coords1.size() && !finish; j++) {
Coordinate coordinate2 = coords2.getCoordinate(i);
double distance = CGAlgorithms.distanceLineLine(previousCoordinate,
coordinate, previousCoordinate2, coordinate2);
if (distance > maxDistance) {
finish = true;
}
previousCoordinate2 = coordinate2;
}
previousCoordinate = coordinate;
}
if (newCoords.size() > 1) {
return createLineString(line1.getFactory(), newCoords);
} else {
return null;
}
}
public static LineString createLineString(final GeometryFactory factory,
final List
Coordinate[] coords = new Coord