X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.geo%2Fsrc%2Forg%2Fargeo%2Fapp%2Fgeo%2FGeoUtils.java;h=47096ccc0d1f5b7b2fddb2ce27cedf9d705235b6;hb=2bdad474db365c49118b5a8e2d58c258d53b3d78;hp=e565866bc123cb89ce9ddc172d84b4ee0bd84f7a;hpb=03c171b5d502b461c534816c3c11cae889aef3c1;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/GeoUtils.java b/org.argeo.app.geo/src/org/argeo/app/geo/GeoUtils.java index e565866..47096cc 100644 --- a/org.argeo.app.geo/src/org/argeo/app/geo/GeoUtils.java +++ b/org.argeo.app.geo/src/org/argeo/app/geo/GeoUtils.java @@ -47,7 +47,6 @@ import org.geotools.data.collection.ListFeatureCollection; import org.geotools.data.shapefile.ShapefileDataStore; import org.geotools.data.shapefile.ShapefileDataStoreFactory; import org.geotools.data.simple.SimpleFeatureCollection; -import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.factory.CommonFactoryFinder; import org.geotools.geometry.jts.JTS; import org.geotools.referencing.CRS; @@ -116,44 +115,45 @@ public class GeoUtils { } } - public static void exportToSvg(SimpleFeatureCollection features, Writer out, int width, int height) { + public static void exportToSvg(Geometry[] geometries, Writer out, int width, int height) { try { double minY = Double.POSITIVE_INFINITY; double maxY = Double.NEGATIVE_INFINITY; double minX = Double.POSITIVE_INFINITY; double maxX = Double.NEGATIVE_INFINITY; List shapes = new ArrayList<>(); - for (SimpleFeatureIterator it = features.features(); it.hasNext();) { - SimpleFeature feature = it.next(); + for (Geometry geometry : geometries) { StringBuffer sb = new StringBuffer(); sb.append(" maxX) - maxX = x; - double y = -coord.y; - if (y < minY) - minY = y; - if (y > maxY) - maxY = y; - sb.append(x + "," + y + " "); + if (geometry instanceof Polygon p) { + Point centroid = p.getCentroid(); + String code = "AUTO:42001," + centroid.getX() + "," + centroid.getY(); + CoordinateReferenceSystem auto = CRS.decode(code); + + MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, auto); + + Polygon projed = (Polygon) JTS.transform(p, transform); + + for (Coordinate coord : projed.getCoordinates()) { + double x = coord.x; + if (x < minX) + minX = x; + if (x > maxX) + maxX = x; + double y = -coord.y; + if (y < minY) + minY = y; + if (y > maxY) + maxY = y; + sb.append(x + "," + y + " "); + } + sb.append("\">"); + sb.append("\n"); + shapes.add(sb.toString()); + } else { + throw new IllegalArgumentException("Unsuppported geometry type " + geometry.getClass().getName()); } - sb.append("\">"); - sb.append("\n"); - shapes.add(sb.toString()); - } double viewportHeight = maxY - minY; double viewportWidth = maxX - minX;