diff --git a/common-utitlities/src/main/java/org/eea/datalake/service/SpatialDataHandling.java b/common-utitlities/src/main/java/org/eea/datalake/service/SpatialDataHandling.java index 79926f0889..2328a679a5 100644 --- a/common-utitlities/src/main/java/org/eea/datalake/service/SpatialDataHandling.java +++ b/common-utitlities/src/main/java/org/eea/datalake/service/SpatialDataHandling.java @@ -25,6 +25,8 @@ public interface SpatialDataHandling { String processSpatialPayload(byte[] byteArray) throws IOException, ParseException; + String buildSpatialDescriptorJSON(Integer srid, String type, Double sizeMB, String dimension); + List getGeoJsonEnums(); DataType getGeometryType(byte[] byteArray) throws ParseException; diff --git a/common-utitlities/src/main/java/org/eea/datalake/service/impl/SpatialDataHandlingImpl.java b/common-utitlities/src/main/java/org/eea/datalake/service/impl/SpatialDataHandlingImpl.java index 39cc3e2a0e..253de19185 100644 --- a/common-utitlities/src/main/java/org/eea/datalake/service/impl/SpatialDataHandlingImpl.java +++ b/common-utitlities/src/main/java/org/eea/datalake/service/impl/SpatialDataHandlingImpl.java @@ -233,7 +233,7 @@ public String processSpatialPayload(byte[] byteArray) { /** * Builds lightweight spatial descriptor JSON for UI consumption. */ - private String buildSpatialDescriptorJSON(Integer srid, String type, Double sizeMB, String dimension) { + public String buildSpatialDescriptorJSON(Integer srid, String type, Double sizeMB, String dimension) { SpatialDataDescriptor descriptor = new SpatialDataDescriptor(); descriptor.setSrid(srid); diff --git a/dataset-service/src/main/java/org/eea/dataset/persistence/data/repository/RecordRepositoryImpl.java b/dataset-service/src/main/java/org/eea/dataset/persistence/data/repository/RecordRepositoryImpl.java index 2d3bd042fe..83d0e2c225 100644 --- a/dataset-service/src/main/java/org/eea/dataset/persistence/data/repository/RecordRepositoryImpl.java +++ b/dataset-service/src/main/java/org/eea/dataset/persistence/data/repository/RecordRepositoryImpl.java @@ -44,6 +44,8 @@ import org.eea.interfaces.vo.recordstore.enums.ProcessTypeEnum; import org.eea.multitenancy.TenantResolver; import org.eea.utils.LiteralConstants; +import org.geolatte.geom.G2D; +import org.geolatte.geom.Geometry; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.annotations.QueryHints; @@ -377,6 +379,12 @@ public class RecordRepositoryImpl implements RecordExtendedQueriesRepository { private static final String RECORD_JSON_QUERY = "SELECT record_json from dataset_%s.temp_etlexport " + "WHERE filter_value= ? and id>= ? and id< ?"; + private static final List AFFECTED_TYPES = Arrays.asList( + DataType.POLYGON.getValue(), + DataType.MULTIPOLYGON.getValue(), + DataType.GEOMETRYCOLLECTION.getValue() + ); + /** * Find by table value with order. * @@ -1312,6 +1320,24 @@ private List sanitizeRecords(List records, String data String idPk = (referenced != null) ? referenced.get("idPk").toString() : null; fieldValue.setReferenceFieldSchemaId(idPk); } + if (AFFECTED_TYPES.contains(fieldValue.getType().getValue())) { + // starting with this type of geometry to extract valuable info + //{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[...]} + Geometry geometry = fieldValue.getGeometry(); + if (geometry != null) { + final double BYTES_IN_MB = 1024.0 * 1024.0; // conversion factor bytes -> megabytes + + String type = geometry.getGeometryType().toString(); + int srid = geometry.getSRID(); + int dimensions = geometry.getDimension(); + + final int sizeBytes = fieldValue.getValue().getBytes(StandardCharsets.UTF_8).length; + final double sizeMB = Math.round((sizeBytes / BYTES_IN_MB) * 100.0) / 100.0; + + String jsonValue = spatialDataHandling.buildSpatialDescriptorJSON(srid, type, sizeMB, dimensions +"D"); + fieldValue.setValue(jsonValue); + } + } } sanitizedRecords.add(recordValue); } diff --git a/dataset-service/src/main/java/org/eea/dataset/service/impl/DatasetServiceImpl.java b/dataset-service/src/main/java/org/eea/dataset/service/impl/DatasetServiceImpl.java index cf779ab679..9e49964eda 100644 --- a/dataset-service/src/main/java/org/eea/dataset/service/impl/DatasetServiceImpl.java +++ b/dataset-service/src/main/java/org/eea/dataset/service/impl/DatasetServiceImpl.java @@ -2066,7 +2066,6 @@ private TableVO calculatedErrorsAndRecordsToSee(final Long datasetId, final Stri && (idRules == null || idRules.length == 0) && fieldSchema == null && fieldValue == null) { records = recordRepository.findByTableValueNoOrder(idTableSchema, pageable); List recordVOs = recordNoValidationMapper.entityListToClass(records); - spatialDataHandling.transformSpatialFields(recordVOs); result.setTotalFilteredRecords(0L); result.setRecords(recordVOs); } else {