@@ -40,11 +40,12 @@ |
resources.add(csip.ReportService.class); |
resources.add(m.gis.area.V1_0.class); |
resources.add(m.gis.buffer.V1_0.class); |
+ resources.add(m.gis.difference.V1_0.class); |
resources.add(m.gis.envelope.V1_0.class); |
- resources.add(m.gis.extent.V1_0.class); |
- resources.add(m.gis.intersect.V1_0.class); |
- resources.add(m.gis.minboundingcircle.V1_0.class); |
- resources.add(m.gis.minboundingrectangle.V1_0.class); |
+ resources.add(m.gis.extent.V1_0.class); |
+ resources.add(m.gis.intersect.V1_0.class); |
+ resources.add(m.gis.minboundingcircle.V1_0.class); |
+ resources.add(m.gis.minboundingrectangle.V1_0.class); |
resources.add(m.gis.transform.V1_0.class); |
resources.add(m.gis.union.V1_0.class); |
} |
@@ -205,6 +205,7 @@ |
String schemaTable = Constants.DEFAULT_SCHEMA + ".\"" + table + "\""; |
Statement stmt = conn.createStatement(); |
|
+ createSchema(Constants.DEFAULT_SCHEMA); |
deleteTable(schemaTable); |
|
ArrayList<String> props = new ArrayList<>(Arrays.asList(new String[]{ |
@@ -230,6 +231,38 @@ |
} |
|
@Override |
+ public Layer difference(Layer one, Layer two) throws ServiceException { |
+ try { |
+ String table = "diff_" + SESSION_ID + "_" + new RandomString(4).nextString(); |
+ String schemaTable = Constants.DEFAULT_SCHEMA + ".\"" + table + "\""; |
+ Statement stmt = conn.createStatement(); |
+ |
+ createSchema(Constants.DEFAULT_SCHEMA); |
+ deleteTable(schemaTable); |
+ |
+ ArrayList<String> props = new ArrayList<>(Arrays.asList(new String[]{ |
+ "ST_Difference(" + one.getSchemaTable() + ".the_geom, " + two.getSchemaTable() + ".the_geom) AS the_geom ", |
+ getProperties(one, true), |
+ getProperties(two, true), |
+ })); |
+ String sql = "CREATE TABLE " + schemaTable + " AS " + |
+ "SELECT " + LocalStringUtils.join(props, ", ") + " " + |
+ "FROM " + one.getSchemaTable() + ", " + two.getSchemaTable() + " " + |
+ "WHERE " + one.getSchemaTable() + ".the_geom && " + two.getSchemaTable() + ".the_geom"; |
+ LOG.log(Level.INFO, sql); |
+ stmt.executeUpdate(sql); |
+ |
+ Layer res = new Layer(Constants.DEFAULT_SCHEMA, table, this); |
+ updateGeometrySRID(res, GeoJSONParser.getSRIDInt(Constants.DEFAULT_CRS)); |
+ |
+ stmt.close(); |
+ return res; |
+ } catch (SQLException|JSONException ex) { |
+ throw new csip.ServiceException(ex); |
+ } |
+ } |
+ |
+ @Override |
public Layer union(Layer one, Layer two) throws ServiceException { |
try { |
String table = "union_" + SESSION_ID + "_" + new RandomString(4).nextString(); |