From: Mathieu Baudier Date: Sat, 30 Sep 2023 09:34:54 +0000 (+0200) Subject: Experiment with streaming GeoJSON directly X-Git-Tag: v2.3.16~15 X-Git-Url: http://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=352297dc44811090e8acb3131ca29e4fc9421741 Experiment with streaming GeoJSON directly --- diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java b/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java index 84b9893..6eb1279 100644 --- a/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java +++ b/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java @@ -35,6 +35,7 @@ import org.argeo.cms.acr.json.AcrJsonUtils; import org.argeo.cms.http.HttpHeader; import org.argeo.cms.http.server.HttpServerUtils; import org.argeo.cms.util.LangUtils; +import org.argeo.cms.util.StreamUtils; import org.geotools.data.DataUtilities; import org.geotools.data.geojson.GeoJSONWriter; import org.geotools.feature.DefaultFeatureCollection; @@ -192,20 +193,48 @@ public class WfsHttpHandler implements HttpHandler { featureAdapter = featureAdapters.get(typeName); } - Geometry defaultGeometry = featureAdapter != null ? featureAdapter.getDefaultGeometry(c, typeName) - : getDefaultGeometry(c); - if (defaultGeometry == null) - return; - generator.writeStartObject(); - generator.write("type", "Feature"); - String featureId = getFeatureId(c); - if (featureId != null) - generator.write("id", featureId); -// GeoJson.writeBBox(generator, defaultGeometry); - generator.writeStartObject(GeoJson.GEOMETRY); - GeoJson.writeGeometry(generator, defaultGeometry); - generator.writeEnd();// geometry object + boolean geometryWritten = false; +// if (typeName.getLocalPart().equals("fieldSimpleFeature")) { +// Content area = c.getContent("place.geom.json").orElse(null); +// if (area != null) { +// generator.writeStartObject(); +// generator.write("type", "Feature"); +// String featureId = getFeatureId(c); +// if (featureId != null) +// generator.write("id", featureId); +// +// generator.flush(); +// try (InputStream in = area.open(InputStream.class)) { +// out.write(",\"geometry\":".getBytes()); +// StreamUtils.copy(in, out); +// //out.flush(); +// } catch (Exception e) { +// log.error(c.getPath() + " : " + e.getMessage()); +// } finally { +// } +// geometryWritten = true; +// }else { +// return; +// } +// } + + if (!geometryWritten) { + Geometry defaultGeometry = featureAdapter != null ? featureAdapter.getDefaultGeometry(c, typeName) + : getDefaultGeometry(c); + if (defaultGeometry == null) + return; + generator.writeStartObject(); + generator.write("type", "Feature"); + String featureId = getFeatureId(c); + if (featureId != null) + generator.write("id", featureId); + +// GeoJson.writeBBox(generator, defaultGeometry); + generator.writeStartObject(GeoJson.GEOMETRY); + GeoJson.writeGeometry(generator, defaultGeometry); + generator.writeEnd();// geometry object + } generator.writeStartObject(GeoJson.PROPERTIES); AcrJsonUtils.writeTimeProperties(generator, c); if (featureAdapter != null)