private final Geometry cloneGeometry(Geometry geom) { if (geom instanceof LineString) return cloneGeometry( (LineString) geom); else if (geom instanceof Polygon) return cloneGeometry( (Polygon) geom); else if (geom instanceof Point) return cloneGeometry( (Point) geom); else return cloneGeometry( (GeometryCollection) geom); }
this.geometry = cloneGeometryLCS(geom); // optimized version else this.geometry = cloneGeometry(geom);
/** * changes this to a new CSF -- more efficient than the JTS way * @param geom */ private final Geometry cloneGeometry(Polygon geom) { LinearRing lr = (LinearRing) cloneGeometry((LinearRing) geom.getExteriorRing()); LinearRing[] rings = new LinearRing[geom.getNumInteriorRing()]; for (int t=0;t<rings.length;t++) { rings[t] = (LinearRing) cloneGeometry((LinearRing) geom.getInteriorRingN(t)); } return getGeometryFactory().createPolygon(lr,rings ); } private final Geometry cloneGeometry(Point geom)
private final Geometry cloneGeometry(GeometryCollection geom) { if (geom.getNumGeometries() == 0) { Geometry[] gs = new Geometry[0]; return getGeometryFactory().createGeometryCollection(gs); } ArrayList gs = new ArrayList(geom.getNumGeometries() ); int n =geom.getNumGeometries(); for (int t=0;t<n;t++) { gs.add( cloneGeometry(geom.getGeometryN(t)) ); } return getGeometryFactory().buildGeometry(gs); }