From 502d05efc036e823abe865b0a57e2c1670cd72f3 Mon Sep 17 00:00:00 2001 From: micklich Date: Sun, 26 Feb 2023 00:57:59 +0100 Subject: [PATCH] [#1307] Split processor in two types, extend documentation --- .../processors/geo/jvm/GeoJvmInit.java | 6 +- .../exceptions/SpJtsGeoemtryException.java | 41 +++++ .../validation/ValidationOutput.java | 12 +- .../processor/validation/ValidationType.java | 10 +- .../complex/TopologyValidationProcessor.java | 143 ++++++++++++++++++ .../GeometryValidationProcessor.java | 88 +++++------ .../documentation.md | 80 ++++++++++ .../icon.png | Bin 0 -> 19690 bytes .../strings.en | 31 ++++ .../documentation.md | 7 +- .../icon.png | Bin .../strings.en | 6 +- 12 files changed, 348 insertions(+), 76 deletions(-) create mode 100755 streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/exceptions/SpJtsGeoemtryException.java create mode 100644 streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/complex/TopologyValidationProcessor.java rename streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/{ => simple}/GeometryValidationProcessor.java (73%) create mode 100644 streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/documentation.md create mode 100644 streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/icon.png create mode 100644 streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/strings.en rename streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/{org.apache.streampipes.processors.geo.jvm.jts.processor.validation => org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple}/documentation.md (91%) rename streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/{org.apache.streampipes.processors.geo.jvm.jts.processor.validation => org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple}/icon.png (100%) rename streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/{org.apache.streampipes.processors.geo.jvm.jts.processor.validation => org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple}/strings.en (86%) diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java index 0d312ea32a..337d454e06 100644 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java @@ -32,7 +32,8 @@ import org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint.LatLngToJtsPointProcessor; import org.apache.streampipes.processors.geo.jvm.jts.processor.reprojection.ReprojectionProcessor; import org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.TrajectoryFromPointsProcessor; -import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.GeometryValidationProcessor; +import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex.TopologyValidationProcessor; +import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple.GeometryValidationProcessor; import org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine.HaversineDistanceCalculatorProcessor; import org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic.HaversineStaticDistanceCalculatorProcessor; import org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps.GoogleMapsGeocoderProcessor; @@ -72,7 +73,8 @@ public SpServiceDefinition provideServiceDefinition() { new TrajectoryFromPointsProcessor(), new SpeedCalculatorProcessor(), new ReprojectionProcessor(), - new GeometryValidationProcessor()) + new GeometryValidationProcessor(), + new TopologyValidationProcessor()) .registerMessagingFormats( new JsonDataFormatFactory(), new CborDataFormatFactory(), diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/exceptions/SpJtsGeoemtryException.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/exceptions/SpJtsGeoemtryException.java new file mode 100755 index 0000000000..ba66f0d2e7 --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/exceptions/SpJtsGeoemtryException.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.streampipes.processors.geo.jvm.jts.exceptions; + +public class SpJtsGeoemtryException extends Exception { + + public SpJtsGeoemtryException() { + } + + public SpJtsGeoemtryException(String message) { + super(message); + } + + public SpJtsGeoemtryException(String message, Throwable cause) { + super(message, cause); + } + + public SpJtsGeoemtryException(Throwable cause) { + super(cause); + } + + public SpJtsGeoemtryException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationOutput.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationOutput.java index 090d3d1d95..3e52e5e17f 100755 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationOutput.java +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationOutput.java @@ -19,16 +19,6 @@ package org.apache.streampipes.processors.geo.jvm.jts.processor.validation; public enum ValidationOutput { - VALID(1), INVALID(2); - - private final int number; - - ValidationOutput(int number) { - this.number = number; - } - - public int getNumber() { - return number; - } + VALID, INVALID; } diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationType.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationType.java index 7352ad754a..45198ce6cc 100755 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationType.java +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/ValidationType.java @@ -18,13 +18,5 @@ package org.apache.streampipes.processors.geo.jvm.jts.processor.validation; public enum ValidationType { - IsEmpty(1), IsValid(2), IsSimple(3); - private final int number; - ValidationType(int i) { - this.number = i; - } - - public int getNumber() { - return number; - } + IsEmpty, IsValid, IsSimple; } diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/complex/TopologyValidationProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/complex/TopologyValidationProcessor.java new file mode 100644 index 0000000000..8574783df3 --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/complex/TopologyValidationProcessor.java @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex; + +import org.apache.streampipes.commons.exceptions.SpRuntimeException; +import org.apache.streampipes.extensions.management.monitoring.SpMonitoringManager; +import org.apache.streampipes.model.DataProcessorType; +import org.apache.streampipes.model.StreamPipesErrorMessage; +import org.apache.streampipes.model.graph.DataProcessorDescription; +import org.apache.streampipes.model.monitoring.SpLogEntry; +import org.apache.streampipes.model.runtime.Event; +import org.apache.streampipes.model.schema.PropertyScope; +import org.apache.streampipes.processors.geo.jvm.jts.exceptions.SpJtsGeoemtryException; +import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder; +import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.ValidationOutput; +import org.apache.streampipes.sdk.builder.ProcessingElementBuilder; +import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.helpers.EpRequirements; +import org.apache.streampipes.sdk.helpers.Labels; +import org.apache.streampipes.sdk.helpers.Locales; +import org.apache.streampipes.sdk.helpers.Options; +import org.apache.streampipes.sdk.helpers.OutputStrategies; +import org.apache.streampipes.sdk.utils.Assets; +import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext; +import org.apache.streampipes.wrapper.routing.SpOutputCollector; +import org.apache.streampipes.wrapper.standalone.ProcessorParams; +import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor; + +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.operation.valid.IsValidOp; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TopologyValidationProcessor extends StreamPipesDataProcessor { + public static final String GEOM_KEY = "geom-key"; + public static final String EPSG_KEY = "epsg-key"; + public static final String VALIDATION_OUTPUT_KEY = "validation-output-key"; + public static final String LOG_OUTPUT_KEY = "log-output-key"; + private String geometryMapper; + private String epsgMapper; + private String outputChoice; + private boolean isLogOutput; + ProcessorParams params; + private static final Logger LOG = LoggerFactory.getLogger(TopologyValidationProcessor.class); + + @Override + public DataProcessorDescription declareModel() { + return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex") + .category(DataProcessorType.GEO) + .withAssets(Assets.DOCUMENTATION, Assets.ICON) + .withLocales(Locales.EN) + .requiredStream(StreamRequirementsBuilder + .create() + .requiredPropertyWithUnaryMapping( + EpRequirements.domainPropertyReq("http://www.opengis.net/ont/geosparql#Geometry"), + Labels.withId(GEOM_KEY), + PropertyScope.MEASUREMENT_PROPERTY) + .requiredPropertyWithUnaryMapping( + EpRequirements.domainPropertyReq("http://data.ign.fr/def/ignf#CartesianCS"), + Labels.withId(EPSG_KEY), + PropertyScope.MEASUREMENT_PROPERTY) + .build()) + .outputStrategy(OutputStrategies.keep()) + .requiredSingleValueSelection( + Labels.withId(VALIDATION_OUTPUT_KEY), + Options.from( + ValidationOutput.VALID.name(), + ValidationOutput.INVALID.name() + ) + ) + .requiredSlideToggle( + Labels.withId(LOG_OUTPUT_KEY), + false) + .build(); + } + + @Override + public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, + EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException { + + this.params = parameters; + this.geometryMapper = parameters.extractor().mappingPropertyValue(GEOM_KEY); + this.epsgMapper = parameters.extractor().mappingPropertyValue(EPSG_KEY); + this.isLogOutput = parameters.extractor().slideToggleValue(LOG_OUTPUT_KEY); + String readValidationOutput = parameters.extractor().selectedSingleValue(VALIDATION_OUTPUT_KEY, String.class); + + if (readValidationOutput.equals(ValidationOutput.VALID.name())) { + this.outputChoice = ValidationOutput.VALID.name(); + } else { + this.outputChoice = ValidationOutput.INVALID.name(); + } + } + + @Override + public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException { + String geom = event.getFieldBySelector(geometryMapper).getAsPrimitive().getAsString(); + Integer epsg = event.getFieldBySelector(epsgMapper).getAsPrimitive().getAsInt(); + + Geometry geometry = SpGeometryBuilder.createSPGeom(geom, epsg); + IsValidOp validator = new IsValidOp(geometry); + validator.setSelfTouchingRingFormingHoleValid(true); + boolean itIsValid = validator.isValid(); + if (!itIsValid){ + if (isLogOutput) { + SpMonitoringManager.INSTANCE.addErrorMessage(params.getGraph().getElementId(), + SpLogEntry.from(System.currentTimeMillis(), + StreamPipesErrorMessage.from(new SpJtsGeoemtryException( + validator.getValidationError().toString())))); + } + } + + if (outputChoice.equals(ValidationOutput.VALID.name())) { + if (itIsValid) { + collector.collect(event); + } + } else if (outputChoice.equals(ValidationOutput.INVALID.name())) { + if (!itIsValid) { + collector.collect(event); + } + } + } + + @Override + public void onDetach() throws SpRuntimeException { + + } +} diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/GeometryValidationProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/simple/GeometryValidationProcessor.java similarity index 73% rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/GeometryValidationProcessor.java rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/simple/GeometryValidationProcessor.java index edb0254aae..5a2d933213 100644 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/GeometryValidationProcessor.java +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/validation/simple/GeometryValidationProcessor.java @@ -16,7 +16,7 @@ * */ -package org.apache.streampipes.processors.geo.jvm.jts.processor.validation; +package org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple; import org.apache.streampipes.commons.exceptions.SpRuntimeException; import org.apache.streampipes.model.DataProcessorType; @@ -24,6 +24,8 @@ import org.apache.streampipes.model.runtime.Event; import org.apache.streampipes.model.schema.PropertyScope; import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder; +import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.ValidationOutput; +import org.apache.streampipes.processors.geo.jvm.jts.processor.validation.ValidationType; import org.apache.streampipes.sdk.builder.ProcessingElementBuilder; import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; import org.apache.streampipes.sdk.helpers.EpRequirements; @@ -38,10 +40,11 @@ import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor; import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.operation.valid.IsValidOp; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.List; + public class GeometryValidationProcessor extends StreamPipesDataProcessor { public static final String GEOM_KEY = "geom-key"; public static final String EPSG_KEY = "epsg-key"; @@ -49,14 +52,16 @@ public class GeometryValidationProcessor extends StreamPipesDataProcessor { public static final String VALIDATION_TYPE_KEY = "validation-type-key"; private String geometryMapper; private String epsgMapper; - private Integer validationOutput; - private Integer validationType; + private String outputChoice; + private boolean isEmptySelected; + private boolean isSimpleSelected; + private boolean isMultiSelected = false; private static final Logger LOG = LoggerFactory.getLogger(GeometryValidationProcessor.class); @Override public DataProcessorDescription declareModel() { - return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.jts.processor.validation") + return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple") .category(DataProcessorType.GEO) .withAssets(Assets.DOCUMENTATION, Assets.ICON) .withLocales(Locales.EN) @@ -79,12 +84,11 @@ public DataProcessorDescription declareModel() { ValidationOutput.INVALID.name() ) ) - .requiredSingleValueSelection( + .requiredMultiValueSelection( Labels.withId(VALIDATION_TYPE_KEY), Options.from( ValidationType.IsEmpty.name(), - ValidationType.IsSimple.name(), - ValidationType.IsValid.name() + ValidationType.IsSimple.name() ) ) .build(); @@ -98,20 +102,24 @@ public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputC this.epsgMapper = parameters.extractor().mappingPropertyValue(EPSG_KEY); String readValidationOutput = parameters.extractor().selectedSingleValue(VALIDATION_OUTPUT_KEY, String.class); - String readValidationType = parameters.extractor().selectedSingleValue(VALIDATION_TYPE_KEY, String.class); + List readValidationType = parameters.extractor().selectedMultiValues(VALIDATION_TYPE_KEY, String.class); if (readValidationOutput.equals(ValidationOutput.VALID.name())) { - this.validationOutput = ValidationOutput.VALID.getNumber(); // 1 + this.outputChoice = ValidationOutput.VALID.name(); } else { - this.validationOutput = 2; + this.outputChoice = ValidationOutput.INVALID.name(); } - if (readValidationType.equals(ValidationType.IsEmpty.name())) { - this.validationType = ValidationType.IsEmpty.getNumber(); // 1 - } else if (readValidationType.equals(ValidationType.IsValid.name())) { - this.validationType = ValidationType.IsSimple.getNumber(); // 2 - } else { - this.validationType = ValidationType.IsValid.getNumber(); // 3 + if (readValidationType.size() == 2) { + this.isEmptySelected = true; + this.isSimpleSelected = true; + this.isMultiSelected = true; + } else if (readValidationType.get(0).equals(ValidationType.IsEmpty.name())) { + this.isEmptySelected = true; + this.isSimpleSelected = false; + } else if (readValidationType.get(0).equals(ValidationType.IsSimple.name())) { + this.isEmptySelected = false; + this.isSimpleSelected = true; } } @@ -122,41 +130,27 @@ public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeEx Geometry geometry = SpGeometryBuilder.createSPGeom(geom, sourceEpsg); - boolean itIsValid = false; - - switch (validationType) { - case 1: - itIsValid = !geometry.isEmpty(); - break; - case 2: - itIsValid = geometry.isSimple(); - break; - case 3: - IsValidOp validater = new IsValidOp(geometry); - validater.setSelfTouchingRingFormingHoleValid(true); - itIsValid = validater.isValid(); - if (!itIsValid) { - validater.getValidationError(); - } - } + boolean itIsNotValid = false; + if (isMultiSelected) { + itIsNotValid = geometry.isEmpty() || !geometry.isSimple(); + } else if (isEmptySelected) { + itIsNotValid = geometry.isEmpty(); + } else if (isSimpleSelected) { + itIsNotValid = !geometry.isSimple(); + } - switch (validationOutput) { - case 1: - if (itIsValid) { - collector.collect(event); - } - break; - case 2: - if (!itIsValid) { - collector.collect(event); - } - break; + if (outputChoice.equals(ValidationOutput.VALID.name())) { + if (!itIsNotValid) { + collector.collect(event); + } + } else if (outputChoice.equals(ValidationOutput.INVALID.name())) { + if (itIsNotValid) { + collector.collect(event); + } } } - - @Override public void onDetach() throws SpRuntimeException { diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/documentation.md new file mode 100644 index 0000000000..c060ce8c9b --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/documentation.md @@ -0,0 +1,80 @@ + + +## Geometry Validation + +

+ +

+ +*** + +## Description +Validates geometry of topology +erros from JTS. + +* **HOLE_OUTSIDE_SHELL**: Indicates that a hole of a polygon lies partially or completely in the exterior of the shell +* **NESTED_HOLES**: Indicates that a hole lies in the interior of another hole in the same polygon +* **DISCONNECTED_INTERIOR**: Indicates that the interior of a polygon is disjoint (often caused by set of contiguous holes splitting the polygon into two parts) +* **SELF_INTERSECTION**: Indicates that two rings of a polygonal geometry intersect +* **RING_SELF_INTERSECTION**: Indicates that a ring self-intersects +* **NESTED_SHELLS**: Indicates that a polygon component of a MultiPolygon lies inside another polygonal component +* **DUPLICATE_RINGS**: Indicates that a polygonal geometry contains two rings which are identical +* **TOO_FEW_POINTS**: Indicates that either a LineString contains a single point or a LinearRing contains 2 or 3 points +* **RING_NOT_CLOSED**: Indicates that a ring is not correctly closed (the first and the last coordinate are different) + + +*** + +## Required inputs + +* JTS Geometry +* EPSG Code +* Validation Type +* Log Output Option + + +*** + +## Configuration + +### Point Geometry Field +Input Point Geometry + +### EPSG field +Integer value representing EPSG code + +### Validation Output +Chose the output result of the filter. +* Valid - all valid events are parsed through +* Invalid - all invalid events are parsed through + + +### Log Output Option +Options to activate Log-Output to the Pipeline Logger Window with detailed reason why Geometry is invalid + + +*** + +### Default Validation Checks + +## Output + +All events that match the validation output. + +### Example diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..546780695ca9aa668e1796e1af05d5fba411de5d GIT binary patch literal 19690 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 y<~|i!;5th=MD?H1oE!MgIlLPE#Wygq$(}0000T literal 0 HcmV?d00001 diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/strings.en new file mode 100644 index 0000000000..b1c06d1a2b --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex/strings.en @@ -0,0 +1,31 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex.title=Geo Geometry Topology Validation Filter +org.apache.streampipes.processors.geo.jvm.jts.processor.validation.complex.description=Validates the geometry of complex topology validation. + +geom-key.title=JTS Geometry Event +geom-key.description=Input Geometry + +epsg-key.title=CRS of Input Geometry +epsg-key.description=EPSG-Code of input point + +validation-output-key.title=Filter Output Type +validation-output-key.description=Consider the output type + +log-output-key.title= Option of Logger Output +log-output-key.description= diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/documentation.md similarity index 91% rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/documentation.md rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/documentation.md index c17c1f2523..02248c4da3 100644 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/documentation.md +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/documentation.md @@ -26,7 +26,7 @@ ## Description - +Checks the geometry event if the geometry is simple and / or empty. *** @@ -58,8 +58,7 @@ Integer value representing EPSG code * Linear rings have the same semantics. * Linear geometries are simple if they do not self-intersect at points other than boundary points. * Zero-dimensional geometries (points) are simple if they have no repeated points. - * Empty Geometrys are always simple! -* IsValid - Tests whether this Geometry is topologically valid, according to the OGC SFS specification. + * Empty Geometries are always simple! ### Validation Output Chose the output result of the filter. @@ -70,6 +69,6 @@ Chose the output result of the filter. ## Output -All events of the validation output. +All events that match the validation output. ### Example diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/icon.png similarity index 100% rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/icon.png rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/icon.png diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/strings.en similarity index 86% rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/strings.en rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/strings.en index 23392e90b5..9ca9fb4642 100644 --- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation/strings.en +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple/strings.en @@ -15,8 +15,8 @@ # limitations under the License. # -org.apache.streampipes.processors.geo.jvm.jts.processor.validation.title=Geo Geometry Validation -org.apache.streampipes.processors.geo.jvm.jts.processor.validation.description=Validates the geometry using different validation categories. +org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple.title=Geo Geometry Validation Filter +org.apache.streampipes.processors.geo.jvm.jts.processor.validation.simple.description=Validates the geometry of emptiness or simple geometry. geom-key.title=JTS Geometry Event geom-key.description=Input Geometry @@ -25,7 +25,7 @@ epsg-key.title=CRS of Input Geometry epsg-key.description=EPSG-Code of input point validation-output-key.title=Filter Output Type -validation-output-key.description=The selected output takes into account +validation-output-key.description=Consider the output type validation-type-key.title= Validation Type validation-type-key.description=The selected output takes into account