@DescribeProcess( title = "Polygonize", description = "Creates a set of polygons from linestrings delineating them. The linestrings must be correctly noded (i.e. touch only at endpoints)." ) @DescribeResult(description = "The collection of created polygons") public static Geometry polygonize( @DescribeParameter(name = "geom", description = "Linework to polygonize") Geometry geom) { @SuppressWarnings("rawtypes") List lines = LineStringExtracter.getLines(geom); Polygonizer polygonizer = new Polygonizer(); polygonizer.add(lines); @SuppressWarnings("rawtypes") Collection polys = polygonizer.getPolygons(); Polygon[] polyArray = GeometryFactory.toPolygonArray(polys); return geom.getFactory().createGeometryCollection(polyArray); }
/** * Extracts the {@link LineString} elements from a single {@link Geometry} * and adds them to the provided {@link List}. * * @param geom the geometry from which to extract * @param lines the list to add the extracted LineStrings to * @return the list argument */ public static List getLines(Geometry geom, List lines) { if (geom instanceof LineString) { lines.add(geom); } else if (geom instanceof GeometryCollection) { geom.apply(new LineStringExtracter(lines)); } // skip non-LineString elemental geometries return lines; }
/** * Extracts the {@link LineString} elements from a single {@link Geometry} * and returns them in a {@link List}. * * @param geom the geometry from which to extract * @return a list containing the linear elements */ public static List getLines(Geometry geom) { return getLines(geom, new ArrayList()); }
List<Geometry> points = new ArrayList<>(); geom.apply(new PolygonExtracter(polys)); geom.apply(new LineStringExtracter(lines)); geom.apply(new PointExtracter(points)); geom = geom.getFactory().buildGeometry(polys);
private Geometry onlyLines(Geometry result) { if ((result instanceof LineString) || (result instanceof MultiLineString)) { return result; } List lines = org.locationtech.jts.geom.util.LineStringExtracter.getLines(result); if (lines.size() == 0) { return null; } if (lines.size() == 1) { return (LineString) lines.get(0); } return new MultiLineString( (LineString[]) lines.toArray(new LineString[lines.size()]), result.getFactory()); }
/** * Extracts the {@link LineString} elements from a single {@link Geometry} * and returns them as either a {@link LineString} or {@link MultiLineString}. * * @param geom the geometry from which to extract * @return a linear geometry */ public static Geometry getGeometry(Geometry geom) { return geom.getFactory().buildGeometry(getLines(geom)); }
public static Geometry polygonizeAllErrors(Geometry g) { List lines = LineStringExtracter.getLines(g); Polygonizer polygonizer = new Polygonizer(); polygonizer.add(lines); List errs = new ArrayList(); errs.addAll(polygonizer.getDangles()); errs.addAll(polygonizer.getCutEdges()); errs.addAll(polygonizer.getInvalidRingLines()); return g.getFactory().buildGeometry(errs); }
private static Geometry polygonize(Geometry g, boolean extractOnlyPolygonal) { List lines = LineStringExtracter.getLines(g); Polygonizer polygonizer = new Polygonizer(extractOnlyPolygonal); polygonizer.add(lines); return polygonizer.getGeometry(); /* Collection polys = polygonizer.getPolygons(); Polygon[] polyArray = GeometryFactory.toPolygonArray(polys); return g.getFactory().createGeometryCollection(polyArray); */ } public static Geometry polygonize(Geometry g)
public static Geometry polygonizeCutEdges(Geometry g) { List lines = LineStringExtracter.getLines(g); Polygonizer polygonizer = new Polygonizer(); polygonizer.add(lines); Collection geom = polygonizer.getCutEdges(); return g.getFactory().buildGeometry(geom); } public static Geometry polygonizeInvalidRingLines(Geometry g)
public static Geometry polygonizeInvalidRingLines(Geometry g) { List lines = LineStringExtracter.getLines(g); Polygonizer polygonizer = new Polygonizer(); polygonizer.add(lines); Collection geom = polygonizer.getInvalidRingLines(); return g.getFactory().buildGeometry(geom); } public static Geometry polygonizeAllErrors(Geometry g)
public static Geometry polygonizeDangles(Geometry g) { List lines = LineStringExtracter.getLines(g); Polygonizer polygonizer = new Polygonizer(); polygonizer.add(lines); Collection geom = polygonizer.getDangles(); return g.getFactory().buildGeometry(geom); } public static Geometry polygonizeCutEdges(Geometry g)