X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=gis%2Fruntime%2Forg.argeo.gis.geotools%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgeotools%2Fjcr%2FSimpleGeoJcrMapper.java;h=0619e521565917f29e6b8fa7ac818cd82737cc4c;hb=3cd76e9fb547b4e839931c96264f0edc3ec315b6;hp=d3661870546011cef32c9434f2afb785f2e6590c;hpb=7fe4a16dad045373bb014724733c1bbb175d44b5;p=lgpl%2Fargeo-commons.git diff --git a/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/SimpleGeoJcrMapper.java b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/SimpleGeoJcrMapper.java index d36618705..0619e5215 100644 --- a/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/SimpleGeoJcrMapper.java +++ b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/SimpleGeoJcrMapper.java @@ -23,11 +23,17 @@ import org.argeo.jcr.gis.GisTypes; import org.argeo.jts.jcr.JtsJcrUtils; import org.geotools.data.DataStore; import org.geotools.data.FeatureSource; +import org.geotools.referencing.CRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.Name; +import org.opengis.referencing.FactoryException; +import org.opengis.referencing.crs.CoordinateReferenceSystem; +import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; public class SimpleGeoJcrMapper implements GeoJcrMapper { private final static Log log = LogFactory.getLog(SimpleGeoJcrMapper.class); @@ -37,8 +43,6 @@ public class SimpleGeoJcrMapper implements GeoJcrMapper { private Map registeredDataStores = Collections .synchronizedSortedMap(new TreeMap()); - // private Session session; - public Map>> getPossibleFeatureSources() { Map>> res = new TreeMap>>(); dataStores: for (String alias : registeredDataStores.keySet()) { @@ -102,12 +106,42 @@ public class SimpleGeoJcrMapper implements GeoJcrMapper { Node featureNode = featureSourceNode.addNode(featureId); featureNode.addMixin(GisTypes.GIS_FEATURE); Geometry geometry = (Geometry) feature.getDefaultGeometry(); - featureNode.setProperty(GisNames.GIS_SRS, featureSource - .getSchema().getCoordinateReferenceSystem().getName() - .toString()); + // SRS + String srs; + CoordinateReferenceSystem crs = featureSource.getSchema() + .getCoordinateReferenceSystem(); + try { + Integer epsgCode = CRS.lookupEpsgCode(crs, false); + if (epsgCode != null) + srs = "EPSG:" + epsgCode; + else + srs = crs.toWKT(); + } catch (FactoryException e) { + log.warn("Cannot lookup EPSG code", e); + srs = crs.toWKT(); + } + featureNode.setProperty(GisNames.GIS_SRS, srs); + + Polygon bboxPolygon; + Geometry envelope = geometry.getEnvelope(); + if (envelope instanceof Point) { + Point pt = (Point) envelope; + Coordinate[] coords = new Coordinate[4]; + for (int i = 0; i < coords.length; i++) + coords[i] = pt.getCoordinate(); + bboxPolygon = JtsJcrUtils.getGeometryFactory() + .createPolygon( + JtsJcrUtils.getGeometryFactory() + .createLinearRing(coords), null); + } else if (envelope instanceof Polygon) { + bboxPolygon = (Polygon) envelope; + } else { + throw new ArgeoException("Unsupported envelope format " + + envelope.getClass()); + } bbox = JtsJcrUtils.writeWkb(featureNode.getSession(), - geometry.getEnvelope()); + bboxPolygon); featureNode.setProperty(GisNames.GIS_BBOX, bbox); centroid = JtsJcrUtils.writeWkb(featureNode.getSession(), geometry.getCentroid()); @@ -213,9 +247,4 @@ public class SimpleGeoJcrMapper implements GeoJcrMapper { registeredDataStores .remove(properties.get(GeoToolsConstants.ALIAS_KEY)); } - - // public void setSession(Session session) { - // this.session = session; - // } - }