aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-07-14 11:03:42 +0000
committerArne Juul <arnej@verizonmedia.com>2020-07-15 15:39:24 +0000
commit9debffd31d309a7fe4062241a731d5722f4199e0 (patch)
tree53a6e0ec72e6f74f57b05736ca16290e17da0aa6 /vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java
parentc5fc3ffbbd620f50992ac978fe0dab46a0d19f4f (diff)
refactor and require unit for distance
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java b/vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java
new file mode 100644
index 00000000000..0abcbd0c606
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/geo/ParsedDegree.java
@@ -0,0 +1,57 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.geo;
+
+/**
+ * utility for holding one geographical coordinate
+ *
+ * @author arnej27959
+ **/
+public class ParsedDegree {
+ /**
+ * the parsed latitude or longitude
+ * Degrees north or east if positive
+ * Degrees south or west if negative
+ **/
+ public final double degrees;
+
+ // one of these two flag will be true:
+ public final boolean isLatitude;
+ public final boolean isLongitude;
+
+ public ParsedDegree(double value, boolean isLat, boolean isLon) {
+ this.degrees = value;
+ this.isLatitude = isLat;
+ this.isLongitude = isLon;
+ if (isLat && isLon) {
+ throw new IllegalArgumentException("value cannot be both latitude and longitude at once");
+ }
+ if (isLat || isLon) {
+ return;
+ }
+ throw new IllegalArgumentException("value must be either latitude or longitude");
+ }
+
+ static public ParsedDegree fromString(String toParse, boolean assumeLatitude, boolean assumeLongitude) {
+ if (assumeLatitude && assumeLongitude) {
+ throw new IllegalArgumentException("value cannot be both latitude and longitude at once");
+ }
+ var parser = new OneDegreeParser(assumeLatitude, toParse);
+ if (parser.foundLatitude) {
+ return new ParsedDegree(parser.latitude, true, false);
+ }
+ if (parser.foundLongitude) {
+ return new ParsedDegree(parser.longitude, false, true);
+ }
+ throw new IllegalArgumentException("could not parse: "+toParse);
+ }
+
+ public String toString() {
+ if (isLatitude) {
+ return "Latitude: "+degrees+" degrees";
+ } else {
+ return "Longitude: "+degrees+" degrees";
+ }
+ }
+
+}