This is an automated email from the ASF dual-hosted git repository. micklich pushed a commit to branch 1321-geo-create-derived-point-of-input-geometry-processor in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 41e4ed0765f189e14f2395c04d56e5e4606d4e69 Author: micklich <[email protected]> AuthorDate: Mon Feb 20 15:43:23 2023 +0100 [#1321] first base setup and add resources --- .../interior/CreateInteriorPointProcessor.java | 118 +++++++++++++++++++++ .../documentation.md | 56 ++++++++++ .../icon.png | Bin 0 -> 16877 bytes .../strings.en | 25 +++++ 4 files changed, 199 insertions(+) diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/derivedgeometry/interior/CreateInteriorPointProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/derivedgeometry/interior/CreateInteriorPointProcessor.java new file mode 100644 index 000000000..8018b84b7 --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/derivedgeometry/interior/CreateInteriorPointProcessor.java @@ -0,0 +1,118 @@ +/* + * 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.derivedgeometry.interior; + +import org.apache.streampipes.commons.exceptions.SpRuntimeException; +import org.apache.streampipes.model.DataProcessorType; +import org.apache.streampipes.model.graph.DataProcessorDescription; +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.sdk.builder.ProcessingElementBuilder; +import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder; +import org.apache.streampipes.sdk.helpers.EpProperties; +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.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.geom.Point; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CreateInteriorPointProcessor extends StreamPipesDataProcessor { + public static final String GEOM_KEY = "geom-key"; + public static final String EPSG_KEY = "epsg-key"; + // OUTPUT RUNTIME NAME + public static final String INTERIOR_GEOM_KEY = "interior-geom-key"; + public static final String INTERIOR_EPSG_KEY = "interior-epsg-key"; + public static final String INTERIOR_GEOM_RUNTIME = "interior-point"; + public static final String INTERIOR_EPSG_RUNTIME = "epsg-interior-point"; + private String geometryMapper; + private String epsgMapper; + private static final Logger LOG = LoggerFactory.getLogger(CreateInteriorPointProcessor.class); + + @Override + public DataProcessorDescription declareModel() { + return ProcessingElementBuilder.create( + "org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior") + .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()) + // adjust output method + .outputStrategy(OutputStrategies.append( + EpProperties.stringEp( + Labels.withId(INTERIOR_GEOM_KEY), + INTERIOR_GEOM_RUNTIME, + "http://www.opengis.net/ont/geosparql#Geometry"), + EpProperties.integerEp( + Labels.withId(INTERIOR_EPSG_KEY), + INTERIOR_EPSG_RUNTIME, + "http://data.ign.fr/def/ignf#CartesianCS") + ) + ) + .build(); + } + + @Override + public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, + EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException { + + this.geometryMapper = parameters.extractor().mappingPropertyValue(GEOM_KEY); + this.epsgMapper = parameters.extractor().mappingPropertyValue(EPSG_KEY); + + } + @Override + public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException { + String geom = event.getFieldBySelector(geometryMapper).getAsPrimitive().getAsString(); + Integer sourceEpsg = event.getFieldBySelector(epsgMapper).getAsPrimitive().getAsInt(); + Geometry geometry = SpGeometryBuilder.createSPGeom(geom, sourceEpsg); + if (geometry instanceof Point) { + // TODO remove check after harmonized semantic types and multiple tpes + LOG.debug("geom is already a point"); + } else { + Point cendroidPoint = (Point) SpGeometryBuilder.createSPGeom(geometry.getCentroid(), geometry.getSRID()); + event.addField(INTERIOR_GEOM_RUNTIME, cendroidPoint.toText()); + event.addField(INTERIOR_EPSG_RUNTIME, cendroidPoint.getSRID()); + 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.derivedgeometry.interior/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/documentation.md new file mode 100755 index 000000000..c6b47978c --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/documentation.md @@ -0,0 +1,56 @@ +<!-- + ~ 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. + ~ + --> + +## Interior Point + +<p align="center"> + <img src="icon.png" width="150px;" class="pe-image-documentation"/> +</p> + +*** + +## Description + +Creates an interior point from a geometry other than a Point itself. +An interior point is guaranteed to lie in the interior of the input geometry, if +it possible to calculate such a point exactly. Otherwise, the point may +lie on the boundary of the geometry. +*** + +## Required inputs + +* JTS Geometry +* EPSG Code +*** + +## Configuration + +### Geometry field +Input Geometry + +### EPSG field +Integer value representing EPSG code + +*** + +## Output +A point geometry with EPSG code. Location is based on + + +### Example + diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/icon.png new file mode 100644 index 000000000..087d6f1fe Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/icon.png differ diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/strings.en new file mode 100755 index 000000000..d0b0956d8 --- /dev/null +++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior/strings.en @@ -0,0 +1,25 @@ +# +# 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.derivedgeometry.interior.title=Geo Create Interior Point +org.apache.streampipes.processors.geo.jvm.jts.processor.derivedgeometry.interior.description=Creates a Point from other Geometries greater than point + +geometry-key.title=JTS Geometry Event +geometry-key.description=Single Geometry + +epsg-key.title=EPSG +epsg-key.description=EPSG
