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

2014-11-24 07:56:16 · 作者: · 浏览: 11
nteriorRingN(i);
holes2d[i] = get2DGeometry(hole);
}

return factory.createPolygon(shell2d, holes2d);
}
return null;
}

public static LinearRing get2DGeometry(final LinearRing ring) {
CoordinateSequence coordinates = ring.getCoordinateSequence();
CoordinateSequence coordinates2d = get2DCoordinates(coordinates);
GeometryFactory factory = ring.getFactory();
return factory.createLinearRing(coordinates2d);
}

private static CoordinateSequence get2DCoordinates(
final CoordinateSequence coordinateSequence) {
CoordinateSequenceFactory coordFactory = PackedCoordinateSequenceFactory.DOUBLE_FACTORY;
int numCoords = coordinateSequence.size();
CoordinateSequence coordinates = coordFactory.create(numCoords, 2);
for (int i = 0; i < numCoords; i++) {
double x = coordinateSequence.getX(i);
double y = coordinateSequence.getY(i);
coordinates.setOrdinate(i, 0, x);
coordinates.setOrdinate(i, 1, y);
}
return coordinates;
}

/**
* Insert the coordinate at the specified index into the line, returning the
* new line.
*
* @param line The line.
* @param index The index to insert the coordinate.
* @param coordinate The coordinate.
*/
public static LineString insert(final LineString line, final int index,
final Coordinate coordinate) {
CoordinateSequence coords = line.getCoordinateSequence();
CoordinateSequence newCoords = PackedCoordinateSequenceFactory.DOUBLE_FACTORY.create(
coords.size() + 1, coords.getDimension());
int j = 0;
for (int i = 0; i < newCoords.size(); i++) {
if (i == index) {
newCoords.setOrdinate(i, 0, coordinate.x);
newCoords.setOrdinate(i, 1, coordinate.y);
if (newCoords.getDimension() > 2) {
newCoords.setOrdinate(i, 2, coordinate.z);
}
} else {
for (int o = 0; o < newCoords.getDimension(); o++) {
newCoords.setOrdinate(i, o, coords.getOrdinate(j, o));
}
j++;
}
}
GeometryFactory factory = line.getFactory();
LineString newLine = factory.createLineString(newCoords);
return newLine;
}

public static List split(final LineString line, final int index,
final Coordinate coordinate) {
List lines = new ArrayList();
boolean containsCoordinate = coordinate.equals(line.getCoordinateN(index));
CoordinateSequence coords = line.getCoordinateSequence();
int dimension = coords.getDimension();
int coords1Size;
int coords2Size = coords.size() - index;
if (containsCoordinate) {
coords1Size = index + 1;
coords2Size = coords.size() - index;
} else {
coords1Size = index + 2;
coords2Size = coords.size() - index;
}
CoordinateSequence coords1 = PackedCoordinateSequenceFactory.DOUBLE_FACTORY.create(
coords1Size, dimension);
copyCoords(coords, 0, coords1, 0, index + 1);
if (!containsCoordinate) {
setCoordinate(coords1, coords1Size - 1, coordinate);
}

CoordinateSequence coords2 = PackedCoordinateSequenceFactory.DOUBLE_FACTORY.create(
coords2Size, dimension);
if (!containsCoordinate) {
setCoordinate(coords2, 0, coordinate);
copyCoords(coords, index + 1, coords2, 1, coords2.size() - 1);
} else {
copyCoords(coords, index, coords2, 0, coords2.size());
}

GeometryFactory geometryFactory = line.getFactory();

if (coords1Size > 1) {
LineString line1 = geometryFactory.crea