You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by mi...@apache.org on 2020/05/21 04:33:20 UTC
[incubator-streampipes-extensions] branch feature/geodesicCalc
updated: introducing GeographicLib Geodesic Calculation
This is an automated email from the ASF dual-hosted git repository.
micklich pushed a commit to branch feature/geodesicCalc
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git
The following commit(s) were added to refs/heads/feature/geodesicCalc by this push:
new 650c420 introducing GeographicLib Geodesic Calculation
650c420 is described below
commit 650c4201526481cbfdcad24d83a71e38146349ad
Author: micklich <fl...@disy.net>
AuthorDate: Thu May 21 06:32:59 2020 +0200
introducing GeographicLib Geodesic Calculation
---
streampipes-processors-geo-jvm/pom.xml | 25 ++++++++---
.../util => jts/helper}/SpLengthCalculator.java | 51 +++++++++++++---------
.../distancecalculator/DistanceCalculator.java | 2 +-
.../DistanceCalculatorController.java | 4 +-
.../StaticDistanceCalculator.java | 4 +-
.../StaticDistanceCalculatorController.java | 2 +-
6 files changed, 56 insertions(+), 32 deletions(-)
diff --git a/streampipes-processors-geo-jvm/pom.xml b/streampipes-processors-geo-jvm/pom.xml
index 11db712..0a81d59 100644
--- a/streampipes-processors-geo-jvm/pom.xml
+++ b/streampipes-processors-geo-jvm/pom.xml
@@ -17,7 +17,8 @@
~
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>streampipes-extensions</artifactId>
<groupId>org.apache.streampipes</groupId>
@@ -27,6 +28,13 @@
<artifactId>streampipes-processors-geo-jvm</artifactId>
+ <properties>
+ <geographiclib.version>1.50</geographiclib.version>
+ <javax.measur.version>1.0</javax.measur.version>
+ <tec.units.version>1.0.3</tec.units.version>
+ <si.uom.version>1.0</si.uom.version>
+ </properties>
+
<dependencies>
<!-- StreamPipes dependencies -->
<dependency>
@@ -87,24 +95,31 @@
<version>1.16.1</version>
</dependency>
+ <dependency>
+ <groupId>net.sf.geographiclib</groupId>
+ <artifactId>GeographicLib-Java</artifactId>
+ <version>${geographiclib.version}</version>
+ </dependency>
-
+ <!-- units -->
<dependency>
<groupId>javax.measure</groupId>
<artifactId>unit-api</artifactId>
- <version>1.0</version>
+ <version>${javax.measur.version}</version>
</dependency>
+
<dependency>
<groupId>tec.units</groupId>
<artifactId>unit-ri</artifactId>
- <version>1.0.3</version>
+ <version>${tec.units.version}</version>
</dependency>
<dependency>
<groupId>si.uom</groupId>
<artifactId>si-units</artifactId>
- <version>1.0</version>
+ <version>${si.uom.version}</version>
</dependency>
+
<dependency>
<groupId>org.apache.streampipes</groupId>
<artifactId>streampipes-measurement-units</artifactId>
diff --git a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/SpLengthCalculator.java b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpLengthCalculator.java
similarity index 76%
rename from streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/SpLengthCalculator.java
rename to streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpLengthCalculator.java
index 495546b..3a4c0a6 100644
--- a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/SpLengthCalculator.java
+++ b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpLengthCalculator.java
@@ -1,13 +1,12 @@
-package org.apache.streampipes.processors.geo.jvm.processor.util;
+package org.apache.streampipes.processors.geo.jvm.jts.helper;
+
+import net.sf.geographiclib.Geodesic;
+import net.sf.geographiclib.GeodesicData;
import si.uom.SI;
import tec.units.ri.quantity.Quantities;
import tec.units.ri.unit.MetricPrefix;
-
-//import com.github.jqudt.Quantity;
-//import com.github.jqudt.Unit;
-
import javax.measure.Quantity;
import javax.measure.Unit;
import javax.measure.quantity.Length;
@@ -18,10 +17,10 @@ public class SpLengthCalculator {
private final double EARTHRADIUS = 6378137; //meters
- private final Unit<Length> M = SI.METRE;
- private final Unit<Length> KM = MetricPrefix.KILO(M);
- private final Unit<Length> MILE = M.multiply(1609344).divide(1000);
- private final Unit<Length> FOOT = M.multiply(3048).divide(10000);
+ private final Unit<Length> METER = SI.METRE;
+ private final Unit<Length> KM = MetricPrefix.KILO(METER);
+ private final Unit<Length> MILE = METER.multiply(1609344).divide(1000);
+ private final Unit<Length> FOOT = METER.multiply(3048).divide(10000);
public enum ValidLengthUnits {
METER(1), KM(2), MILE(3), FOOT(4);
@@ -43,7 +42,7 @@ public class SpLengthCalculator {
// ========================= constructor
public SpLengthCalculator(int decimalPosition) {
- this.length = Quantities.getQuantity(-9999, M);
+ this.length = Quantities.getQuantity(-9999, METER);
this.decimalPosition = decimalPosition;
}
@@ -82,6 +81,7 @@ public class SpLengthCalculator {
// unit Transformation
+
/**
* convert Quantity<Length> value to Unit<Length>
*
@@ -90,7 +90,7 @@ public class SpLengthCalculator {
public void convertUnit(ValidLengthUnits value) {
switch (value.getNumber()) {
case 1:
- setLength(this.length.to(M));
+ setLength(this.length.to(METER));
break;
case 2:
setLength(this.length.to(KM));
@@ -112,7 +112,7 @@ public class SpLengthCalculator {
public void convertUnit(int value) {
switch (value) {
case 1:
- setLength(this.length.to(M));
+ setLength(this.length.to(METER));
break;
case 2:
setLength(this.length.to(KM));
@@ -164,17 +164,28 @@ public class SpLengthCalculator {
}
- public void calcGeodesicDistance(double lat1, double lng1, double lat2, double lng2) {
- // using haversine formula
- double dLat = Math.toRadians(lat2-lat1);
- double dLng = Math.toRadians(lng2-lng1);
- double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
+ public void calcGeodesicDistanceOld(double lat1, double lng1, double lat2, double lng2) {
+ // using haversine formula
+ double dLat = Math.toRadians(lat2 - lat1);
+ double dLng = Math.toRadians(lng2 - lng1);
+ double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
- Math.sin(dLng/2) * Math.sin(dLng/2);
- double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+ Math.sin(dLng / 2) * Math.sin(dLng / 2);
+ double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
float dist = (float) (EARTHRADIUS * c);
- setLength(dist, M);
+ setLength(dist, METER);
}
+
+ public void calcGeodesicDistance(double lat1, double lng1, double lat2, double lng2) {
+ //uses WGS847 Ellipsoid
+ Geodesic geod = Geodesic.WGS84;
+ // calculates all kind of parameters via Inverse method
+ GeodesicData dist = geod.Inverse(lat1, lng1, lat2, lng2);
+ // we only need s12 parameter -> length
+ double result = dist.s12;
+
+ setLength(result, METER);
+ }
}
diff --git a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java
index 4d0072b..406285d 100644
--- a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java
+++ b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java
@@ -20,7 +20,7 @@ package org.apache.streampipes.processors.geo.jvm.processor.distancecalculator;
import org.apache.streampipes.logging.api.Logger;
import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.util.SpLengthCalculator;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpLengthCalculator;
import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
import org.apache.streampipes.wrapper.routing.SpOutputCollector;
import org.apache.streampipes.wrapper.runtime.EventProcessor;
diff --git a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java
index 0d7de4c..fb13876 100644
--- a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java
+++ b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java
@@ -22,7 +22,7 @@ import org.apache.streampipes.model.DataProcessorType;
import org.apache.streampipes.model.graph.DataProcessorDescription;
import org.apache.streampipes.model.graph.DataProcessorInvocation;
import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.processors.geo.jvm.processor.util.SpLengthCalculator;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpLengthCalculator;
import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
@@ -46,8 +46,6 @@ public class DistanceCalculatorController extends StandaloneEventProcessingDecla
private static final String DECIMAL_POSITION_KEY = "decimalPosition-key";
private static final String UNIT_KEY = "unit-key";
- private static final String CALCULATED_DISTANCE_KEY = "calculatedDistance";
-
protected final static String LENGTH_RUNTIME = "geodesicDistance";
protected final static String UNIT_RUNTIME = "geodesicDistanceUnit";
diff --git a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java
index 6b680a4..9bc3598 100644
--- a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java
+++ b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java
@@ -17,9 +17,8 @@
package org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator;
import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.logging.api.Logger;
import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.util.SpLengthCalculator;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpLengthCalculator;
import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
import org.apache.streampipes.wrapper.routing.SpOutputCollector;
import org.apache.streampipes.wrapper.runtime.EventProcessor;
@@ -71,6 +70,7 @@ public class StaticDistanceCalculator implements EventProcessor<StaticDistanceCa
collector.collect(event);
+
} else {
if ((SpGeometryBuilder.isInWGSCoordinateRange(latitude, -90, 90))) {
throw new SpRuntimeException("Input of Latitude value is out of range. Value: "
diff --git a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java
index 814259f..1d424b2 100644
--- a/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java
+++ b/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java
@@ -20,7 +20,7 @@ import org.apache.streampipes.model.DataProcessorType;
import org.apache.streampipes.model.graph.DataProcessorDescription;
import org.apache.streampipes.model.graph.DataProcessorInvocation;
import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.processors.geo.jvm.processor.util.SpLengthCalculator;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpLengthCalculator;
import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;