X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.geo%2Fsrc%2Forg%2Fargeo%2Fapp%2Fgeo%2Fhttp%2FWfsHttpHandler.java;h=6eb12796572279509400b7ee3a537ee25f842015;hb=352297dc44811090e8acb3131ca29e4fc9421741;hp=2a637575d04844a29a35a11f297507966bea30c3;hpb=b4ffcdbc144ccb0633f033bb0be498988374ae68;p=gpl%2Fargeo-suite.git 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 2a63757..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 @@ -28,13 +28,14 @@ import org.argeo.app.api.EntityType; import org.argeo.app.api.WGS84PosName; import org.argeo.app.api.geo.FeatureAdapter; import org.argeo.app.geo.CqlUtils; -import org.argeo.app.geo.GeoJSon; +import org.argeo.app.geo.GeoJson; import org.argeo.app.geo.GpxUtils; import org.argeo.app.geo.JTS; 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; @@ -117,8 +118,7 @@ public class WfsHttpHandler implements HttpHandler { if (cql != null) { CqlUtils.filter(search.from(path), cql); } else { - search.from(path).where((and) -> { - }); + search.from(path); } // search.getWhere().any((f) -> { for (QName typeName : typeNames) { @@ -193,19 +193,49 @@ 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); - GeoJSon.writeGeometry(generator, defaultGeometry); - - generator.writeStartObject("properties"); + 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) featureAdapter.writeProperties(generator, c, typeName);