X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.geo%2Fsrc%2Forg%2Fargeo%2Fapp%2Fgeo%2Facr%2FGeoEntityUtils.java;h=162081a58ad40c3545277409a7ad2c90e59572b0;hb=57ef17980bbfe602586d7b007cd91718a24198b5;hp=62b432e7f42e59155d3f0a5f383b9057b087ef7d;hpb=6e13b9416a5fd1f5477eb7233f86d3eacbb88c55;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/acr/GeoEntityUtils.java b/org.argeo.app.geo/src/org/argeo/app/geo/acr/GeoEntityUtils.java index 62b432e..162081a 100644 --- a/org.argeo.app.geo/src/org/argeo/app/geo/acr/GeoEntityUtils.java +++ b/org.argeo.app.geo/src/org/argeo/app/geo/acr/GeoEntityUtils.java @@ -17,6 +17,7 @@ import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentName; import org.argeo.api.acr.DName; import org.argeo.api.acr.QNamed; +import org.argeo.api.cms.CmsLog; import org.argeo.app.api.EntityName; import org.argeo.app.api.EntityType; import org.argeo.app.api.WGS84PosName; @@ -32,9 +33,12 @@ import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonReader; import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonParsingException; /** Utilities around entity types related to geography. */ public class GeoEntityUtils { + private final static CmsLog log = CmsLog.getLog(GeoEntityUtils.class); + public static final String _GEOM_JSON = ".geom.json"; public static void putGeometry(Content c, QNamed name, Geometry geometry) { @@ -54,6 +58,13 @@ public class GeoEntityUtils { } catch (IOException e) { throw new UncheckedIOException("Cannot add geometry " + name + " to " + c, e); } + +// try (BufferedReader in = new BufferedReader( +// new InputStreamReader(geom.open(InputStream.class), StandardCharsets.UTF_8))) { +// System.out.println(in.readLine()); +// } catch (IOException e) { +// throw new UncheckedIOException("Cannot parse " + c, e); +// } updateBoundingBox(c); } @@ -75,6 +86,13 @@ public class GeoEntityUtils { Content geom = c.soleChild(jsonFileName).orElse(null); if (geom == null) return null; +// try (Reader in = new InputStreamReader(geom.open(InputStream.class), StandardCharsets.UTF_8)) { +// String json = StreamUtils.toString(new BufferedReader(in)); +// System.out.println("JSON:\n" + json); +// } catch (IOException e1) { +// // TODO Auto-generated catch block +// e1.printStackTrace(); +// } try (Reader in = new InputStreamReader(geom.open(InputStream.class), StandardCharsets.UTF_8)) { JsonReader jsonReader = Json.createReader(in); JsonObject jsonObject = jsonReader.readObject(); @@ -82,6 +100,11 @@ public class GeoEntityUtils { return readGeom; } catch (IOException e) { throw new UncheckedIOException("Cannot parse " + c, e); + } catch (JsonParsingException e) { + if (log.isTraceEnabled()) + log.warn("Invalid GeoJson for " + geom); + // json is invalid, returning null + return null; } } @@ -91,7 +114,7 @@ public class GeoEntityUtils { } public static Point toPoint(Content c) { - if (c.hasContentClass(EntityType.geopoint)) { + if (c.containsKey(WGS84PosName.lon) && c.containsKey(WGS84PosName.lat)) { Double lat = c.get(WGS84PosName.lat, Double.class).orElseThrow(); Double lon = c.get(WGS84PosName.lon, Double.class).orElseThrow(); return JTS.GEOMETRY_FACTORY_WGS84.createPoint(new Coordinate(lat, lon));