private static boolean polygonToLine( Geometry geom, Class<? extends Geometry> targetType, Collection<Geometry> result) { if (geom instanceof Polygon && LineString.class == targetType) { Polygon polygon = (Polygon) geom; result.add( geomBuilder.safeCreateGeometry( LineString.class, polygon.getExteriorRing().getCoordinates())); int i = 0; while (i < polygon.getNumInteriorRing()) { result.add( geomBuilder.safeCreateGeometry( LineString.class, polygon.getInteriorRingN(i).getCoordinates())); i++; } return true; } return false; }
private static boolean simpleToMultiPolygon( Geometry geom, Class<? extends Geometry> targetType, Collection<Geometry> result) { if (!(geom instanceof Polygon) && !(geom instanceof GeometryCollection) && MultiPolygon.class == targetType) { result.add(geomBuilder.safeCreateGeometry(targetType, geom.getCoordinates())); return true; } return false; }
private static boolean collectionToMultiPolygon( Geometry geom, Class<? extends Geometry> targetType, Collection<Geometry> result) { if (!(geom instanceof Polygon) && geom instanceof GeometryCollection && MultiPolygon.class == targetType) { for (int i = 0; i < geom.getNumGeometries(); i++) { result.add( geomBuilder.safeCreateGeometry(targetType, geom.getGeometryN(i).getCoordinates())); } return true; } return false; }
private static boolean collectionToMultiLine( Geometry geom, Class<? extends Geometry> targetType, Collection<Geometry> result) { if (!(geom instanceof Polygon) && !(geom instanceof MultiPolygon) && (geom instanceof GeometryCollection) && MultiLineString.class == targetType) { LineString[] geoms = new LineString[geom.getNumGeometries()]; for (int i = 0; i < geom.getNumGeometries(); i++) { geoms[i] = geomBuilder.safeCreateGeometry(LineString.class, geom.getGeometryN(i).getCoordinates()); } result.add(geomBuilder.factory.createMultiLineString(geoms)); return true; } return false; }
private static boolean toLinearRing( Geometry geom, Class<? extends Geometry> targetType, Collection<Geometry> result) { if (!(targetType == LinearRing.class)) return false; ArrayList<Geometry> tmp = new ArrayList<Geometry>(); if (!simpleToLine(geom, LineString.class, tmp)) { if (!collectionToLine(geom, LineString.class, tmp)) { if (!polygonToLine(geom, LineString.class, tmp)) { if (!multiPolygonToLine(geom, LineString.class, tmp)) { return false; } } } } for (Geometry geometry : tmp) { result.add(geomBuilder.safeCreateGeometry(targetType, geometry.getCoordinates())); } return true; }