diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Circle.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Circle.java similarity index 69% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Circle.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Circle.java index ad9881ab72fba..ba61ba8745b67 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Circle.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Circle.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; /** * Circle geometry (not part of WKT standard, but used in elasticsearch) defined by lat/lon coordinates of the center in degrees @@ -25,27 +27,27 @@ */ public class Circle implements Geometry { public static final Circle EMPTY = new Circle(); - private final double lat; - private final double lon; - private final double alt; + private final double y; + private final double x; + private final double z; private final double radiusMeters; private Circle() { - lat = 0; - lon = 0; - alt = Double.NaN; + y = 0; + x = 0; + z = Double.NaN; radiusMeters = -1; } - public Circle(final double lat, final double lon, final double radiusMeters) { - this(lat, lon, Double.NaN, radiusMeters); + public Circle(final double x, final double y, final double radiusMeters) { + this(x, y, Double.NaN, radiusMeters); } - public Circle(final double lat, final double lon, final double alt, final double radiusMeters) { - this.lat = lat; - this.lon = lon; + public Circle(final double x, final double y, final double z, final double radiusMeters) { + this.y = y; + this.x = x; this.radiusMeters = radiusMeters; - this.alt = alt; + this.z = z; if (radiusMeters < 0 ) { throw new IllegalArgumentException("Circle radius [" + radiusMeters + "] cannot be negative"); } @@ -56,20 +58,32 @@ public ShapeType type() { return ShapeType.CIRCLE; } - public double getLat() { - return lat; + public double getY() { + return y; } - public double getLon() { - return lon; + public double getX() { + return x; } public double getRadiusMeters() { return radiusMeters; } + public double getZ() { + return z; + } + + public double getLat() { + return y; + } + + public double getLon() { + return x; + } + public double getAlt() { - return alt; + return z; } @Override @@ -78,23 +92,23 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; Circle circle = (Circle) o; - if (Double.compare(circle.lat, lat) != 0) return false; - if (Double.compare(circle.lon, lon) != 0) return false; + if (Double.compare(circle.y, y) != 0) return false; + if (Double.compare(circle.x, x) != 0) return false; if (Double.compare(circle.radiusMeters, radiusMeters) != 0) return false; - return (Double.compare(circle.alt, alt) == 0); + return (Double.compare(circle.z, z) == 0); } @Override public int hashCode() { int result; long temp; - temp = Double.doubleToLongBits(lat); + temp = Double.doubleToLongBits(y); result = (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(lon); + temp = Double.doubleToLongBits(x); result = 31 * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(radiusMeters); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(alt); + temp = Double.doubleToLongBits(z); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; } @@ -111,11 +125,11 @@ public boolean isEmpty() { @Override public String toString() { - return "lat=" + lat + ", lon=" + lon + ", radius=" + radiusMeters + (Double.isNaN(alt) ? ", alt=" + alt : ""); + return WellKnownText.INSTANCE.toWKT(this); } @Override - public boolean hasAlt() { - return Double.isNaN(alt) == false; + public boolean hasZ() { + return Double.isNaN(z) == false; } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Geometry.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Geometry.java similarity index 91% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Geometry.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Geometry.java index 140dd13427294..f8c65a4e455a2 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Geometry.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Geometry.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; /** * Base class for all Geometry objects supported by elasticsearch @@ -30,7 +30,11 @@ public interface Geometry { boolean isEmpty(); - default boolean hasAlt() { + default boolean hasZ() { return false; } + + default boolean hasAlt() { + return hasZ(); + } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryCollection.java b/libs/geo/src/main/java/org/elasticsearch/geometry/GeometryCollection.java similarity index 87% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryCollection.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/GeometryCollection.java index cc27d7c0972dd..efed0c37772d4 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryCollection.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/GeometryCollection.java @@ -16,12 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.Objects; /** @@ -42,9 +43,9 @@ public GeometryCollection(List shapes) { if (shapes == null || shapes.isEmpty()) { throw new IllegalArgumentException("the list of shapes cannot be null or empty"); } - hasAlt = shapes.get(0).hasAlt(); + hasAlt = shapes.get(0).hasZ(); for (G shape : shapes) { - if (shape.hasAlt() != hasAlt) { + if (shape.hasZ() != hasAlt) { throw new IllegalArgumentException("all elements of the collection should have the same number of dimension"); } } @@ -93,16 +94,12 @@ public Iterator iterator() { } @Override - public boolean hasAlt() { + public boolean hasZ() { return hasAlt; } @Override public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(type().name().toLowerCase(Locale.ROOT)).append("(shapes="); - sb.append(shapes); - sb.append(")"); - return sb.toString(); + return WellKnownText.INSTANCE.toWKT(this); } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryVisitor.java b/libs/geo/src/main/java/org/elasticsearch/geometry/GeometryVisitor.java similarity index 91% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryVisitor.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/GeometryVisitor.java index f4c189fbe288f..523d0f53a9e80 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/GeometryVisitor.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/GeometryVisitor.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; /** * Support class for creating Geometry Visitors. @@ -40,7 +42,7 @@ * The Visitor Pattern replaces this structure with Interface inheritance making it easier to identify all places that are using this * structure, and making a shape a compile-time failure instead of runtime. *

- * See {@link org.elasticsearch.geo.utils.WellKnownText#toWKT(Geometry, StringBuilder)} for an example of how this interface is used. + * See {@link WellKnownText#toWKT(Geometry, StringBuilder)} for an example of how this interface is used. * * @see Visitor Pattern */ diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Line.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Line.java similarity index 52% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Line.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Line.java index 20f4314246950..a7f3c818adcd4 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Line.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Line.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; import java.util.Arrays; @@ -26,71 +28,99 @@ */ public class Line implements Geometry { public static final Line EMPTY = new Line(); - private final double[] lats; - private final double[] lons; - private final double[] alts; + private final double[] y; + private final double[] x; + private final double[] z; protected Line() { - lats = new double[0]; - lons = new double[0]; - alts = null; + y = new double[0]; + x = new double[0]; + z = null; } - public Line(double[] lats, double[] lons) { - this(lats, lons, null); + public Line(double[] x, double[] y) { + this(x, y, null); } - public Line(double[] lats, double[] lons, double[] alts) { - this.lats = lats; - this.lons = lons; - this.alts = alts; - if (lats == null) { - throw new IllegalArgumentException("lats must not be null"); + public Line(double[] x, double[] y, double[] z) { + this.y = y; + this.x = x; + this.z = z; + if (y == null) { + throw new IllegalArgumentException("y must not be null"); } - if (lons == null) { - throw new IllegalArgumentException("lons must not be null"); + if (x == null) { + throw new IllegalArgumentException("x must not be null"); } - if (lats.length != lons.length) { - throw new IllegalArgumentException("lats and lons must be equal length"); + if (y.length != x.length) { + throw new IllegalArgumentException("x and y must be equal length"); } - if (lats.length < 2) { + if (y.length < 2) { throw new IllegalArgumentException("at least two points in the line is required"); } - if (alts != null && alts.length != lats.length) { - throw new IllegalArgumentException("alts and lats must be equal length"); + if (z != null && z.length != x.length) { + throw new IllegalArgumentException("z and x must be equal length"); } } public int length() { - return lats.length; + return y.length; + } + + public double getY(int i) { + return y[i]; + } + + public double getX(int i) { + return x[i]; + } + + public double getZ(int i) { + if (z != null) { + return z[i]; + } else { + return Double.NaN; + } + } + + public double[] getY() { + return y.clone(); + } + + public double[] getX() { + return x.clone(); + } + + public double[] getZ() { + return z == null ? null : z.clone(); } public double getLat(int i) { - return lats[i]; + return y[i]; } public double getLon(int i) { - return lons[i]; + return x[i]; } public double getAlt(int i) { - if (alts != null) { - return alts[i]; + if (z != null) { + return z[i]; } else { return Double.NaN; } } public double[] getLats() { - return lats.clone(); + return y.clone(); } public double[] getLons() { - return lons.clone(); + return x.clone(); } public double[] getAlts() { - return alts == null ? null : alts.clone(); + return z == null ? null : z.clone(); } @Override @@ -105,7 +135,7 @@ public T visit(GeometryVisitor visitor) throws E @Override public boolean isEmpty() { - return lats.length == 0; + return y.length == 0; } @Override @@ -113,27 +143,25 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Line line = (Line) o; - return Arrays.equals(lats, line.lats) && - Arrays.equals(lons, line.lons) && Arrays.equals(alts, line.alts); + return Arrays.equals(y, line.y) && + Arrays.equals(x, line.x) && Arrays.equals(z, line.z); } @Override public int hashCode() { - int result = Arrays.hashCode(lats); - result = 31 * result + Arrays.hashCode(lons); - result = 31 * result + Arrays.hashCode(alts); + int result = Arrays.hashCode(y); + result = 31 * result + Arrays.hashCode(x); + result = 31 * result + Arrays.hashCode(z); return result; } @Override - public boolean hasAlt() { - return alts != null; + public boolean hasZ() { + return z != null; } @Override public String toString() { - return "lats=" + Arrays.toString(lats) + - ", lons=" + Arrays.toString(lons) + - (hasAlt() ? ", alts=" + Arrays.toString(alts) : ""); + return WellKnownText.INSTANCE.toWKT(this); } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/LinearRing.java b/libs/geo/src/main/java/org/elasticsearch/geometry/LinearRing.java similarity index 64% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/LinearRing.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/LinearRing.java index d27e512ef34cc..c0d0150c3023e 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/LinearRing.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/LinearRing.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import java.util.Arrays; /** * Represents a closed line on the earth's surface in lat/lon decimal degrees and optional altitude in meters. @@ -30,21 +32,21 @@ public class LinearRing extends Line { private LinearRing() { } - public LinearRing(double[] lats, double[] lons) { - this(lats, lons, null); + public LinearRing(double[] x, double[] y) { + this(x, y, null); } - public LinearRing(double[] lats, double[] lons, double[] alts) { - super(lats, lons, alts); - if (lats.length < 2) { - throw new IllegalArgumentException("linear ring cannot contain less than 2 points, found " + lats.length); + public LinearRing(double[] x, double[] y, double[] z) { + super(x, y, z); + if (x.length < 2) { + throw new IllegalArgumentException("linear ring cannot contain less than 2 points, found " + x.length); } - int last = lats.length - 1; - if (lats[0] != lats[last] || lons[0] != lons[last] || (alts != null && alts[0] != alts[last])) { + int last = x.length - 1; + if (x[0] != x[last] || y[0] != y[last] || (z != null && z[0] != z[last])) { throw new IllegalArgumentException("first and last points of the linear ring must be the same (it must close itself):" + - " lats[0]=" + lats[0] + " lats[" + last + "]=" + lats[last] + - " lons[0]=" + lons[0] + " lons[" + last + "]=" + lons[last] + - (alts == null ? "" : " alts[0]=" + alts[0] + " alts[" + last + "]=" + alts[last] )); + " x[0]=" + x[0] + " x[" + last + "]=" + x[last] + + " y[0]=" + y[0] + " y[" + last + "]=" + y[last] + + (z == null ? "" : " z[0]=" + z[0] + " z[" + last + "]=" + z[last] )); } } @@ -57,4 +59,11 @@ public ShapeType type() { public T visit(GeometryVisitor visitor) throws E { return visitor.visit(this); } + + @Override + public String toString() { + return "linearring(x=" + Arrays.toString(getX()) + + ", y=" + Arrays.toString(getY()) + + (hasZ() ? ", z=" + Arrays.toString(getZ()) : ""); + } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiLine.java b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiLine.java similarity index 97% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiLine.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/MultiLine.java index ac1f956397bb0..f7e88e36cc9ee 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiLine.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiLine.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import java.util.List; diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPoint.java b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiPoint.java similarity index 97% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPoint.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/MultiPoint.java index 748902bd9eb72..2737586d70ce8 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPoint.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiPoint.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import java.util.List; diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPolygon.java b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiPolygon.java similarity index 97% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPolygon.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/MultiPolygon.java index a843d90165b4b..5226cb4a8f8be 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/MultiPolygon.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/MultiPolygon.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import java.util.List; diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Point.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Point.java similarity index 67% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Point.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Point.java index 88fd5eb06fe79..a4513e8ebb9d1 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Point.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Point.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; /** * Represents a Point on the earth's surface in decimal degrees and optional altitude in meters. @@ -25,26 +27,26 @@ public class Point implements Geometry { public static final Point EMPTY = new Point(); - private final double lat; - private final double lon; - private final double alt; + private final double y; + private final double x; + private final double z; private final boolean empty; private Point() { - lat = 0; - lon = 0; - alt = Double.NaN; + y = 0; + x = 0; + z = Double.NaN; empty = true; } - public Point(double lat, double lon) { - this(lat, lon, Double.NaN); + public Point(double x, double y) { + this(x, y, Double.NaN); } - public Point(double lat, double lon, double alt) { - this.lat = lat; - this.lon = lon; - this.alt = alt; + public Point(double x, double y, double z) { + this.y = y; + this.x = x; + this.z = z; this.empty = false; } @@ -53,16 +55,28 @@ public ShapeType type() { return ShapeType.POINT; } + public double getY() { + return y; + } + + public double getX() { + return x; + } + + public double getZ() { + return z; + } + public double getLat() { - return lat; + return y; } public double getLon() { - return lon; + return x; } public double getAlt() { - return alt; + return z; } @Override @@ -72,20 +86,20 @@ public boolean equals(Object o) { Point point = (Point) o; if (point.empty != empty) return false; - if (Double.compare(point.lat, lat) != 0) return false; - if (Double.compare(point.lon, lon) != 0) return false; - return Double.compare(point.alt, alt) == 0; + if (Double.compare(point.y, y) != 0) return false; + if (Double.compare(point.x, x) != 0) return false; + return Double.compare(point.z, z) == 0; } @Override public int hashCode() { int result; long temp; - temp = Double.doubleToLongBits(lat); + temp = Double.doubleToLongBits(y); result = (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(lon); + temp = Double.doubleToLongBits(x); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(alt); + temp = Double.doubleToLongBits(z); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; } @@ -101,12 +115,13 @@ public boolean isEmpty() { } @Override - public boolean hasAlt() { - return Double.isNaN(alt) == false; + public boolean hasZ() { + return Double.isNaN(z) == false; } @Override public String toString() { - return "lat=" + lat + ", lon=" + lon + (hasAlt() ? ", alt=" + alt : ""); + return WellKnownText.INSTANCE.toWKT(this); } + } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Polygon.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Polygon.java similarity index 96% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Polygon.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Polygon.java index ec6f564774ca9..62cf19bf0b8a0 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Polygon.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Polygon.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import java.util.Collections; import java.util.List; @@ -47,10 +47,10 @@ public Polygon(LinearRing polygon, List holes) { if (holes == null) { throw new IllegalArgumentException("holes must not be null"); } - boolean hasAlt = polygon.hasAlt(); + boolean hasAlt = polygon.hasZ(); checkRing(polygon); for (LinearRing hole : holes) { - if (hole.hasAlt() != hasAlt) { + if (hole.hasZ() != hasAlt) { throw new IllegalArgumentException("holes must have the same number of dimensions as the polygon"); } checkRing(hole); @@ -102,7 +102,7 @@ public boolean isEmpty() { } @Override - public boolean hasAlt() { + public boolean hasZ() { return hasAlt; } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Rectangle.java b/libs/geo/src/main/java/org/elasticsearch/geometry/Rectangle.java similarity index 53% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/Rectangle.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/Rectangle.java index 75ba25721e755..4433cb06c330d 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/Rectangle.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/Rectangle.java @@ -17,7 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; + +import org.elasticsearch.geometry.utils.WellKnownText; /** * Represents a lat/lon rectangle in decimal degrees and optional altitude in meters. @@ -25,90 +27,114 @@ public class Rectangle implements Geometry { public static final Rectangle EMPTY = new Rectangle(); /** - * maximum longitude value (in degrees) + * minimum latitude value (in degrees) */ - private final double minLat; + private final double minY; /** * minimum longitude value (in degrees) */ - private final double minLon; + private final double minX; /** * maximum altitude value (in meters) */ - private final double minAlt; + private final double minZ; /** * maximum latitude value (in degrees) */ - private final double maxLat; + private final double maxY; /** - * minimum latitude value (in degrees) + * minimum longitude value (in degrees) */ - private final double maxLon; + private final double maxX; /** * minimum altitude value (in meters) */ - private final double maxAlt; + private final double maxZ; private final boolean empty; private Rectangle() { - minLat = 0; - minLon = 0; - maxLat = 0; - maxLon = 0; - minAlt = Double.NaN; - maxAlt = Double.NaN; + minY = 0; + minX = 0; + maxY = 0; + maxX = 0; + minZ = Double.NaN; + maxZ = Double.NaN; empty = true; } /** * Constructs a bounding box by first validating the provided latitude and longitude coordinates */ - public Rectangle(double minLat, double maxLat, double minLon, double maxLon) { - this(minLat, maxLat, minLon, maxLon, Double.NaN, Double.NaN); + public Rectangle(double minX, double maxX, double maxY, double minY) { + this(minX, maxX, maxY, minY, Double.NaN, Double.NaN); } /** * Constructs a bounding box by first validating the provided latitude and longitude coordinates */ - public Rectangle(double minLat, double maxLat, double minLon, double maxLon, double minAlt, double maxAlt) { - this.minLon = minLon; - this.maxLon = maxLon; - this.minLat = minLat; - this.maxLat = maxLat; - this.minAlt = minAlt; - this.maxAlt = maxAlt; + public Rectangle(double minX, double maxX, double maxY, double minY, double minZ, double maxZ) { + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY; + this.minZ = minZ; + this.maxZ = maxZ; empty = false; - if (maxLat < minLat) { - throw new IllegalArgumentException("max lat cannot be less than min lat"); + if (maxY < minY) { + throw new IllegalArgumentException("max y cannot be less than min x"); } - if (Double.isNaN(minAlt) != Double.isNaN(maxAlt)) { - throw new IllegalArgumentException("only one altitude value is specified"); + if (Double.isNaN(minZ) != Double.isNaN(maxZ)) { + throw new IllegalArgumentException("only one z value is specified"); } } + public double getMinY() { + return minY; + } + + public double getMinX() { + return minX; + } + + public double getMinZ() { + return minZ; + } + + public double getMaxY() { + return maxY; + } + + public double getMaxX() { + return maxX; + } + + public double getMaxZ() { + return maxZ; + } + public double getMinLat() { - return minLat; + return minY; } public double getMinLon() { - return minLon; + return minX; } public double getMinAlt() { - return minAlt; + return minZ; } public double getMaxLat() { - return maxLat; + return maxY; } public double getMaxLon() { - return maxLon; + return maxX; } public double getMaxAlt() { - return maxAlt; + return maxZ; } @Override @@ -118,29 +144,10 @@ public ShapeType type() { @Override public String toString() { - StringBuilder b = new StringBuilder(); - b.append("Rectangle(lat="); - b.append(minLat); - b.append(" TO "); - b.append(maxLat); - b.append(" lon="); - b.append(minLon); - b.append(" TO "); - b.append(maxLon); - if (maxLon < minLon) { - b.append(" [crosses dateline!]"); - } - if (hasAlt()) { - b.append(" alt="); - b.append(minAlt); - b.append(" TO "); - b.append(maxAlt); - } - b.append(")"); - - return b.toString(); + return WellKnownText.INSTANCE.toWKT(this); } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -148,12 +155,12 @@ public boolean equals(Object o) { Rectangle rectangle = (Rectangle) o; - if (Double.compare(rectangle.minLat, minLat) != 0) return false; - if (Double.compare(rectangle.minLon, minLon) != 0) return false; - if (Double.compare(rectangle.maxLat, maxLat) != 0) return false; - if (Double.compare(rectangle.maxLon, maxLon) != 0) return false; - if (Double.compare(rectangle.minAlt, minAlt) != 0) return false; - return Double.compare(rectangle.maxAlt, maxAlt) == 0; + if (Double.compare(rectangle.minY, minY) != 0) return false; + if (Double.compare(rectangle.minX, minX) != 0) return false; + if (Double.compare(rectangle.maxY, maxY) != 0) return false; + if (Double.compare(rectangle.maxX, maxX) != 0) return false; + if (Double.compare(rectangle.minZ, minZ) != 0) return false; + return Double.compare(rectangle.maxZ, maxZ) == 0; } @@ -161,17 +168,17 @@ public boolean equals(Object o) { public int hashCode() { int result; long temp; - temp = Double.doubleToLongBits(minLat); + temp = Double.doubleToLongBits(minY); result = (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(minLon); + temp = Double.doubleToLongBits(minX); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(maxLat); + temp = Double.doubleToLongBits(maxY); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(maxLon); + temp = Double.doubleToLongBits(maxX); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(minAlt); + temp = Double.doubleToLongBits(minZ); result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(maxAlt); + temp = Double.doubleToLongBits(maxZ); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; } @@ -187,7 +194,7 @@ public boolean isEmpty() { } @Override - public boolean hasAlt() { - return Double.isNaN(maxAlt) == false; + public boolean hasZ() { + return Double.isNaN(maxZ) == false; } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/ShapeType.java b/libs/geo/src/main/java/org/elasticsearch/geometry/ShapeType.java similarity index 97% rename from libs/geo/src/main/java/org/elasticsearch/geo/geometry/ShapeType.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/ShapeType.java index 48a262a8316e3..851c3a711803d 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/geometry/ShapeType.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/ShapeType.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import java.util.Locale; diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/package-info.java b/libs/geo/src/main/java/org/elasticsearch/geometry/package-info.java similarity index 92% rename from libs/geo/src/main/java/org/elasticsearch/geo/package-info.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/package-info.java index 3b59d36b46ae7..d4145bd5bcf4d 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/package-info.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/package-info.java @@ -19,6 +19,6 @@ /** - * Common Geo classes + * Common Geometry classes */ -package org.elasticsearch.geo; +package org.elasticsearch.geometry; diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/BitUtil.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/BitUtil.java similarity index 98% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/BitUtil.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/BitUtil.java index 42ae200e055ba..4cba3859f5ed6 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/BitUtil.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/BitUtil.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.geo.utils; +package org.elasticsearch.geometry.utils; /** * Utilities for common Bit twiddling methods. Borrowed heavily from Lucene (org.apache.lucene.util.BitUtil). diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/GeographyValidator.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeographyValidator.java similarity index 75% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/GeographyValidator.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeographyValidator.java index 756792358abd4..82301cc5038b8 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/GeographyValidator.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeographyValidator.java @@ -17,20 +17,20 @@ * under the License. */ -package org.elasticsearch.geo.utils; - -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +package org.elasticsearch.geometry.utils; + +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; /** * Validator that checks that lats are between -90 and +90 and lons are between -180 and +180 and altitude is present only if @@ -97,9 +97,9 @@ public void validate(Geometry geometry) { @Override public Void visit(Circle circle) throws RuntimeException { - checkLatitude(circle.getLat()); - checkLongitude(circle.getLon()); - checkAltitude(circle.getAlt()); + checkLatitude(circle.getY()); + checkLongitude(circle.getX()); + checkAltitude(circle.getZ()); return null; } @@ -114,9 +114,9 @@ public Void visit(GeometryCollection collection) throws RuntimeException { @Override public Void visit(Line line) throws RuntimeException { for (int i = 0; i < line.length(); i++) { - checkLatitude(line.getLat(i)); - checkLongitude(line.getLon(i)); - checkAltitude(line.getAlt(i)); + checkLatitude(line.getY(i)); + checkLongitude(line.getX(i)); + checkAltitude(line.getZ(i)); } return null; } @@ -124,9 +124,9 @@ public Void visit(Line line) throws RuntimeException { @Override public Void visit(LinearRing ring) throws RuntimeException { for (int i = 0; i < ring.length(); i++) { - checkLatitude(ring.getLat(i)); - checkLongitude(ring.getLon(i)); - checkAltitude(ring.getAlt(i)); + checkLatitude(ring.getY(i)); + checkLongitude(ring.getX(i)); + checkAltitude(ring.getZ(i)); } return null; } @@ -148,9 +148,9 @@ public Void visit(MultiPolygon multiPolygon) throws RuntimeException { @Override public Void visit(Point point) throws RuntimeException { - checkLatitude(point.getLat()); - checkLongitude(point.getLon()); - checkAltitude(point.getAlt()); + checkLatitude(point.getY()); + checkLongitude(point.getX()); + checkAltitude(point.getZ()); return null; } @@ -165,12 +165,12 @@ public Void visit(Polygon polygon) throws RuntimeException { @Override public Void visit(Rectangle rectangle) throws RuntimeException { - checkLatitude(rectangle.getMinLat()); - checkLatitude(rectangle.getMaxLat()); - checkLongitude(rectangle.getMinLon()); - checkLongitude(rectangle.getMaxLon()); - checkAltitude(rectangle.getMinAlt()); - checkAltitude(rectangle.getMaxAlt()); + checkLatitude(rectangle.getMinY()); + checkLatitude(rectangle.getMaxY()); + checkLongitude(rectangle.getMinX()); + checkLongitude(rectangle.getMaxX()); + checkAltitude(rectangle.getMinZ()); + checkAltitude(rectangle.getMaxZ()); return null; } }); diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/Geohash.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/Geohash.java similarity index 95% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/Geohash.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/Geohash.java index e332000bfad96..f67c404dc4188 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/Geohash.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/Geohash.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.geo.utils; +package org.elasticsearch.geometry.utils; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Rectangle; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Rectangle; import java.util.ArrayList; import java.util.Collection; @@ -61,7 +61,7 @@ private Geohash() { /** Returns a {@link Point} instance from a geohash string */ public static Point toPoint(final String geohash) throws IllegalArgumentException { final long hash = mortonEncode(geohash); - return new Point(decodeLatitude(hash), decodeLongitude(hash)); + return new Point(decodeLongitude(hash), decodeLatitude(hash)); } /** @@ -85,15 +85,15 @@ public static Rectangle toBoundingBox(final String geohash) { // add 1 to lat and lon to get topRight ghLong = BitUtil.interleave((int)(lat + 1), (int)(lon + 1)) << 4 | len; final long mortonHash = BitUtil.flipFlop((ghLong >>> 4) << shift); - Point topRight = new Point(decodeLatitude(mortonHash), decodeLongitude(mortonHash)); - return new Rectangle(bottomLeft.getLat(), topRight.getLat(), bottomLeft.getLon(), topRight.getLon()); + Point topRight = new Point(decodeLongitude(mortonHash), decodeLatitude(mortonHash)); + return new Rectangle(bottomLeft.getX(), topRight.getX(), topRight.getY(), bottomLeft.getY()); } else { // We cannot go north of north pole, so just using 90 degrees instead of calculating it using // add 1 to lon to get lon of topRight, we are going to use 90 for lat ghLong = BitUtil.interleave((int)lat, (int)(lon + 1)) << 4 | len; final long mortonHash = BitUtil.flipFlop((ghLong >>> 4) << shift); - Point topRight = new Point(decodeLatitude(mortonHash), decodeLongitude(mortonHash)); - return new Rectangle(bottomLeft.getLat(), 90D, bottomLeft.getLon(), topRight.getLon()); + Point topRight = new Point(decodeLongitude(mortonHash), decodeLatitude(mortonHash)); + return new Rectangle(bottomLeft.getX(), topRight.getX(), 90D, bottomLeft.getY()); } } diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/GeometryValidator.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeometryValidator.java similarity index 92% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/GeometryValidator.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeometryValidator.java index 2caf6738ed469..3a9110aaf8674 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/GeometryValidator.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/GeometryValidator.java @@ -17,9 +17,9 @@ * under the License. */ -package org.elasticsearch.geo.utils; +package org.elasticsearch.geometry.utils; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; /** * Generic geometry validator that can be used by the parser to verify the validity of the parsed geometry diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/StandardValidator.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/StandardValidator.java similarity index 78% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/StandardValidator.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/StandardValidator.java index 37a3a5bac5e74..b5bc5cef7e7ed 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/StandardValidator.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/StandardValidator.java @@ -17,20 +17,20 @@ * under the License. */ -package org.elasticsearch.geo.utils; - -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +package org.elasticsearch.geometry.utils; + +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; /** * Validator that only checks that altitude only shows up if ignoreZValue is set to true. @@ -43,7 +43,7 @@ public StandardValidator(boolean ignoreZValue) { this.ignoreZValue = ignoreZValue; } - protected void checkAltitude(double zValue) { + protected void checkZ(double zValue) { if (ignoreZValue == false && Double.isNaN(zValue) == false) { throw new IllegalArgumentException("found Z value [" + zValue + "] but [ignore_z_value] " + "parameter is [" + ignoreZValue + "]"); @@ -57,7 +57,7 @@ public void validate(Geometry geometry) { @Override public Void visit(Circle circle) throws RuntimeException { - checkAltitude(circle.getAlt()); + checkZ(circle.getZ()); return null; } @@ -72,7 +72,7 @@ public Void visit(GeometryCollection collection) throws RuntimeException { @Override public Void visit(Line line) throws RuntimeException { for (int i = 0; i < line.length(); i++) { - checkAltitude(line.getAlt(i)); + checkZ(line.getZ(i)); } return null; } @@ -80,7 +80,7 @@ public Void visit(Line line) throws RuntimeException { @Override public Void visit(LinearRing ring) throws RuntimeException { for (int i = 0; i < ring.length(); i++) { - checkAltitude(ring.getAlt(i)); + checkZ(ring.getZ(i)); } return null; } @@ -102,7 +102,7 @@ public Void visit(MultiPolygon multiPolygon) throws RuntimeException { @Override public Void visit(Point point) throws RuntimeException { - checkAltitude(point.getAlt()); + checkZ(point.getZ()); return null; } @@ -117,8 +117,8 @@ public Void visit(Polygon polygon) throws RuntimeException { @Override public Void visit(Rectangle rectangle) throws RuntimeException { - checkAltitude(rectangle.getMinAlt()); - checkAltitude(rectangle.getMaxAlt()); + checkZ(rectangle.getMinZ()); + checkZ(rectangle.getMaxZ()); return null; } }); diff --git a/libs/geo/src/main/java/org/elasticsearch/geo/utils/WellKnownText.java b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/WellKnownText.java similarity index 89% rename from libs/geo/src/main/java/org/elasticsearch/geo/utils/WellKnownText.java rename to libs/geo/src/main/java/org/elasticsearch/geometry/utils/WellKnownText.java index 4fd4bdb6fd150..a59820785e968 100644 --- a/libs/geo/src/main/java/org/elasticsearch/geo/utils/WellKnownText.java +++ b/libs/geo/src/main/java/org/elasticsearch/geometry/utils/WellKnownText.java @@ -17,20 +17,20 @@ * under the License. */ -package org.elasticsearch.geo.utils; - -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +package org.elasticsearch.geometry.utils; + +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; import java.io.IOException; import java.io.StreamTokenizer; @@ -45,6 +45,9 @@ * Utility class for converting to and from WKT */ public class WellKnownText { + /* The instance of WKT serializer that coerces values and accepts Z component */ + public static final WellKnownText INSTANCE = new WellKnownText(true, new StandardValidator(true)); + public static final String EMPTY = "EMPTY"; public static final String SPACE = " "; public static final String LPAREN = "("; @@ -80,12 +83,12 @@ public void toWKT(Geometry geometry, StringBuilder sb) { @Override public Void visit(Circle circle) { sb.append(LPAREN); - visitPoint(circle.getLon(), circle.getLat(), Double.NaN); + visitPoint(circle.getX(), circle.getY(), Double.NaN); sb.append(SPACE); sb.append(circle.getRadiusMeters()); - if (circle.hasAlt()) { + if (circle.hasZ()) { sb.append(SPACE); - sb.append(circle.getAlt()); + sb.append(circle.getZ()); } sb.append(RPAREN); return null; @@ -110,11 +113,11 @@ public Void visit(GeometryCollection collection) { @Override public Void visit(Line line) { sb.append(LPAREN); - visitPoint(line.getLon(0), line.getLat(0), line.getAlt(0)); + visitPoint(line.getX(0), line.getY(0), line.getZ(0)); for (int i = 1; i < line.length(); ++i) { sb.append(COMMA); sb.append(SPACE); - visitPoint(line.getLon(i), line.getLat(i), line.getAlt(i)); + visitPoint(line.getX(i), line.getY(i), line.getZ(i)); } sb.append(RPAREN); return null; @@ -139,12 +142,12 @@ public Void visit(MultiPoint multiPoint) { } // walk through coordinates: sb.append(LPAREN); - visitPoint(multiPoint.get(0).getLon(), multiPoint.get(0).getLat(), multiPoint.get(0).getAlt()); + visitPoint(multiPoint.get(0).getX(), multiPoint.get(0).getY(), multiPoint.get(0).getZ()); for (int i = 1; i < multiPoint.size(); ++i) { sb.append(COMMA); sb.append(SPACE); Point point = multiPoint.get(i); - visitPoint(point.getLon(), point.getLat(), point.getAlt()); + visitPoint(point.getX(), point.getY(), point.getZ()); } sb.append(RPAREN); return null; @@ -162,7 +165,7 @@ public Void visit(Point point) { sb.append(EMPTY); } else { sb.append(LPAREN); - visitPoint(point.getLon(), point.getLat(), point.getAlt()); + visitPoint(point.getX(), point.getY(), point.getZ()); sb.append(RPAREN); } return null; @@ -206,17 +209,24 @@ public Void visit(Polygon polygon) { public Void visit(Rectangle rectangle) { sb.append(LPAREN); // minX, maxX, maxY, minY - // TODO: Add 3D support - sb.append(rectangle.getMinLon()); + sb.append(rectangle.getMinX()); sb.append(COMMA); sb.append(SPACE); - sb.append(rectangle.getMaxLon()); + sb.append(rectangle.getMaxX()); sb.append(COMMA); sb.append(SPACE); - sb.append(rectangle.getMaxLat()); + sb.append(rectangle.getMaxY()); sb.append(COMMA); sb.append(SPACE); - sb.append(rectangle.getMinLat()); + sb.append(rectangle.getMinY()); + if (rectangle.hasZ()) { + sb.append(COMMA); + sb.append(SPACE); + sb.append(rectangle.getMinZ()); + sb.append(COMMA); + sb.append(SPACE); + sb.append(rectangle.getMaxZ()); + } sb.append(RPAREN); return null; } @@ -298,9 +308,9 @@ private Point parsePoint(StreamTokenizer stream) throws IOException, ParseExcept double lat = nextNumber(stream); Point pt; if (isNumberNext(stream)) { - pt = new Point(lat, lon, nextNumber(stream)); + pt = new Point(lon, lat, nextNumber(stream)); } else { - pt = new Point(lat, lon); + pt = new Point(lon, lat); } nextCloser(stream); return pt; @@ -338,9 +348,9 @@ private MultiPoint parseMultiPoint(StreamTokenizer stream) throws IOException, P parseCoordinates(stream, lats, lons, alts); for (int i = 0; i < lats.size(); i++) { if (alts.isEmpty()) { - points.add(new Point(lats.get(i), lons.get(i))); + points.add(new Point(lons.get(i), lats.get(i))); } else { - points.add(new Point(lats.get(i), lons.get(i), alts.get(i))); + points.add(new Point(lons.get(i), lats.get(i), alts.get(i))); } } return new MultiPoint(Collections.unmodifiableList(points)); @@ -356,9 +366,9 @@ private Line parseLine(StreamTokenizer stream) throws IOException, ParseExceptio ArrayList alts = new ArrayList<>(); parseCoordinates(stream, lats, lons, alts); if (alts.isEmpty()) { - return new Line(toArray(lats), toArray(lons)); + return new Line(toArray(lons), toArray(lats)); } else { - return new Line(toArray(lats), toArray(lons), toArray(alts)); + return new Line(toArray(lons), toArray(lats), toArray(alts)); } } @@ -383,9 +393,9 @@ private LinearRing parsePolygonHole(StreamTokenizer stream) throws IOException, parseCoordinates(stream, lats, lons, alts); closeLinearRingIfCoerced(lats, lons, alts); if (alts.isEmpty()) { - return new LinearRing(toArray(lats), toArray(lons)); + return new LinearRing(toArray(lons), toArray(lats)); } else { - return new LinearRing(toArray(lats), toArray(lons), toArray(alts)); + return new LinearRing(toArray(lons), toArray(lats), toArray(alts)); } } @@ -405,9 +415,9 @@ private Polygon parsePolygon(StreamTokenizer stream) throws IOException, ParseEx closeLinearRingIfCoerced(lats, lons, alts); LinearRing shell; if (alts.isEmpty()) { - shell = new LinearRing(toArray(lats), toArray(lons)); + shell = new LinearRing(toArray(lons), toArray(lats)); } else { - shell = new LinearRing(toArray(lats), toArray(lons), toArray(alts)); + shell = new LinearRing(toArray(lons), toArray(lats), toArray(alts)); } if (holes.isEmpty()) { return new Polygon(shell); @@ -460,7 +470,7 @@ private Rectangle parseBBox(StreamTokenizer stream) throws IOException, ParseExc nextComma(stream); double minLat = nextNumber(stream); nextCloser(stream); - return new Rectangle(minLat, maxLat, minLon, maxLon); + return new Rectangle(minLon, maxLon, maxLat, minLat); } @@ -475,7 +485,7 @@ private Circle parseCircle(StreamTokenizer stream) throws IOException, ParseExce if (isNumberNext(stream) == true) { alt = nextNumber(stream); } - Circle circle = new Circle(lat, lon, alt, radius); + Circle circle = new Circle(lon, lat, alt, radius); nextCloser(stream); return circle; } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/BaseGeometryTestCase.java b/libs/geo/src/test/java/org/elasticsearch/geometry/BaseGeometryTestCase.java similarity index 94% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/BaseGeometryTestCase.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/BaseGeometryTestCase.java index 841983da8daa8..ae2dd17e4285b 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/BaseGeometryTestCase.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/BaseGeometryTestCase.java @@ -17,13 +17,13 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.Version; import org.elasticsearch.common.io.stream.Writeable; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.test.AbstractWireTestCase; import java.io.IOException; @@ -36,7 +36,7 @@ abstract class BaseGeometryTestCase extends AbstractWireTest protected final T createTestInstance() { boolean hasAlt = randomBoolean(); T obj = createTestInstance(hasAlt); - assertEquals(hasAlt, obj.hasAlt()); + assertEquals(hasAlt, obj.hasZ()); return obj; } @@ -70,7 +70,7 @@ public static void testVisitor(Geometry geom) { private Object verify(Geometry geometry, String expectedClass) { assertFalse("Visitor should be called only once", called.getAndSet(true)); assertSame(geom, geometry); - assertEquals(geometry.getClass().getName(), "org.elasticsearch.geo.geometry." + expectedClass); + assertEquals(geometry.getClass().getName(), "org.elasticsearch.geometry." + expectedClass); return "result"; } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/CircleTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/CircleTests.java similarity index 70% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/CircleTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/CircleTests.java index 14107494928bd..eba391dc97038 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/CircleTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/CircleTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -31,20 +31,20 @@ public class CircleTests extends BaseGeometryTestCase { @Override protected Circle createTestInstance(boolean hasAlt) { if (hasAlt) { - return new Circle(randomDoubleBetween(-90, 90, true), randomDoubleBetween(-180, 180, true), randomDouble(), + return new Circle(randomDoubleBetween(-180, 180, true), randomDoubleBetween(-90, 90, true), randomDouble(), randomDoubleBetween(0, 100, false)); } else { - return new Circle(randomDoubleBetween(-90, 90, true), randomDoubleBetween(-180, 180, true), randomDoubleBetween(0, 100, false)); + return new Circle(randomDoubleBetween(-180, 180, true), randomDoubleBetween(-90, 90, true), randomDoubleBetween(0, 100, false)); } } public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); - assertEquals("circle (20.0 10.0 15.0)", wkt.toWKT(new Circle(10, 20, 15))); - assertEquals(new Circle(10, 20, 15), wkt.fromWKT("circle (20.0 10.0 15.0)")); + assertEquals("circle (20.0 10.0 15.0)", wkt.toWKT(new Circle(20, 10, 15))); + assertEquals(new Circle(20, 10, 15), wkt.fromWKT("circle (20.0 10.0 15.0)")); - assertEquals("circle (20.0 10.0 15.0 25.0)", wkt.toWKT(new Circle(10, 20, 25, 15))); - assertEquals(new Circle(10, 20, 25, 15), wkt.fromWKT("circle (20.0 10.0 15.0 25.0)")); + assertEquals("circle (20.0 10.0 15.0 25.0)", wkt.toWKT(new Circle(20, 10, 25, 15))); + assertEquals(new Circle(20, 10, 25, 15), wkt.fromWKT("circle (20.0 10.0 15.0 25.0)")); assertEquals("circle EMPTY", wkt.toWKT(Circle.EMPTY)); assertEquals(Circle.EMPTY, wkt.fromWKT("circle EMPTY)")); @@ -52,18 +52,18 @@ public void testBasicSerialization() throws IOException, ParseException { public void testInitValidation() { GeometryValidator validator = new GeographyValidator(true); - IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(10, 20, -1))); + IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(20, 10, -1))); assertEquals("Circle radius [-1.0] cannot be negative", ex.getMessage()); - ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(100, 20, 1))); + ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(20, 100, 1))); assertEquals("invalid latitude 100.0; must be between -90.0 and 90.0", ex.getMessage()); - ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(10, 200, 1))); + ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Circle(200, 10, 1))); assertEquals("invalid longitude 200.0; must be between -180.0 and 180.0", ex.getMessage()); - ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate(new Circle(10, 200, 1, 20))); + ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate(new Circle(200, 10, 1, 20))); assertEquals("found Z value [1.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new Circle(10, 200, 1, 20)); + new StandardValidator(true).validate(new Circle(200, 10, 1, 20)); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryCollectionTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/GeometryCollectionTests.java similarity index 86% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryCollectionTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/GeometryCollectionTests.java index 06f778aedafb1..0783983131ea0 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryCollectionTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/GeometryCollectionTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -35,14 +35,12 @@ protected GeometryCollection createTestInstance(boolean hasAlt) { return GeometryTestUtils.randomGeometryCollection(hasAlt); } - - public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); assertEquals("geometrycollection (point (20.0 10.0),point EMPTY)", - wkt.toWKT(new GeometryCollection(Arrays.asList(new Point(10, 20), Point.EMPTY)))); + wkt.toWKT(new GeometryCollection(Arrays.asList(new Point(20, 10), Point.EMPTY)))); - assertEquals(new GeometryCollection(Arrays.asList(new Point(10, 20), Point.EMPTY)), + assertEquals(new GeometryCollection(Arrays.asList(new Point(20, 10), Point.EMPTY)), wkt.fromWKT("geometrycollection (point (20.0 10.0),point EMPTY)")); assertEquals("geometrycollection EMPTY", wkt.toWKT(GeometryCollection.EMPTY)); @@ -58,13 +56,13 @@ public void testInitValidation() { assertEquals("the list of shapes cannot be null or empty", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new GeometryCollection<>( - Arrays.asList(new Point(10, 20), new Point(10, 20, 30)))); + Arrays.asList(new Point(20, 10), new Point(20, 10, 30)))); assertEquals("all elements of the collection should have the same number of dimension", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new GeometryCollection(Collections.singletonList(new Point(10, 20, 30))))); + new GeometryCollection(Collections.singletonList(new Point(20, 10, 30))))); assertEquals("found Z value [30.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new GeometryCollection(Collections.singletonList(new Point(10, 20, 30)))); + new StandardValidator(true).validate(new GeometryCollection(Collections.singletonList(new Point(20, 10, 30)))); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryValidatorTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/GeometryValidatorTests.java similarity index 95% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryValidatorTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/GeometryValidatorTests.java index c747fc2df50a7..3c732a25ec1e1 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/GeometryValidatorTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/GeometryValidatorTests.java @@ -17,11 +17,11 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.test.ESTestCase; public class GeometryValidatorTests extends ESTestCase { diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/LineTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/LineTests.java similarity index 74% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/LineTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/LineTests.java index ff18dcf927011..7342e0b562d19 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/LineTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/LineTests.java @@ -17,13 +17,13 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -36,12 +36,12 @@ protected Line createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); - assertEquals("linestring (3.0 1.0, 4.0 2.0)", wkt.toWKT(new Line(new double[]{1, 2}, new double[]{3, 4}))); - assertEquals(new Line(new double[]{1, 2}, new double[]{3, 4}), wkt.fromWKT("linestring (3 1, 4 2)")); + assertEquals("linestring (3.0 1.0, 4.0 2.0)", wkt.toWKT(new Line(new double[]{3, 4}, new double[]{1, 2}))); + assertEquals(new Line(new double[]{3, 4}, new double[]{1, 2}), wkt.fromWKT("linestring (3 1, 4 2)")); - assertEquals("linestring (3.0 1.0 5.0, 4.0 2.0 6.0)", wkt.toWKT(new Line(new double[]{1, 2}, new double[]{3, 4}, + assertEquals("linestring (3.0 1.0 5.0, 4.0 2.0 6.0)", wkt.toWKT(new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{5, 6}))); - assertEquals(new Line(new double[]{1, 2}, new double[]{3, 4}, new double[]{6, 5}), + assertEquals(new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{6, 5}), wkt.fromWKT("linestring (3 1 6, 4 2 5)")); assertEquals("linestring EMPTY", wkt.toWKT(Line.EMPTY)); @@ -51,22 +51,22 @@ public void testBasicSerialization() throws IOException, ParseException { public void testInitValidation() { GeometryValidator validator = new GeographyValidator(true); IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Line(new double[]{1}, new double[]{3}))); + () -> validator.validate(new Line(new double[]{3}, new double[]{1}))); assertEquals("at least two points in the line is required", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Line(new double[]{1, 2, 3, 1}, new double[]{3, 4, 500, 3}))); + () -> validator.validate(new Line(new double[]{3, 4, 500, 3}, new double[]{1, 2, 3, 1}))); assertEquals("invalid longitude 500.0; must be between -180.0 and 180.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Line(new double[]{1, 100, 3, 1}, new double[]{3, 4, 5, 3}))); + () -> validator.validate(new Line(new double[]{3, 4, 5, 3}, new double[]{1, 100, 3, 1}))); assertEquals("invalid latitude 100.0; must be between -90.0 and 90.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new Line(new double[]{1, 2}, new double[]{3, 4}, new double[]{6, 5}))); + new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{6, 5}))); assertEquals("found Z value [6.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new Line(new double[]{1, 2}, new double[]{3, 4}, new double[]{6, 5})); + new StandardValidator(true).validate(new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{6, 5})); } public void testWKTValidation() { diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/LinearRingTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/LinearRingTests.java similarity index 73% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/LinearRingTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/LinearRingTests.java index 34ebb8e25d596..5ad2a3beb8e66 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/LinearRingTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/LinearRingTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.test.ESTestCase; public class LinearRingTests extends ESTestCase { @@ -30,44 +30,44 @@ public class LinearRingTests extends ESTestCase { public void testBasicSerialization() { UnsupportedOperationException ex = expectThrows(UnsupportedOperationException.class, () -> new WellKnownText(true, new GeographyValidator(true)) - .toWKT(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}))); + .toWKT(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}))); assertEquals("line ring cannot be serialized using WKT", ex.getMessage()); } public void testInitValidation() { GeometryValidator validator = new GeographyValidator(true); IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new LinearRing(new double[]{1, 2, 3}, new double[]{3, 4, 5}))); - assertEquals("first and last points of the linear ring must be the same (it must close itself): lats[0]=1.0 lats[2]=3.0 " + - "lons[0]=3.0 lons[2]=5.0", + () -> validator.validate(new LinearRing(new double[]{3, 4, 5}, new double[]{1, 2, 3}))); + assertEquals("first and last points of the linear ring must be the same (it must close itself): x[0]=3.0 x[2]=5.0 y[0]=1.0 " + + "y[2]=3.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new LinearRing(new double[]{1, 2, 1}, new double[]{3, 4, 3}, new double[]{1, 2, 3}))); - assertEquals("first and last points of the linear ring must be the same (it must close itself): lats[0]=1.0 lats[2]=1.0 " + - "lons[0]=3.0 lons[2]=3.0 alts[0]=1.0 alts[2]=3.0", + () -> validator.validate(new LinearRing(new double[]{3, 4, 3}, new double[]{1, 2, 1}, new double[]{1, 2, 3}))); + assertEquals("first and last points of the linear ring must be the same (it must close itself): x[0]=3.0 x[2]=3.0 y[0]=1.0 " + + "y[2]=1.0 z[0]=1.0 z[2]=3.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new LinearRing(new double[]{1}, new double[]{3}))); + () -> validator.validate(new LinearRing(new double[]{3}, new double[]{1}))); assertEquals("at least two points in the line is required", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 500, 3}))); + () -> validator.validate(new LinearRing(new double[]{3, 4, 500, 3}, new double[]{1, 2, 3, 1}))); assertEquals("invalid longitude 500.0; must be between -180.0 and 180.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new LinearRing(new double[]{1, 100, 3, 1}, new double[]{3, 4, 5, 3}))); + () -> validator.validate(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 100, 3, 1}))); assertEquals("invalid latitude 100.0; must be between -90.0 and 90.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 1, 1, 1}))); + new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 1, 1, 1}))); assertEquals("found Z value [1.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 1, 1, 1})); + new StandardValidator(true).validate(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 1, 1, 1})); } public void testVisitor() { - BaseGeometryTestCase.testVisitor(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})); + BaseGeometryTestCase.testVisitor(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiLineTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiLineTests.java similarity index 85% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiLineTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/MultiLineTests.java index 2b230dbbe52ef..4610932e0afbf 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiLineTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiLineTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -45,8 +45,8 @@ protected MultiLine createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); assertEquals("multilinestring ((3.0 1.0, 4.0 2.0))", wkt.toWKT( - new MultiLine(Collections.singletonList(new Line(new double[]{1, 2}, new double[]{3, 4}))))); - assertEquals(new MultiLine(Collections.singletonList(new Line(new double[]{1, 2}, new double[]{3, 4}))), + new MultiLine(Collections.singletonList(new Line(new double[]{3, 4}, new double[]{1, 2}))))); + assertEquals(new MultiLine(Collections.singletonList(new Line(new double[]{3, 4}, new double[]{1, 2}))), wkt.fromWKT("multilinestring ((3 1, 4 2))")); assertEquals("multilinestring EMPTY", wkt.toWKT(MultiLine.EMPTY)); @@ -55,10 +55,10 @@ public void testBasicSerialization() throws IOException, ParseException { public void testValidation() { IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new MultiLine(Collections.singletonList(new Line(new double[]{1, 2}, new double[]{3, 4}, new double[]{6, 5}))))); + new MultiLine(Collections.singletonList(new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{6, 5}))))); assertEquals("found Z value [6.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); new StandardValidator(true).validate( - new MultiLine(Collections.singletonList(new Line(new double[]{1, 2}, new double[]{3, 4}, new double[]{6, 5})))); + new MultiLine(Collections.singletonList(new Line(new double[]{3, 4}, new double[]{1, 2}, new double[]{6, 5})))); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPointTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiPointTests.java similarity index 75% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPointTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/MultiPointTests.java index ae0e05792897f..469801279ee17 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPointTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiPointTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -46,18 +46,18 @@ protected MultiPoint createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); assertEquals("multipoint (2.0 1.0)", wkt.toWKT( - new MultiPoint(Collections.singletonList(new Point(1, 2))))); - assertEquals(new MultiPoint(Collections.singletonList(new Point(1 ,2))), + new MultiPoint(Collections.singletonList(new Point(2, 1))))); + assertEquals(new MultiPoint(Collections.singletonList(new Point(2, 1))), wkt.fromWKT("multipoint (2 1)")); assertEquals("multipoint (2.0 1.0, 3.0 4.0)", - wkt.toWKT(new MultiPoint(Arrays.asList(new Point(1, 2), new Point(4, 3))))); - assertEquals(new MultiPoint(Arrays.asList(new Point(1, 2), new Point(4, 3))), + wkt.toWKT(new MultiPoint(Arrays.asList(new Point(2, 1), new Point(3, 4))))); + assertEquals(new MultiPoint(Arrays.asList(new Point(2, 1), new Point(3, 4))), wkt.fromWKT("multipoint (2 1, 3 4)")); assertEquals("multipoint (2.0 1.0 10.0, 3.0 4.0 20.0)", - wkt.toWKT(new MultiPoint(Arrays.asList(new Point(1, 2, 10), new Point(4, 3, 20))))); - assertEquals(new MultiPoint(Arrays.asList(new Point(1, 2, 10), new Point(4, 3, 20))), + wkt.toWKT(new MultiPoint(Arrays.asList(new Point(2, 1, 10), new Point(3, 4, 20))))); + assertEquals(new MultiPoint(Arrays.asList(new Point(2, 1, 10), new Point(3, 4, 20))), wkt.fromWKT("multipoint (2 1 10, 3 4 20)")); assertEquals("multipoint EMPTY", wkt.toWKT(MultiPoint.EMPTY)); @@ -66,9 +66,9 @@ public void testBasicSerialization() throws IOException, ParseException { public void testValidation() { IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new MultiPoint(Collections.singletonList(new Point(1, 2 ,3))))); + new MultiPoint(Collections.singletonList(new Point(2, 1, 3))))); assertEquals("found Z value [3.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new MultiPoint(Collections.singletonList(new Point(1, 2 ,3)))); + new StandardValidator(true).validate(new MultiPoint(Collections.singletonList(new Point(2, 1, 3)))); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPolygonTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiPolygonTests.java similarity index 78% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPolygonTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/MultiPolygonTests.java index 45e05c93d135a..dfd8142ae2c9e 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/MultiPolygonTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/MultiPolygonTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -46,9 +46,9 @@ public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); assertEquals("multipolygon (((3.0 1.0, 4.0 2.0, 5.0 3.0, 3.0 1.0)))", wkt.toWKT(new MultiPolygon(Collections.singletonList( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})))))); + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})))))); assertEquals(new MultiPolygon(Collections.singletonList( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})))), + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})))), wkt.fromWKT("multipolygon (((3.0 1.0, 4.0 2.0, 5.0 3.0, 3.0 1.0)))")); assertEquals("multipolygon EMPTY", wkt.toWKT(MultiPolygon.EMPTY)); @@ -58,12 +58,12 @@ public void testBasicSerialization() throws IOException, ParseException { public void testValidation() { IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( new MultiPolygon(Collections.singletonList( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})) + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 2, 3, 1})) )))); assertEquals("found Z value [1.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); new StandardValidator(true).validate( new MultiPolygon(Collections.singletonList( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}))))); + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 2, 3, 1}))))); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/PointTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/PointTests.java similarity index 77% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/PointTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/PointTests.java index 1adb3705f1374..70920aac49b88 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/PointTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/PointTests.java @@ -17,13 +17,13 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -36,11 +36,11 @@ protected Point createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); - assertEquals("point (20.0 10.0)", wkt.toWKT(new Point(10, 20))); - assertEquals(new Point(10, 20), wkt.fromWKT("point (20.0 10.0)")); + assertEquals("point (20.0 10.0)", wkt.toWKT(new Point(20, 10))); + assertEquals(new Point(20, 10), wkt.fromWKT("point (20.0 10.0)")); - assertEquals("point (20.0 10.0 100.0)", wkt.toWKT(new Point(10, 20, 100))); - assertEquals(new Point(10, 20, 100), wkt.fromWKT("point (20.0 10.0 100.0)")); + assertEquals("point (20.0 10.0 100.0)", wkt.toWKT(new Point(20, 10, 100))); + assertEquals(new Point(20, 10, 100), wkt.fromWKT("point (20.0 10.0 100.0)")); assertEquals("point EMPTY", wkt.toWKT(Point.EMPTY)); assertEquals(Point.EMPTY, wkt.fromWKT("point EMPTY)")); @@ -48,16 +48,16 @@ public void testBasicSerialization() throws IOException, ParseException { public void testInitValidation() { GeometryValidator validator = new GeographyValidator(true); - IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Point(100, 10))); + IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Point(10, 100))); assertEquals("invalid latitude 100.0; must be between -90.0 and 90.0", ex.getMessage()); - ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Point(10, 500))); + ex = expectThrows(IllegalArgumentException.class, () -> validator.validate(new Point(500, 10))); assertEquals("invalid longitude 500.0; must be between -180.0 and 180.0", ex.getMessage()); - ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate(new Point(1, 2, 3))); + ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate(new Point(2, 1, 3))); assertEquals("found Z value [3.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new Point(1, 2, 3)); + new StandardValidator(true).validate(new Point(2, 1, 3)); } public void testWKTValidation() { diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/PolygonTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/PolygonTests.java similarity index 67% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/PolygonTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/PolygonTests.java index c4a5ae5dd5abd..dd2c0552101d6 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/PolygonTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/PolygonTests.java @@ -17,12 +17,12 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -37,22 +37,22 @@ protected Polygon createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); assertEquals("polygon ((3.0 1.0, 4.0 2.0, 5.0 3.0, 3.0 1.0))", - wkt.toWKT(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})))); - assertEquals(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})), + wkt.toWKT(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})))); + assertEquals(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})), wkt.fromWKT("polygon ((3 1, 4 2, 5 3, 3 1))")); assertEquals("polygon ((3.0 1.0 5.0, 4.0 2.0 4.0, 5.0 3.0 3.0, 3.0 1.0 5.0))", - wkt.toWKT(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{5, 4, 3, 5})))); - assertEquals(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{5, 4, 3, 5})), + wkt.toWKT(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{5, 4, 3, 5})))); + assertEquals(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{5, 4, 3, 5})), wkt.fromWKT("polygon ((3 1 5, 4 2 4, 5 3 3, 3 1 5))")); // Auto closing in coerce mode - assertEquals(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})), + assertEquals(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})), wkt.fromWKT("polygon ((3 1, 4 2, 5 3))")); - assertEquals(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{5, 4, 3, 5})), + assertEquals(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{5, 4, 3, 5})), wkt.fromWKT("polygon ((3 1 5, 4 2 4, 5 3 3))")); - assertEquals(new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}), - Collections.singletonList(new LinearRing(new double[]{1.5, 1.5, 1.0, 1.5}, new double[]{0.5, 2.5, 2.0, 0.5}))), + assertEquals(new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}), + Collections.singletonList(new LinearRing(new double[]{0.5, 2.5, 2.0, 0.5}, new double[]{1.5, 1.5, 1.0, 1.5}))), wkt.fromWKT("polygon ((3 1, 4 2, 5 3, 3 1), (0.5 1.5, 2.5 1.5, 2.0 1.0))")); assertEquals("polygon EMPTY", wkt.toWKT(Polygon.EMPTY)); @@ -61,31 +61,31 @@ public void testBasicSerialization() throws IOException, ParseException { public void testInitValidation() { IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, - () -> new Polygon(new LinearRing(new double[]{1, 2, 1}, new double[]{3, 4, 3}))); + () -> new Polygon(new LinearRing(new double[]{3, 4, 3}, new double[]{1, 2, 1}))); assertEquals("at least 4 polygon points required", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}), null)); + () -> new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}), null)); assertEquals("holes must not be null", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{5, 4, 3, 5}), - Collections.singletonList(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3})))); + () -> new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{5, 4, 3, 5}), + Collections.singletonList(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})))); assertEquals("holes must have the same number of dimensions as the polygon", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1})))); + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 2, 3, 1})))); assertEquals("found Z value [1.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); new StandardValidator(true).validate( - new Polygon(new LinearRing(new double[]{1, 2, 3, 1}, new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}))); + new Polygon(new LinearRing(new double[]{3, 4, 5, 3}, new double[]{1, 2, 3, 1}, new double[]{1, 2, 3, 1}))); } public void testWKTValidation() { IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, () -> new WellKnownText(false, new GeographyValidator(true)).fromWKT("polygon ((3 1 5, 4 2 4, 5 3 3))")); assertEquals("first and last points of the linear ring must be the same (it must close itself): " + - "lats[0]=1.0 lats[2]=3.0 lons[0]=3.0 lons[2]=5.0 alts[0]=5.0 alts[2]=3.0", ex.getMessage()); + "x[0]=3.0 x[2]=5.0 y[0]=1.0 y[2]=3.0 z[0]=5.0 z[2]=3.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new WellKnownText(randomBoolean(), new GeographyValidator(false)).fromWKT("polygon ((3 1 5, 4 2 4, 5 3 3, 3 1 5))")); @@ -95,6 +95,6 @@ public void testWKTValidation() { () -> new WellKnownText(false, new GeographyValidator(randomBoolean())).fromWKT( "polygon ((3 1, 4 2, 5 3, 3 1), (0.5 1.5, 2.5 1.5, 2.0 1.0))")); assertEquals("first and last points of the linear ring must be the same (it must close itself): " + - "lats[0]=1.5 lats[2]=1.0 lons[0]=0.5 lons[2]=2.0", ex.getMessage()); + "x[0]=0.5 x[2]=2.0 y[0]=1.5 y[2]=1.0", ex.getMessage()); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/RectangleTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/RectangleTests.java similarity index 72% rename from libs/geo/src/test/java/org/elasticsearch/geo/geometry/RectangleTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/RectangleTests.java index a5f3e4d468610..b613e5b191f19 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/geometry/RectangleTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/RectangleTests.java @@ -17,13 +17,13 @@ * under the License. */ -package org.elasticsearch.geo.geometry; +package org.elasticsearch.geometry; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; @@ -37,8 +37,8 @@ protected Rectangle createTestInstance(boolean hasAlt) { public void testBasicSerialization() throws IOException, ParseException { WellKnownText wkt = new WellKnownText(true, new GeographyValidator(true)); - assertEquals("bbox (10.0, 20.0, 40.0, 30.0)", wkt.toWKT(new Rectangle(30, 40, 10, 20))); - assertEquals(new Rectangle(30, 40, 10, 20), wkt.fromWKT("bbox (10.0, 20.0, 40.0, 30.0)")); + assertEquals("bbox (10.0, 20.0, 40.0, 30.0)", wkt.toWKT(new Rectangle(10, 20, 40, 30))); + assertEquals(new Rectangle(10, 20, 40, 30), wkt.fromWKT("bbox (10.0, 20.0, 40.0, 30.0)")); assertEquals("bbox EMPTY", wkt.toWKT(Rectangle.EMPTY)); assertEquals(Rectangle.EMPTY, wkt.fromWKT("bbox EMPTY)")); @@ -47,25 +47,25 @@ public void testBasicSerialization() throws IOException, ParseException { public void testInitValidation() { GeometryValidator validator = new GeographyValidator(true); IllegalArgumentException ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Rectangle(1, 100, 2, 3))); + () -> validator.validate(new Rectangle(2, 3, 100, 1))); assertEquals("invalid latitude 100.0; must be between -90.0 and 90.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Rectangle(1, 2, 200, 3))); + () -> validator.validate(new Rectangle(200, 3, 2, 1))); assertEquals("invalid longitude 200.0; must be between -180.0 and 180.0", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Rectangle(2, 1, 2, 3))); - assertEquals("max lat cannot be less than min lat", ex.getMessage()); + () -> validator.validate(new Rectangle(2, 3, 1, 2))); + assertEquals("max y cannot be less than min x", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, - () -> validator.validate(new Rectangle(1, 2, 2, 3, 5, Double.NaN))); - assertEquals("only one altitude value is specified", ex.getMessage()); + () -> validator.validate(new Rectangle(2, 3, 2, 1, 5, Double.NaN))); + assertEquals("only one z value is specified", ex.getMessage()); ex = expectThrows(IllegalArgumentException.class, () -> new StandardValidator(false).validate( - new Rectangle(30, 40, 50, 10, 20, 60))); + new Rectangle(50, 10, 40, 30, 20, 60))); assertEquals("found Z value [20.0] but [ignore_z_value] parameter is [false]", ex.getMessage()); - new StandardValidator(true).validate(new Rectangle(30, 40, 50, 10, 20, 60)); + new StandardValidator(true).validate(new Rectangle(50, 10, 40, 30, 20, 60)); } } diff --git a/libs/geo/src/test/java/org/elasticsearch/geo/utils/GeoHashTests.java b/libs/geo/src/test/java/org/elasticsearch/geometry/utils/GeoHashTests.java similarity index 90% rename from libs/geo/src/test/java/org/elasticsearch/geo/utils/GeoHashTests.java rename to libs/geo/src/test/java/org/elasticsearch/geometry/utils/GeoHashTests.java index c919d072f0009..e0cb2528480b2 100644 --- a/libs/geo/src/test/java/org/elasticsearch/geo/utils/GeoHashTests.java +++ b/libs/geo/src/test/java/org/elasticsearch/geometry/utils/GeoHashTests.java @@ -16,14 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.geo.utils; +package org.elasticsearch.geometry.utils; import org.elasticsearch.common.geo.GeoPoint; -import org.elasticsearch.geo.geometry.Rectangle; +import org.elasticsearch.geometry.Rectangle; import org.elasticsearch.test.ESTestCase; /** - * Tests for {@link org.elasticsearch.geo.utils.Geohash} + * Tests for {@link Geohash} */ public class GeoHashTests extends ESTestCase { public void testGeohashAsLongRoutines() { @@ -67,9 +67,9 @@ public void testBboxFromHash() { // check that the length is as expected double expectedLonDiff = 360.0 / (Math.pow(8.0, (level + 1) / 2) * Math.pow(4.0, level / 2)); double expectedLatDiff = 180.0 / (Math.pow(4.0, (level + 1) / 2) * Math.pow(8.0, level / 2)); - assertEquals(expectedLonDiff, bbox.getMaxLon() - bbox.getMinLon(), 0.00001); - assertEquals(expectedLatDiff, bbox.getMaxLat() - bbox.getMinLat(), 0.00001); - assertEquals(hash, Geohash.stringEncode(bbox.getMinLon(), bbox.getMinLat(), level)); + assertEquals(expectedLonDiff, bbox.getMaxX() - bbox.getMinX(), 0.00001); + assertEquals(expectedLatDiff, bbox.getMaxY() - bbox.getMinY(), 0.00001); + assertEquals(hash, Geohash.stringEncode(bbox.getMinX(), bbox.getMinY(), level)); } public void testGeohashExtremes() { @@ -101,7 +101,7 @@ public void testLongGeohashes() { public void testNorthPoleBoundingBox() { Rectangle bbox = Geohash.toBoundingBox("zzbxfpgzupbx"); // Bounding box with maximum precision touching north pole - assertEquals(90.0, bbox.getMaxLat(), 0.0000001); // Should be 90 degrees + assertEquals(90.0, bbox.getMaxY(), 0.0000001); // Should be 90 degrees } public void testInvalidGeohashes() { diff --git a/server/src/main/java/org/elasticsearch/common/geo/GeoJson.java b/server/src/main/java/org/elasticsearch/common/geo/GeoJson.java index 032fddce6b77f..0a1454a868738 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/GeoJson.java +++ b/server/src/main/java/org/elasticsearch/common/geo/GeoJson.java @@ -31,20 +31,20 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentSubParser; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; -import org.elasticsearch.geo.geometry.ShapeType; -import org.elasticsearch.geo.utils.GeometryValidator; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; +import org.elasticsearch.geometry.ShapeType; +import org.elasticsearch.geometry.utils.GeometryValidator; import java.io.IOException; import java.util.ArrayList; @@ -92,7 +92,7 @@ public static XContentBuilder toXContent(Geometry geometry, XContentBuilder buil public XContentBuilder visit(Circle circle) throws IOException { builder.field(FIELD_RADIUS.getPreferredName(), DistanceUnit.METERS.toString(circle.getRadiusMeters())); builder.field(ShapeParser.FIELD_COORDINATES.getPreferredName()); - return coordinatesToXContent(circle.getLat(), circle.getLon(), circle.getAlt()); + return coordinatesToXContent(circle.getY(), circle.getX(), circle.getZ()); } @Override @@ -130,9 +130,9 @@ public XContentBuilder visit(MultiPoint multiPoint) throws IOException { builder.startArray(ShapeParser.FIELD_COORDINATES.getPreferredName()); for (int i = 0; i < multiPoint.size(); i++) { Point p = multiPoint.get(i); - builder.startArray().value(p.getLon()).value(p.getLat()); - if (p.hasAlt()) { - builder.value(p.getAlt()); + builder.startArray().value(p.getX()).value(p.getY()); + if (p.hasZ()) { + builder.value(p.getZ()); } builder.endArray(); } @@ -153,7 +153,7 @@ public XContentBuilder visit(MultiPolygon multiPolygon) throws IOException { @Override public XContentBuilder visit(Point point) throws IOException { builder.field(ShapeParser.FIELD_COORDINATES.getPreferredName()); - return coordinatesToXContent(point.getLat(), point.getLon(), point.getAlt()); + return coordinatesToXContent(point.getY(), point.getX(), point.getZ()); } @Override @@ -169,8 +169,8 @@ public XContentBuilder visit(Polygon polygon) throws IOException { @Override public XContentBuilder visit(Rectangle rectangle) throws IOException { builder.startArray(ShapeParser.FIELD_COORDINATES.getPreferredName()); - coordinatesToXContent(rectangle.getMaxLat(), rectangle.getMinLon(), rectangle.getMinAlt()); // top left - coordinatesToXContent(rectangle.getMinLat(), rectangle.getMaxLon(), rectangle.getMaxAlt()); // bottom right + coordinatesToXContent(rectangle.getMaxY(), rectangle.getMinX(), rectangle.getMinZ()); // top left + coordinatesToXContent(rectangle.getMinY(), rectangle.getMaxX(), rectangle.getMaxZ()); // bottom right return builder.endArray(); } @@ -185,9 +185,9 @@ private XContentBuilder coordinatesToXContent(double lat, double lon, double alt private XContentBuilder coordinatesToXContent(Line line) throws IOException { builder.startArray(); for (int i = 0; i < line.length(); i++) { - builder.startArray().value(line.getLon(i)).value(line.getLat(i)); - if (line.hasAlt()) { - builder.value(line.getAlt(i)); + builder.startArray().value(line.getX(i)).value(line.getY(i)); + if (line.hasZ()) { + builder.value(line.getZ(i)); } builder.endArray(); } @@ -257,7 +257,7 @@ private static Geometry createGeometry(String type, List geometries, C } verifyNulls(type, geometries, orientation, null); Point point = coordinates.asPoint(); - return new Circle(point.getLat(), point.getLon(), point.getAlt(), radius.convert(DistanceUnit.METERS).value); + return new Circle(point.getX(), point.getY(), point.getZ(), radius.convert(DistanceUnit.METERS).value); case POINT: verifyNulls(type, geometries, orientation, radius); return coordinates.asPoint(); @@ -353,7 +353,7 @@ private static Point parseCoordinate(XContentParser parser) throws IOException { if (parser.currentToken() == XContentParser.Token.VALUE_NUMBER) { throw new ElasticsearchParseException("geo coordinates greater than 3 dimensions are not supported"); } - return new Point(lat, lon, alt); + return new Point(lon, lat, alt); } /** @@ -465,7 +465,7 @@ protected int numDimensions() { throw new ElasticsearchException("attempting to get number of dimensions on an empty coordinate node"); } if (coordinate != null) { - return coordinate.hasAlt() ? 3 : 2; + return coordinate.hasZ() ? 3 : 2; } return children.get(0).numDimensions(); } @@ -513,10 +513,10 @@ private double[][] asLineComponents(boolean orientation, boolean coerce, boolean int i = orientation ? 0 : lats.length - 1; for (CoordinateNode node : children) { Point point = node.asPoint(); - lats[i] = point.getLat(); - lons[i] = point.getLon(); + lats[i] = point.getY(); + lons[i] = point.getX(); if (alts != null) { - alts[i] = point.getAlt(); + alts[i] = point.getZ(); } i = orientation ? i + 1 : i - 1; } @@ -536,12 +536,12 @@ private double[][] asLineComponents(boolean orientation, boolean coerce, boolean public Line asLineString(boolean coerce) { double[][] components = asLineComponents(true, coerce, false); - return new Line(components[0], components[1], components[2]); + return new Line(components[1], components[0], components[2]); } public LinearRing asLinearRing(boolean orientation, boolean coerce) { double[][] components = asLineComponents(orientation, coerce, true); - return new LinearRing(components[0], components[1], components[2]); + return new LinearRing(components[1], components[0], components[2]); } public MultiLine asMultiLineString(boolean coerce) { @@ -592,13 +592,13 @@ public Rectangle asRectangle() { // verify coordinate bounds, correct if necessary Point uL = children.get(0).coordinate; Point lR = children.get(1).coordinate; - return new Rectangle(lR.getLat(), uL.getLat(), uL.getLon(), lR.getLon()); + return new Rectangle(uL.getX(), lR.getX(), uL.getY(), lR.getY()); } @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { if (children == null) { - builder.startArray().value(coordinate.getLon()).value(coordinate.getLat()).endArray(); + builder.startArray().value(coordinate.getX()).value(coordinate.getY()).endArray(); } else { builder.startArray(); for (CoordinateNode child : children) { diff --git a/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java b/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java index 1043c9115e8ef..8b95b68fbcf81 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java +++ b/server/src/main/java/org/elasticsearch/common/geo/GeoPoint.java @@ -29,13 +29,13 @@ import org.elasticsearch.common.xcontent.ToXContentFragment; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.ElasticsearchParseException; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Rectangle; -import org.elasticsearch.geo.geometry.ShapeType; -import org.elasticsearch.geo.utils.GeographyValidator; -import org.elasticsearch.geo.utils.Geohash; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Rectangle; +import org.elasticsearch.geometry.ShapeType; +import org.elasticsearch.geometry.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.Geohash; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.util.Arrays; @@ -137,7 +137,7 @@ private GeoPoint resetFromWKT(String value, boolean ignoreZValue) { "but found " + geometry.type()); } Point point = (Point) geometry; - return reset(point.getLat(), point.getLon()); + return reset(point.getY(), point.getX()); } GeoPoint parseGeoHash(String geohash, EffectivePoint effectivePoint) { @@ -147,11 +147,11 @@ GeoPoint parseGeoHash(String geohash, EffectivePoint effectivePoint) { Rectangle rectangle = Geohash.toBoundingBox(geohash); switch (effectivePoint) { case TOP_LEFT: - return reset(rectangle.getMaxLat(), rectangle.getMinLon()); + return reset(rectangle.getMaxY(), rectangle.getMinX()); case TOP_RIGHT: - return reset(rectangle.getMaxLat(), rectangle.getMaxLon()); + return reset(rectangle.getMaxY(), rectangle.getMaxX()); case BOTTOM_RIGHT: - return reset(rectangle.getMinLat(), rectangle.getMaxLon()); + return reset(rectangle.getMinY(), rectangle.getMaxX()); default: throw new IllegalArgumentException("Unsupported effective point " + effectivePoint); } diff --git a/server/src/main/java/org/elasticsearch/common/geo/GeometryFormat.java b/server/src/main/java/org/elasticsearch/common/geo/GeometryFormat.java index 5e14e20050bb3..62bd07fbd0a1f 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/GeometryFormat.java +++ b/server/src/main/java/org/elasticsearch/common/geo/GeometryFormat.java @@ -22,7 +22,7 @@ import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; import java.io.IOException; import java.text.ParseException; diff --git a/server/src/main/java/org/elasticsearch/common/geo/GeometryIO.java b/server/src/main/java/org/elasticsearch/common/geo/GeometryIO.java index fb8b2327f3951..cfe225641d4b9 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/GeometryIO.java +++ b/server/src/main/java/org/elasticsearch/common/geo/GeometryIO.java @@ -21,18 +21,18 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; import java.io.IOException; import java.util.ArrayList; @@ -86,7 +86,7 @@ public Void visit(MultiPoint multiPoint) throws IOException { out.writeVInt(multiPoint.size()); for (int i = 0; i < multiPoint.size(); i++) { Point point = multiPoint.get(i); - writeCoordinate(point.getLat(), point.getLon(), point.getAlt()); + writeCoordinate(point.getY(), point.getX(), point.getZ()); } return null; } @@ -104,7 +104,7 @@ public Void visit(MultiPolygon multiPolygon) throws IOException { @Override public Void visit(Point point) throws IOException { out.writeVInt(1); // Number of points For BWC with Shape Builder - writeCoordinate(point.getLat(), point.getLon(), point.getAlt()); + writeCoordinate(point.getY(), point.getX(), point.getZ()); return null; } @@ -121,8 +121,8 @@ public Void visit(Polygon polygon) throws IOException { @Override public Void visit(Rectangle rectangle) throws IOException { - writeCoordinate(rectangle.getMaxLat(), rectangle.getMinLon(), rectangle.getMinAlt()); // top left - writeCoordinate(rectangle.getMinLat(), rectangle.getMaxLon(), rectangle.getMaxAlt()); // bottom right + writeCoordinate(rectangle.getMaxY(), rectangle.getMinX(), rectangle.getMinZ()); // top left + writeCoordinate(rectangle.getMinY(), rectangle.getMaxX(), rectangle.getMaxZ()); // bottom right return null; } @@ -135,7 +135,7 @@ private void writeCoordinate(double lat, double lon, double alt) throws IOExcept private void writeCoordinates(Line line) throws IOException { out.writeVInt(line.length()); for (int i = 0; i < line.length(); i++) { - writeCoordinate(line.getLat(i), line.getLon(i), line.getAlt(i)); + writeCoordinate(line.getY(i), line.getX(i), line.getZ(i)); } } @@ -224,9 +224,9 @@ private static LinearRing buildLinearRing(double[][] arr, boolean orientation) { reverse(arr); } if (arr.length == 3) { - return new LinearRing(arr[0], arr[1], arr[2]); + return new LinearRing(arr[1], arr[0], arr[2]); } else { - return new LinearRing(arr[0], arr[1]); + return new LinearRing(arr[1], arr[0]); } } @@ -238,15 +238,15 @@ private static Point readPoint(StreamInput in) throws IOException { double lon = in.readDouble(); double lat = in.readDouble(); double alt = readAlt(in); - return new Point(lat, lon, alt); + return new Point(lon, lat, alt); } private static Line readLine(StreamInput in) throws IOException { double[][] coords = readLineComponents(in); if (coords.length == 3) { - return new Line(coords[0], coords[1], coords[2]); + return new Line(coords[1], coords[0], coords[2]); } else { - return new Line(coords[0], coords[1]); + return new Line(coords[1], coords[0]); } } @@ -266,7 +266,7 @@ private static MultiPoint readMultiPoint(StreamInput in) throws IOException { double lon = in.readDouble(); double lat = in.readDouble(); double alt = readAlt(in); - points.add(new Point(lat, lon, alt)); + points.add(new Point(lon, lat, alt)); } return new MultiPoint(points); } @@ -293,7 +293,7 @@ private static Rectangle readRectangle(StreamInput in) throws IOException { double minLat = in.readDouble(); double maxAlt = readAlt(in); - return new Rectangle(minLat, maxLat, minLon, maxLon, minAlt, maxAlt); + return new Rectangle(minLon, maxLon, maxLat, minLat, minAlt, maxAlt); } private static double readAlt(StreamInput in) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/common/geo/GeometryParser.java b/server/src/main/java/org/elasticsearch/common/geo/GeometryParser.java index 1cbfe0c5c4397..f7b8eb227e4f9 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/GeometryParser.java +++ b/server/src/main/java/org/elasticsearch/common/geo/GeometryParser.java @@ -23,10 +23,10 @@ import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import java.io.IOException; import java.text.ParseException; diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/CircleBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/CircleBuilder.java index ec4e01fa8c87e..2b4c13f5c6dea 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/CircleBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/CircleBuilder.java @@ -34,7 +34,7 @@ import java.io.IOException; import java.util.Objects; -public class CircleBuilder extends ShapeBuilder { +public class CircleBuilder extends ShapeBuilder { public static final ParseField FIELD_RADIUS = new ParseField("radius"); public static final GeoShapeType TYPE = GeoShapeType.CIRCLE; @@ -164,7 +164,7 @@ public Circle buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Circle buildGeometry() { + public org.elasticsearch.geometry.Circle buildGeometry() { throw new UnsupportedOperationException("CIRCLE geometry is not supported"); } diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/EnvelopeBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/EnvelopeBuilder.java index 09fa2f7da5544..6847624680cb4 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/EnvelopeBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/EnvelopeBuilder.java @@ -32,7 +32,7 @@ import java.io.IOException; import java.util.Objects; -public class EnvelopeBuilder extends ShapeBuilder { +public class EnvelopeBuilder extends ShapeBuilder { public static final GeoShapeType TYPE = GeoShapeType.ENVELOPE; @@ -113,8 +113,8 @@ public Rectangle buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Rectangle buildGeometry() { - return new org.elasticsearch.geo.geometry.Rectangle(bottomRight.y, topLeft.y, topLeft.x, bottomRight.x); + public org.elasticsearch.geometry.Rectangle buildGeometry() { + return new org.elasticsearch.geometry.Rectangle(topLeft.x, bottomRight.x, topLeft.y, bottomRight.y); } @Override diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/GeometryCollectionBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/GeometryCollectionBuilder.java index fb0cacacfae84..263d227e9ff4c 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/GeometryCollectionBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/GeometryCollectionBuilder.java @@ -27,7 +27,8 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.GeometryCollection; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; import org.locationtech.spatial4j.shape.Shape; import java.io.IOException; @@ -36,7 +37,7 @@ import java.util.Objects; public class GeometryCollectionBuilder extends ShapeBuilder, GeometryCollectionBuilder> { + GeometryCollection, GeometryCollectionBuilder> { public static final GeoShapeType TYPE = GeoShapeType.GEOMETRYCOLLECTION; @@ -186,17 +187,17 @@ public Shape buildS4J() { } @Override - public org.elasticsearch.geo.geometry.GeometryCollection buildGeometry() { + public GeometryCollection buildGeometry() { if (this.shapes.isEmpty()) { return GeometryCollection.EMPTY; } - List shapes = new ArrayList<>(this.shapes.size()); + List shapes = new ArrayList<>(this.shapes.size()); for (ShapeBuilder shape : this.shapes) { shapes.add(shape.buildGeometry()); } - return new org.elasticsearch.geo.geometry.GeometryCollection<>(shapes); + return new GeometryCollection<>(shapes); } @Override diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/LineStringBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/LineStringBuilder.java index 3b8e0522d4f4e..ce24ecc420a10 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/LineStringBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/LineStringBuilder.java @@ -23,7 +23,7 @@ import org.elasticsearch.common.geo.parsers.ShapeParser; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.Line; +import org.elasticsearch.geometry.Line; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; @@ -35,7 +35,7 @@ import java.util.Arrays; import java.util.List; -public class LineStringBuilder extends ShapeBuilder { +public class LineStringBuilder extends ShapeBuilder { public static final GeoShapeType TYPE = GeoShapeType.LINESTRING; /** @@ -121,9 +121,9 @@ public JtsGeometry buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Geometry buildGeometry() { - return new Line(coordinates.stream().mapToDouble(i->i.y).toArray(), - coordinates.stream().mapToDouble(i->i.x).toArray()); + public org.elasticsearch.geometry.Geometry buildGeometry() { + return new Line(coordinates.stream().mapToDouble(i->i.x).toArray(), coordinates.stream().mapToDouble(i->i.y).toArray() + ); } static ArrayList decomposeS4J(GeometryFactory factory, Coordinate[] coordinates, ArrayList strings) { diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiLineStringBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiLineStringBuilder.java index 558f74b1c997e..07fa5d0b46c9b 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiLineStringBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiLineStringBuilder.java @@ -25,7 +25,8 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.MultiLine; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.MultiLine; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; @@ -37,7 +38,7 @@ import java.util.List; import java.util.Objects; -public class MultiLineStringBuilder extends ShapeBuilder { +public class MultiLineStringBuilder extends ShapeBuilder { public static final GeoShapeType TYPE = GeoShapeType.MULTILINESTRING; @@ -150,15 +151,16 @@ public JtsGeometry buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Geometry buildGeometry() { + public org.elasticsearch.geometry.Geometry buildGeometry() { if (lines.isEmpty()) { return MultiLine.EMPTY; } - List linestrings = new ArrayList<>(lines.size()); + List linestrings = new ArrayList<>(lines.size()); for (int i = 0; i < lines.size(); ++i) { LineStringBuilder lsb = lines.get(i); - linestrings.add(new org.elasticsearch.geo.geometry.Line(lsb.coordinates.stream().mapToDouble(c->c.y).toArray(), - lsb.coordinates.stream().mapToDouble(c->c.x).toArray())); + linestrings.add(new Line(lsb.coordinates.stream().mapToDouble(c->c.x).toArray(), + lsb.coordinates.stream().mapToDouble(c->c.y).toArray() + )); } return new MultiLine(linestrings); } diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPointBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPointBuilder.java index 360447a963e80..f7cfbf8efa726 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPointBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPointBuilder.java @@ -24,7 +24,7 @@ import org.elasticsearch.common.geo.parsers.ShapeParser; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPoint; import org.locationtech.jts.geom.Coordinate; import org.locationtech.spatial4j.shape.Point; @@ -87,7 +87,7 @@ public MultiPoint buildGeometry() { if (coordinates.isEmpty()) { return MultiPoint.EMPTY; } - return new MultiPoint(coordinates.stream().map(coord -> new org.elasticsearch.geo.geometry.Point(coord.y, coord.x)) + return new MultiPoint(coordinates.stream().map(coord -> new org.elasticsearch.geometry.Point(coord.x, coord.y)) .collect(Collectors.toList())); } diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPolygonBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPolygonBuilder.java index 466f96c78ec8d..ffd7818964ef3 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPolygonBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/MultiPolygonBuilder.java @@ -26,7 +26,8 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.MultiPolygon; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Polygon; import org.locationtech.jts.geom.Coordinate; import org.locationtech.spatial4j.shape.Shape; @@ -188,14 +189,14 @@ public Shape buildS4J() { @SuppressWarnings({"unchecked"}) @Override public MultiPolygon buildGeometry() { - List shapes = new ArrayList<>(this.polygons.size()); + List shapes = new ArrayList<>(this.polygons.size()); Object poly; for (PolygonBuilder polygon : this.polygons) { poly = polygon.buildGeometry(); if (poly instanceof List) { - shapes.addAll((List) poly); + shapes.addAll((List) poly); } else { - shapes.add((org.elasticsearch.geo.geometry.Polygon)poly); + shapes.add((Polygon)poly); } } if (shapes.isEmpty()) { diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/PointBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/PointBuilder.java index 6a4fcd064c5da..fff7a5012105a 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/PointBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/PointBuilder.java @@ -28,7 +28,7 @@ import java.io.IOException; -public class PointBuilder extends ShapeBuilder { +public class PointBuilder extends ShapeBuilder { public static final GeoShapeType TYPE = GeoShapeType.POINT; /** @@ -88,8 +88,8 @@ public Point buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Point buildGeometry() { - return new org.elasticsearch.geo.geometry.Point(coordinates.get(0).y, coordinates.get(0).x); + public org.elasticsearch.geometry.Point buildGeometry() { + return new org.elasticsearch.geometry.Point(coordinates.get(0).x, coordinates.get(0).y); } @Override diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/PolygonBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/PolygonBuilder.java index bff882254afc4..b4cfe2aec70fb 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/PolygonBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/PolygonBuilder.java @@ -53,7 +53,7 @@ * Methods to wrap polygons at the dateline and building shapes from the data held by the * builder. */ -public class PolygonBuilder extends ShapeBuilder { +public class PolygonBuilder extends ShapeBuilder { public static final GeoShapeType TYPE = GeoShapeType.POLYGON; @@ -231,7 +231,7 @@ public JtsGeometry buildS4J() { } @Override - public org.elasticsearch.geo.geometry.Geometry buildGeometry() { + public org.elasticsearch.geometry.Geometry buildGeometry() { return toPolygonGeometry(); } @@ -280,17 +280,18 @@ protected Polygon toPolygonS4J(GeometryFactory factory) { return factory.createPolygon(shell, holes); } - public org.elasticsearch.geo.geometry.Polygon toPolygonGeometry() { - final List holes = new ArrayList<>(this.holes.size()); + public org.elasticsearch.geometry.Polygon toPolygonGeometry() { + final List holes = new ArrayList<>(this.holes.size()); for (int i = 0; i < this.holes.size(); ++i) { holes.add(linearRing(this.holes.get(i).coordinates)); } - return new org.elasticsearch.geo.geometry.Polygon(linearRing(this.shell.coordinates), holes); + return new org.elasticsearch.geometry.Polygon(linearRing(this.shell.coordinates), holes); } - protected static org.elasticsearch.geo.geometry.LinearRing linearRing(List coordinates) { - return new org.elasticsearch.geo.geometry.LinearRing(coordinates.stream().mapToDouble(i -> i.y).toArray(), - coordinates.stream().mapToDouble(i -> i.x).toArray()); + protected static org.elasticsearch.geometry.LinearRing linearRing(List coordinates) { + return new org.elasticsearch.geometry.LinearRing(coordinates.stream().mapToDouble(i -> i.x).toArray(), + coordinates.stream().mapToDouble(i -> i.y).toArray() + ); } protected static LinearRing linearRingS4J(GeometryFactory factory, List coordinates) { diff --git a/server/src/main/java/org/elasticsearch/common/geo/builders/ShapeBuilder.java b/server/src/main/java/org/elasticsearch/common/geo/builders/ShapeBuilder.java index 7d0517135266c..987ed6afa8a1c 100644 --- a/server/src/main/java/org/elasticsearch/common/geo/builders/ShapeBuilder.java +++ b/server/src/main/java/org/elasticsearch/common/geo/builders/ShapeBuilder.java @@ -50,7 +50,7 @@ /** * Basic class for building GeoJSON shapes like Polygons, Linestrings, etc */ -public abstract class ShapeBuilder> implements NamedWriteable, ToXContentObject { protected static final Logger LOGGER = LogManager.getLogger(ShapeBuilder.class); diff --git a/server/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java b/server/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java index 69f48a74c13da..a5349b5137996 100644 --- a/server/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java +++ b/server/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java @@ -26,7 +26,7 @@ import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.geo.GeoUtils; import org.elasticsearch.common.time.DateUtils; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.script.JodaCompatibleZonedDateTime; import java.io.IOException; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java index baf0b695adf68..006af39b8f59b 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java @@ -35,7 +35,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.support.XContentMapValues; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; import org.elasticsearch.index.mapper.LegacyGeoShapeFieldMapper.DeprecatedParameters; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.query.QueryShardException; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java index d1e770eab3a4e..aa5a74c4370dd 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java @@ -23,7 +23,7 @@ import org.elasticsearch.common.geo.GeometryParser; import org.elasticsearch.common.geo.builders.ShapeBuilder; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; import org.elasticsearch.index.query.VectorGeoShapeQueryProcessor; /** diff --git a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeIndexer.java b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeIndexer.java index a8a12dd734977..e3de485fc7a32 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeIndexer.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeIndexer.java @@ -23,18 +23,18 @@ import org.apache.lucene.document.LatLonShape; import org.apache.lucene.index.IndexableField; import org.elasticsearch.common.collect.Tuple; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; import org.locationtech.spatial4j.exception.InvalidShapeException; import java.util.ArrayList; @@ -58,7 +58,7 @@ public final class GeoShapeIndexer implements AbstractGeometryFieldMapper.Indexe private static final double DATELINE = 180; - protected static final Comparator INTERSECTION_ORDER = Comparator.comparingDouble(o -> o.intersect.getLat()); + protected static final Comparator INTERSECTION_ORDER = Comparator.comparingDouble(o -> o.intersect.getY()); private final boolean orientation; @@ -161,7 +161,7 @@ public Geometry visit(MultiPolygon multiPolygon) { @Override public Geometry visit(Point point) { //TODO: Just remove altitude for now. We need to add normalization later - return new Point(point.getLat(), point.getLon()); + return new Point(point.getX(), point.getY()); } @Override @@ -228,10 +228,10 @@ private List decomposeGeometry(Line line, List lines) { double[] lats = new double[partMinus.length()]; double[] lons = new double[partMinus.length()]; for (int i = 0; i < partMinus.length(); i++) { - lats[i] = normalizeLat(partMinus.getLat(i)); - lons[i] = normalizeLon(partMinus.getLon(i)); + lats[i] = normalizeLat(partMinus.getY(i)); + lons[i] = normalizeLon(partMinus.getX(i)); } - lines.add(new Line(lats, lons)); + lines.add(new Line(lons, lats)); } } return lines; @@ -245,8 +245,8 @@ private List decomposeGeometry(Line line, List lines) { * @return array of linestrings given as coordinate arrays */ private List decompose(double dateline, Line line) { - double[] lons = line.getLons(); - double[] lats = line.getLats(); + double[] lons = line.getX(); + double[] lats = line.getY(); return decompose(dateline, lons, lats); } @@ -267,12 +267,12 @@ private List decompose(double dateline, double[] lons, double[] lats) { double[] partLons = Arrays.copyOfRange(lons, offset, i + 1); double[] partLats = Arrays.copyOfRange(lats, offset, i + 1); if (t < 1) { - Point intersection = position(new Point(lats[i - 1], lons[i - 1]), new Point(lats[i], lons[i]), t); - partLons[partLons.length - 1] = intersection.getLon(); - partLats[partLats.length - 1] = intersection.getLat(); + Point intersection = position(new Point(lons[i - 1], lats[i - 1]), new Point(lons[i], lats[i]), t); + partLons[partLons.length - 1] = intersection.getX(); + partLats[partLats.length - 1] = intersection.getY(); - lons[offset + i - 1] = intersection.getLon(); - lats[offset + i - 1] = intersection.getLat(); + lons[offset + i - 1] = intersection.getX(); + lats[offset + i - 1] = intersection.getY(); shift(shift, lons); offset = i - 1; @@ -281,18 +281,18 @@ private List decompose(double dateline, double[] lons, double[] lats) { shift(shift, partLons); offset = i; } - parts.add(new Line(partLats, partLons)); + parts.add(new Line(partLons, partLats)); } } if (offset == 0) { shift(shift, lons); - parts.add(new Line(lats, lons)); + parts.add(new Line(lons, lats)); } else if (offset < lons.length - 1) { double[] partLons = Arrays.copyOfRange(lons, offset, lons.length); double[] partLats = Arrays.copyOfRange(lats, offset, lats.length); shift(shift, partLons); - parts.add(new Line(partLats, partLons)); + parts.add(new Line(partLons, partLats)); } return parts; } @@ -312,7 +312,7 @@ protected static Point shift(Point coordinate, double dateline) { if (dateline == 0) { return coordinate; } else { - return new Point(coordinate.getLat(), -2 * dateline + coordinate.getLon()); + return new Point(-2 * dateline + coordinate.getX(), coordinate.getY()); } } @@ -345,10 +345,10 @@ private void validateHole(LinearRing shell, LinearRing hole) { Set exterior = new HashSet<>(); Set interior = new HashSet<>(); for (int i = 0; i < shell.length(); i++) { - exterior.add(new Point(shell.getLat(i), shell.getLon(i))); + exterior.add(new Point(shell.getX(i), shell.getY(i))); } for (int i = 0; i < hole.length(); i++) { - interior.add(new Point(hole.getLat(i), hole.getLon(i))); + interior.add(new Point(hole.getX(i), hole.getY(i))); } exterior.retainAll(interior); if (exterior.size() >= 2) { @@ -414,9 +414,9 @@ protected static Point position(Point p1, Point p2, double position) { } else if (position == 1) { return p2; } else { - final double x = p1.getLon() + position * (p2.getLon() - p1.getLon()); - final double y = p1.getLat() + position * (p2.getLat() - p1.getLat()); - return new Point(y, x); + final double x = p1.getX() + position * (p2.getX() - p1.getX()); + final double y = p1.getY() + position * (p2.getY() - p1.getY()); + return new Point(x, y); } } @@ -434,7 +434,7 @@ private int createEdges(int component, boolean orientation, LinearRing shell, private Point[] points(LinearRing linearRing) { Point[] points = new Point[linearRing.length()]; for (int i = 0; i < linearRing.length(); i++) { - points[i] = new Point(linearRing.getLat(i), linearRing.getLon(i)); + points[i] = new Point(linearRing.getX(i), linearRing.getY(i)); } return points; } @@ -484,8 +484,8 @@ private Edge[] ring(int component, boolean direction, boolean handedness, */ private static void translate(Point[] points) { for (int i = 0; i < points.length; i++) { - if (points[i].getLon() < 0) { - points[i] = new Point(points[i].getLat(), points[i].getLon() + 2 * DATELINE); + if (points[i].getX() < 0) { + points[i] = new Point(points[i].getX() + 2 * DATELINE, points[i].getY()); } } } @@ -502,14 +502,14 @@ private static boolean getOrientation(Point[] points, int offset, int length) { final int next = (top + 1) % length; final int determinantSign = orient( - points[offset + prev].getLon(), points[offset + prev].getLat(), - points[offset + top].getLon(), points[offset + top].getLat(), - points[offset + next].getLon(), points[offset + next].getLat()); + points[offset + prev].getX(), points[offset + prev].getY(), + points[offset + top].getX(), points[offset + top].getY(), + points[offset + next].getX(), points[offset + next].getY()); if (determinantSign == 0) { // Points are collinear, but `top` is not in the middle if so, so the edges either side of `top` are intersecting. throw new InvalidShapeException("Cannot determine orientation: edges adjacent to (" - + points[offset + top].getLon() + "," + points[offset + top].getLat() + ") coincide"); + + points[offset + top].getX() + "," + points[offset + top].getY() + ") coincide"); } return determinantSign < 0; @@ -522,10 +522,10 @@ private static boolean getOrientation(Point[] points, int offset, int length) { private static int top(Point[] points, int offset, int length) { int top = 0; // we start at 1 here since top points to 0 for (int i = 1; i < length; i++) { - if (points[offset + i].getLat() < points[offset + top].getLat()) { + if (points[offset + i].getY() < points[offset + top].getY()) { top = i; - } else if (points[offset + i].getLat() == points[offset + top].getLat()) { - if (points[offset + i].getLon() < points[offset + top].getLon()) { + } else if (points[offset + i].getY() == points[offset + top].getY()) { + if (points[offset + i].getX() < points[offset + top].getX()) { top = i; } } @@ -535,24 +535,24 @@ private static int top(Point[] points, int offset, int length) { private static double[] range(Point[] points, int offset, int length) { - double minX = points[0].getLon(); + double minX = points[0].getX(); double maxX = minX; - double minY = points[0].getLat(); + double minY = points[0].getY(); double maxY = minY; // compute the bounding coordinates (@todo: cleanup brute force) for (int i = 1; i < length; ++i) { Point point = points[offset + i]; - if (point.getLon() < minX) { - minX = point.getLon(); + if (point.getX() < minX) { + minX = point.getX(); } - if (point.getLon() > maxX) { - maxX = point.getLon(); + if (point.getX() > maxX) { + maxX = point.getX(); } - if (point.getLat() < minY) { - minY = point.getLat(); + if (point.getY() < minY) { + minY = point.getY(); } - if (point.getLat() > maxY) { - maxY = point.getLat(); + if (point.getY() > maxY) { + maxY = point.getY(); } } return new double[]{minX, maxX, minY, maxY}; @@ -592,8 +592,8 @@ private int merge(Edge[] intersections, int offset, int length, Edge[] holes, in // ShapeBuilder.intersection that computes dateline edges as valid intersect points // in support of OGC standards if (e1.intersect != Edge.MAX_COORDINATE && e2.intersect != Edge.MAX_COORDINATE - && !(e1.next.next.coordinate.equals(e2.coordinate) && Math.abs(e1.next.coordinate.getLon()) == DATELINE - && Math.abs(e2.coordinate.getLon()) == DATELINE)) { + && !(e1.next.next.coordinate.equals(e2.coordinate) && Math.abs(e1.next.coordinate.getX()) == DATELINE + && Math.abs(e2.coordinate.getX()) == DATELINE)) { connect(e1, e2); } } @@ -653,9 +653,9 @@ private static Edge[] concat(int component, boolean direction, Point[] points, f final int edgeOffset, int length) { assert edges.length >= length + edgeOffset; assert points.length >= length + pointOffset; - edges[edgeOffset] = new Edge(new Point(points[pointOffset].getLat(), points[pointOffset].getLon()), null); + edges[edgeOffset] = new Edge(new Point(points[pointOffset].getX(), points[pointOffset].getY()), null); for (int i = 1; i < length; i++) { - Point nextPoint = new Point(points[pointOffset + i].getLat(), points[pointOffset + i].getLon()); + Point nextPoint = new Point(points[pointOffset + i].getX(), points[pointOffset + i].getY()); if (direction) { edges[edgeOffset + i] = new Edge(nextPoint, edges[edgeOffset + i - 1]); edges[edgeOffset + i].component = component; @@ -693,10 +693,10 @@ protected static int intersections(double dateline, Edge[] edges) { for (int i = 0; i < edges.length; i++) { Point p1 = edges[i].coordinate; Point p2 = edges[i].next.coordinate; - assert !Double.isNaN(p2.getLon()) && !Double.isNaN(p1.getLon()); + assert !Double.isNaN(p2.getX()) && !Double.isNaN(p1.getX()); edges[i].intersect = Edge.MAX_COORDINATE; - double position = intersection(p1.getLon(), p2.getLon(), dateline); + double position = intersection(p1.getX(), p2.getX(), dateline); if (!Double.isNaN(position)) { edges[i].intersection(position); numIntersections++; @@ -747,7 +747,7 @@ private static void assign(Edge[] holes, Point[][] points, int numHoles, Edge[] // here. final Edge current = new Edge(holes[i].coordinate, holes[i].next); current.intersect = current.coordinate; - final int intersections = intersections(current.coordinate.getLon(), edges); + final int intersections = intersections(current.coordinate.getX(), edges); if (intersections == 0) { // There were no edges that intersect the line of longitude through @@ -804,13 +804,13 @@ private static void assign(Edge[] holes, Point[][] points, int numHoles, Edge[] private static int component(final Edge edge, final int id, final ArrayList edges, double[] partitionPoint) { // find a coordinate that is not part of the dateline Edge any = edge; - while (any.coordinate.getLon() == +DATELINE || any.coordinate.getLon() == -DATELINE) { + while (any.coordinate.getX() == +DATELINE || any.coordinate.getX() == -DATELINE) { if ((any = any.next) == edge) { break; } } - double shiftOffset = any.coordinate.getLon() > DATELINE ? DATELINE : (any.coordinate.getLon() < -DATELINE ? -DATELINE : 0); + double shiftOffset = any.coordinate.getX() > DATELINE ? DATELINE : (any.coordinate.getX() < -DATELINE ? -DATELINE : 0); // run along the border of the component, collect the // edges, shift them according to the dateline and @@ -830,8 +830,8 @@ private static int component(final Edge edge, final int id, final ArrayList 0 && current.next != edge) { throw new InvalidShapeException("Shape contains more than one shared point"); } @@ -912,10 +912,10 @@ private static Polygon buildPolygon(List polygon) { double[] x = new double[coords.length]; double[] y = new double[coords.length]; for (int c = 0; c < coords.length; ++c) { - x[c] = normalizeLon(coords[c].getLon()); - y[c] = normalizeLat(coords[c].getLat()); + x[c] = normalizeLon(coords[c].getX()); + y[c] = normalizeLat(coords[c].getY()); } - holes.add(new LinearRing(y, x)); + holes.add(new LinearRing(x, y)); } } else { holes = Collections.emptyList(); @@ -926,11 +926,11 @@ private static Polygon buildPolygon(List polygon) { for (int i = 0; i < shell.length; ++i) { //Lucene Tessellator treats different +180 and -180 and we should keep the sign. //normalizeLon method excludes -180. - x[i] = Math.abs(shell[i].getLon()) > 180 ? normalizeLon(shell[i].getLon()) : shell[i].getLon(); - y[i] = normalizeLat(shell[i].getLat()); + x[i] = Math.abs(shell[i].getX()) > 180 ? normalizeLon(shell[i].getX()) : shell[i].getX(); + y[i] = normalizeLat(shell[i].getY()); } - return new Polygon(new LinearRing(y, x), holes); + return new Polygon(new LinearRing(x, y), holes); } private static Point[][] holes(Edge[] holes, int numHoles) { @@ -975,8 +975,8 @@ public Void visit(GeometryCollection collection) { } @Override - public Void visit(org.elasticsearch.geo.geometry.Line line) { - addFields(LatLonShape.createIndexableFields(name, new org.apache.lucene.geo.Line(line.getLats(), line.getLons()))); + public Void visit(Line line) { + addFields(LatLonShape.createIndexableFields(name, new org.apache.lucene.geo.Line(line.getY(), line.getX()))); return null; } @@ -987,7 +987,7 @@ public Void visit(LinearRing ring) { @Override public Void visit(MultiLine multiLine) { - for (org.elasticsearch.geo.geometry.Line line : multiLine) { + for (Line line : multiLine) { visit(line); } return null; @@ -1003,7 +1003,7 @@ public Void visit(MultiPoint multiPoint) { @Override public Void visit(MultiPolygon multiPolygon) { - for(org.elasticsearch.geo.geometry.Polygon polygon : multiPolygon) { + for(Polygon polygon : multiPolygon) { visit(polygon); } return null; @@ -1011,21 +1011,21 @@ public Void visit(MultiPolygon multiPolygon) { @Override public Void visit(Point point) { - addFields(LatLonShape.createIndexableFields(name, point.getLat(), point.getLon())); + addFields(LatLonShape.createIndexableFields(name, point.getY(), point.getX())); return null; } @Override - public Void visit(org.elasticsearch.geo.geometry.Polygon polygon) { + public Void visit(Polygon polygon) { addFields(LatLonShape.createIndexableFields(name, toLucenePolygon(polygon))); return null; } @Override - public Void visit(org.elasticsearch.geo.geometry.Rectangle r) { + public Void visit(Rectangle r) { org.apache.lucene.geo.Polygon p = new org.apache.lucene.geo.Polygon( - new double[]{r.getMinLat(), r.getMinLat(), r.getMaxLat(), r.getMaxLat(), r.getMinLat()}, - new double[]{r.getMinLon(), r.getMaxLon(), r.getMaxLon(), r.getMinLon(), r.getMinLon()}); + new double[]{r.getMinY(), r.getMinY(), r.getMaxY(), r.getMaxY(), r.getMinY()}, + new double[]{r.getMinX(), r.getMaxX(), r.getMaxX(), r.getMinX(), r.getMinX()}); addFields(LatLonShape.createIndexableFields(name, p)); return null; } @@ -1036,11 +1036,11 @@ private void addFields(IndexableField[] fields) { } - public static org.apache.lucene.geo.Polygon toLucenePolygon(org.elasticsearch.geo.geometry.Polygon polygon) { + public static org.apache.lucene.geo.Polygon toLucenePolygon(Polygon polygon) { org.apache.lucene.geo.Polygon[] holes = new org.apache.lucene.geo.Polygon[polygon.getNumberOfHoles()]; for(int i = 0; i visit(org.elasticsearch.geo.geometry.Line line) { + public ShapeBuilder visit(Line line) { List coordinates = new ArrayList<>(); for (int i = 0; i < line.length(); i++) { - coordinates.add(new Coordinate(line.getLon(i), line.getLat(i), line.getAlt(i))); + coordinates.add(new Coordinate(line.getX(i), line.getY(i), line.getZ(i))); } return new LineStringBuilder(coordinates); } @@ -161,7 +163,7 @@ private static Shape buildS4J(Geometry geometry) { List coordinates = new ArrayList<>(); for (int i = 0; i < multiPoint.size(); i++) { Point p = multiPoint.get(i); - coordinates.add(new Coordinate(p.getLon(), p.getLat(), p.getAlt())); + coordinates.add(new Coordinate(p.getX(), p.getY(), p.getZ())); } return new MultiPointBuilder(coordinates); } @@ -177,24 +179,24 @@ private static Shape buildS4J(Geometry geometry) { @Override public ShapeBuilder visit(Point point) { - return new PointBuilder(point.getLon(), point.getLat()); + return new PointBuilder(point.getX(), point.getY()); } @Override - public ShapeBuilder visit(org.elasticsearch.geo.geometry.Polygon polygon) { + public ShapeBuilder visit(Polygon polygon) { PolygonBuilder polygonBuilder = - new PolygonBuilder((LineStringBuilder) visit((org.elasticsearch.geo.geometry.Line) polygon.getPolygon()), + new PolygonBuilder((LineStringBuilder) visit((Line) polygon.getPolygon()), ShapeBuilder.Orientation.RIGHT, false); for (int i = 0; i < polygon.getNumberOfHoles(); i++) { - polygonBuilder.hole((LineStringBuilder) visit((org.elasticsearch.geo.geometry.Line) polygon.getHole(i))); + polygonBuilder.hole((LineStringBuilder) visit((Line) polygon.getHole(i))); } return polygonBuilder; } @Override public ShapeBuilder visit(Rectangle rectangle) { - return new EnvelopeBuilder(new Coordinate(rectangle.getMinLon(), rectangle.getMaxLat()), - new Coordinate(rectangle.getMaxLon(), rectangle.getMinLat())); + return new EnvelopeBuilder(new Coordinate(rectangle.getMinX(), rectangle.getMaxY()), + new Coordinate(rectangle.getMaxX(), rectangle.getMinY())); } }); return shapeBuilder; diff --git a/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java b/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java index 3341bdfc619bd..530f10a0c66af 100644 --- a/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java +++ b/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java @@ -24,7 +24,7 @@ import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.geo.ShapeRelation; import org.elasticsearch.common.geo.builders.ShapeBuilder; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; import org.elasticsearch.index.query.MoreLikeThisQueryBuilder.Item; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilder; diff --git a/server/src/main/java/org/elasticsearch/index/query/VectorGeoShapeQueryProcessor.java b/server/src/main/java/org/elasticsearch/index/query/VectorGeoShapeQueryProcessor.java index 9882fe069ebfd..2f21037be33b4 100644 --- a/server/src/main/java/org/elasticsearch/index/query/VectorGeoShapeQueryProcessor.java +++ b/server/src/main/java/org/elasticsearch/index/query/VectorGeoShapeQueryProcessor.java @@ -28,15 +28,16 @@ import org.apache.lucene.search.Query; import org.elasticsearch.common.geo.GeoShapeType; import org.elasticsearch.common.geo.ShapeRelation; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Rectangle; import org.elasticsearch.index.mapper.AbstractGeometryFieldMapper; import org.elasticsearch.index.mapper.GeoShapeFieldMapper; import org.elasticsearch.index.mapper.GeoShapeIndexer; @@ -105,9 +106,9 @@ private void visit(BooleanQuery.Builder bqb, GeometryCollection collection) { } @Override - public Query visit(org.elasticsearch.geo.geometry.Line line) { + public Query visit(org.elasticsearch.geometry.Line line) { validateIsGeoShapeFieldType(); - return LatLonShape.newLineQuery(fieldName, relation.getLuceneRelation(), new Line(line.getLats(), line.getLons())); + return LatLonShape.newLineQuery(fieldName, relation.getLuceneRelation(), new Line(line.getY(), line.getX())); } @Override @@ -120,7 +121,7 @@ public Query visit(MultiLine multiLine) { validateIsGeoShapeFieldType(); Line[] lines = new Line[multiLine.size()]; for (int i = 0; i < multiLine.size(); i++) { - lines[i] = new Line(multiLine.get(i).getLats(), multiLine.get(i).getLons()); + lines[i] = new Line(multiLine.get(i).getY(), multiLine.get(i).getX()); } return LatLonShape.newLineQuery(fieldName, relation.getLuceneRelation(), lines); } @@ -144,18 +145,18 @@ public Query visit(MultiPolygon multiPolygon) { public Query visit(Point point) { validateIsGeoShapeFieldType(); return LatLonShape.newBoxQuery(fieldName, relation.getLuceneRelation(), - point.getLat(), point.getLat(), point.getLon(), point.getLon()); + point.getY(), point.getY(), point.getX(), point.getX()); } @Override - public Query visit(org.elasticsearch.geo.geometry.Polygon polygon) { + public Query visit(org.elasticsearch.geometry.Polygon polygon) { return LatLonShape.newPolygonQuery(fieldName, relation.getLuceneRelation(), toLucenePolygon(polygon)); } @Override - public Query visit(org.elasticsearch.geo.geometry.Rectangle r) { + public Query visit(Rectangle r) { return LatLonShape.newBoxQuery(fieldName, relation.getLuceneRelation(), - r.getMinLat(), r.getMaxLat(), r.getMinLon(), r.getMaxLon()); + r.getMinY(), r.getMaxY(), r.getMinX(), r.getMaxX()); } private void validateIsGeoShapeFieldType() { diff --git a/server/src/main/java/org/elasticsearch/search/DocValueFormat.java b/server/src/main/java/org/elasticsearch/search/DocValueFormat.java index 90de3063206a9..ad7699d9f9c22 100644 --- a/server/src/main/java/org/elasticsearch/search/DocValueFormat.java +++ b/server/src/main/java/org/elasticsearch/search/DocValueFormat.java @@ -28,7 +28,7 @@ import org.elasticsearch.common.network.NetworkAddress; import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.common.time.DateMathParser; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.index.mapper.DateFieldMapper; import java.io.IOException; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorFactory.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorFactory.java index 7f7127d13f041..c31340e3dea83 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorFactory.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorFactory.java @@ -19,7 +19,7 @@ package org.elasticsearch.search.aggregations.bucket.geogrid; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.AggregatorFactories; import org.elasticsearch.search.aggregations.AggregatorFactory; diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGridBucket.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGridBucket.java index 82f2f70c04c16..0bd47e82aa21a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGridBucket.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGridBucket.java @@ -20,7 +20,7 @@ import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.search.aggregations.InternalAggregations; import java.io.IOException; diff --git a/server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java b/server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java index 1f19553572787..12ee72f85a6c2 100644 --- a/server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java +++ b/server/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java @@ -50,8 +50,8 @@ import java.util.function.Function; import java.util.stream.Collectors; -import static org.elasticsearch.geo.utils.Geohash.addNeighbors; -import static org.elasticsearch.geo.utils.Geohash.stringEncode; +import static org.elasticsearch.geometry.utils.Geohash.addNeighbors; +import static org.elasticsearch.geometry.utils.Geohash.stringEncode; /** * A {@link ContextMapping} that uses a geo location/area as a diff --git a/server/src/test/java/org/elasticsearch/common/geo/BaseGeoParsingTestCase.java b/server/src/test/java/org/elasticsearch/common/geo/BaseGeoParsingTestCase.java index 313d12dc22307..76cae85ff4f19 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/BaseGeoParsingTestCase.java +++ b/server/src/test/java/org/elasticsearch/common/geo/BaseGeoParsingTestCase.java @@ -21,7 +21,7 @@ import org.elasticsearch.common.geo.parsers.ShapeParser; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.utils.GeographyValidator; +import org.elasticsearch.geometry.utils.GeographyValidator; import org.elasticsearch.index.mapper.GeoShapeIndexer; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.hamcrest.ElasticsearchGeoAssertions; @@ -66,14 +66,14 @@ protected void assertGeometryEquals(Object expected, XContentBuilder geoJson, bo ElasticsearchGeoAssertions.assertEquals(expected, ShapeParser.parse(parser).buildS4J()); } else { GeometryParser geometryParser = new GeometryParser(true, true, true); - org.elasticsearch.geo.geometry.Geometry shape = geometryParser.parse(parser); + org.elasticsearch.geometry.Geometry shape = geometryParser.parse(parser); shape = new GeoShapeIndexer(true, "name").prepareForIndexing(shape); ElasticsearchGeoAssertions.assertEquals(expected, shape); } } } - protected void assertGeometryEquals(org.elasticsearch.geo.geometry.Geometry expected, XContentBuilder geoJson) throws IOException { + protected void assertGeometryEquals(org.elasticsearch.geometry.Geometry expected, XContentBuilder geoJson) throws IOException { try (XContentParser parser = createParser(geoJson)) { parser.nextToken(); assertEquals(expected, new GeoJson(true, false, new GeographyValidator(false)).fromXContent(parser)); diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonParserTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonParserTests.java index ef45194146de3..880071667e40c 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonParserTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonParserTests.java @@ -25,18 +25,18 @@ import org.elasticsearch.common.xcontent.XContentParseException; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; -import org.elasticsearch.geo.utils.GeographyValidator; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; +import org.elasticsearch.geometry.utils.GeographyValidator; import java.io.IOException; import java.text.ParseException; @@ -56,7 +56,7 @@ public void testParsePoint() throws IOException { .field("type", "Point") .startArray("coordinates").value(100.0).value(0.0).endArray() .endObject(); - Point expected = new Point(0.0, 100.0); + Point expected = new Point(100.0, 0.0); assertGeometryEquals(expected, pointGeoJson); } @@ -71,7 +71,7 @@ public void testParseLineString() throws IOException { .endArray() .endObject(); - Line expected = new Line(new double[] {0.0, 1.0}, new double[] { 100.0, 101.0}); + Line expected = new Line(new double[] { 100.0, 101.0}, new double[] {0.0, 1.0}); try (XContentParser parser = createParser(lineGeoJson)) { parser.nextToken(); assertEquals(expected, new GeoJson(false, false, new GeographyValidator(true)).fromXContent(parser)); @@ -96,8 +96,8 @@ public void testParseMultiLineString() throws IOException { .endObject(); MultiLine expected = new MultiLine(Arrays.asList( - new Line(new double[] {0.0, 1.0}, new double[] { 100.0, 101.0}), - new Line(new double[] {2.0, 3.0}, new double[] { 102.0, 103.0}) + new Line(new double[] { 100.0, 101.0}, new double[] {0.0, 1.0}), + new Line(new double[] { 102.0, 103.0}, new double[] {2.0, 3.0}) )); @@ -112,7 +112,7 @@ public void testParseCircle() throws IOException { .field("radius", "200m") .endObject(); - Circle expected = new Circle(0.0, 100.0, 200); + Circle expected = new Circle(100.0, 0.0, 200); assertGeometryEquals(expected, multilinesGeoJson); } @@ -156,7 +156,7 @@ public void testParseEnvelope() throws IOException { .startArray().value(50).value(-30).endArray() .endArray() .endObject(); - Rectangle expected = new Rectangle(-30, 30, -50, 50); + Rectangle expected = new Rectangle(-50, 50, 30, -30); assertGeometryEquals(expected, multilinesGeoJson); // test #2: envelope that spans dateline @@ -167,7 +167,7 @@ public void testParseEnvelope() throws IOException { .endArray() .endObject(); - expected = new Rectangle(-30, 30, 50, -50); + expected = new Rectangle(50, -50, 30, -30); assertGeometryEquals(expected, multilinesGeoJson); // test #3: "envelope" (actually a triangle) with invalid number of coordinates (TopRight, BottomLeft, BottomRight) @@ -214,8 +214,8 @@ public void testParsePolygon() throws IOException { Polygon p = new Polygon( new LinearRing( - new double[] {1d, 1d, 0d, 0d, 1d}, - new double[] {100d, 101d, 101d, 100d, 100d})); + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {1d, 1d, 0d, 0d, 1d} + )); assertGeometryEquals(p, polygonGeoJson); } @@ -235,8 +235,7 @@ public void testParse3DPolygon() throws IOException { .endObject(); Polygon expected = new Polygon(new LinearRing( - new double[]{1.0, 1.0, 0.0, 0.0, 1.0}, - new double[]{100.0, 101.0, 101.0, 100.0, 100.0}, + new double[]{100.0, 101.0, 101.0, 100.0, 100.0}, new double[]{1.0, 1.0, 0.0, 0.0, 1.0}, new double[]{10.0, 10.0, 10.0, 10.0, 10.0} )); try (XContentParser parser = createParser(polygonGeoJson)) { @@ -504,10 +503,10 @@ public void testParsePolygonWithHole() throws IOException { LinearRing hole = new LinearRing( - new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}, new double[] {100.2d, 100.2d, 100.8d, 100.8d, 100.2d}); + new double[] {100.2d, 100.2d, 100.8d, 100.8d, 100.2d}, new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}); Polygon p = new Polygon(new LinearRing( - new double[] {1d, 1d, 0d, 0d, 1d}, new double[] {100d, 101d, 101d, 100d, 100d}), Collections.singletonList(hole)); + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {1d, 1d, 0d, 0d, 1d}), Collections.singletonList(hole)); assertGeometryEquals(p, polygonGeoJson); } @@ -523,8 +522,8 @@ public void testParseMultiPoint() throws IOException { .endObject(); assertGeometryEquals(new MultiPoint(Arrays.asList( - new Point(0, 100), - new Point(1, 101))), multiPointGeoJson); + new Point(100, 0), + new Point(101, 1))), multiPointGeoJson); } @Override @@ -563,13 +562,13 @@ public void testParseMultiPolygon() throws IOException { .endObject(); LinearRing hole = new LinearRing( - new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}, new double[] {100.2d, 100.2d, 100.8d, 100.8d, 100.2d}); + new double[] {100.2d, 100.2d, 100.8d, 100.8d, 100.2d}, new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}); MultiPolygon polygons = new MultiPolygon(Arrays.asList( new Polygon(new LinearRing( - new double[] {2d, 2d, 3d, 3d, 2d}, new double[] {102d, 103d, 103d, 102d, 102d})), + new double[] {102d, 103d, 103d, 102d, 102d}, new double[] {2d, 2d, 3d, 3d, 2d})), new Polygon(new LinearRing( - new double[] {0d, 0d, 1d, 1d, 0d}, new double[] {100d, 101d, 101d, 100d, 100d}), + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {0d, 0d, 1d, 1d, 0d}), Collections.singletonList(hole)))); assertGeometryEquals(polygons, multiPolygonGeoJson); @@ -609,11 +608,10 @@ public void testParseGeometryCollection() throws IOException { .endObject(); GeometryCollection geometryExpected = new GeometryCollection<> (Arrays.asList( - new Line(new double[] {0d, 1d}, new double[] {100d, 101d}), - new Point(2d, 102d), + new Line(new double[] {100d, 101d}, new double[] {0d, 1d}), + new Point(102d, 2d), new Polygon(new LinearRing( - new double[] {10, 15, 0, -15, -10, 10}, - new double[] {-177, 176, 172, 176, -177, -177} + new double[] {-177, 176, 172, 176, -177, -177}, new double[] {10, 15, 0, -15, -10, 10} )) )); assertGeometryEquals(geometryExpected, geometryCollectionGeoJson); @@ -636,7 +634,7 @@ public void testThatParserExtractsCorrectTypeAndCoordinatesFromArbitraryJson() t .startObject("lala").field("type", "NotAPoint").endObject() .endObject(); - Point expectedPt = new Point(0, 100); + Point expectedPt = new Point(100, 0); assertGeometryEquals(expectedPt, pointGeoJson, false); } @@ -665,9 +663,9 @@ public void testParseOrientationOption() throws IOException { .endObject(); Polygon expected = new Polygon( - new LinearRing(new double[]{15.0, 10.0, -10.0, -15.0, 0.0, 15.0}, new double[]{176.0, -177.0, -177.0, 176.0, 172.0, 176.0}), + new LinearRing(new double[]{176.0, -177.0, -177.0, 176.0, 172.0, 176.0}, new double[]{15.0, 10.0, -10.0, -15.0, 0.0, 15.0}), Collections.singletonList( - new LinearRing(new double[]{8.0, 10.0, -8.0, 8.0}, new double[]{-172.0, 174.0, -172.0, -172.0}) + new LinearRing(new double[]{-172.0, 174.0, -172.0, -172.0}, new double[]{8.0, 10.0, -8.0, 8.0}) )); assertGeometryEquals(expected, polygonGeoJson); @@ -695,9 +693,9 @@ public void testParseOrientationOption() throws IOException { .endObject(); expected = new Polygon( - new LinearRing(new double[]{15.0, 0.0, -15.0, -10.0, 10.0, 15.0}, new double[]{176.0, 172.0, 176.0, -177.0, -177.0, 176.0}), + new LinearRing(new double[]{176.0, 172.0, 176.0, -177.0, -177.0, 176.0}, new double[]{15.0, 0.0, -15.0, -10.0, 10.0, 15.0}), Collections.singletonList( - new LinearRing(new double[]{8.0, -8.0, 10.0, 8.0}, new double[]{-172.0, -172.0, 174.0, -172.0}) + new LinearRing(new double[]{-172.0, -172.0, 174.0, -172.0}, new double[]{8.0, -8.0, 10.0, 8.0}) )); assertGeometryEquals(expected, polygonGeoJson); } diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonSerializationTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonSerializationTests.java index b113c8046e098..7d1ff1bfc580f 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonSerializationTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonSerializationTests.java @@ -24,8 +24,8 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.geo.GeometryTestUtils; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.utils.GeographyValidator; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.utils.GeographyValidator; import org.elasticsearch.test.AbstractXContentTestCase; import org.elasticsearch.test.ESTestCase; diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonShapeParserTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonShapeParserTests.java index bab86fde4a679..560d2987086d6 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeoJsonShapeParserTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeoJsonShapeParserTests.java @@ -30,10 +30,11 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; import org.elasticsearch.index.mapper.ContentPath; import org.elasticsearch.index.mapper.GeoShapeIndexer; import org.elasticsearch.index.mapper.LegacyGeoShapeFieldMapper; @@ -78,7 +79,7 @@ public void testParsePoint() throws IOException, ParseException { .endObject(); Point expected = GEOMETRY_FACTORY.createPoint(new Coordinate(100.0, 0.0)); assertGeometryEquals(new JtsPoint(expected, SPATIAL_CONTEXT), pointGeoJson, true); - assertGeometryEquals(new org.elasticsearch.geo.geometry.Point(0d, 100d), pointGeoJson, false); + assertGeometryEquals(new org.elasticsearch.geometry.Point(100d, 0d), pointGeoJson, false); } @Override @@ -137,8 +138,8 @@ public void testParseMultiLineString() throws IOException, ParseException { }); assertGeometryEquals(jtsGeom(expected), multilinesGeoJson, true); assertGeometryEquals(new MultiLine(Arrays.asList( - new org.elasticsearch.geo.geometry.Line(new double[] {0d, 1d}, new double[] {100d, 101d}), - new org.elasticsearch.geo.geometry.Line(new double[] {2d, 3d}, new double[] {102d, 103d}))), + new Line(new double[] {100d, 101d}, new double[] {0d, 1d}), + new Line(new double[] {102d, 103d}, new double[] {2d, 3d}))), multilinesGeoJson, false); } @@ -194,7 +195,7 @@ public void testParseEnvelope() throws IOException, ParseException { .endObject(); Rectangle expected = SPATIAL_CONTEXT.makeRectangle(-50, 50, -30, 30); assertGeometryEquals(expected, multilinesGeoJson, true); - assertGeometryEquals(new org.elasticsearch.geo.geometry.Rectangle(-30, 30, -50, 50), + assertGeometryEquals(new org.elasticsearch.geometry.Rectangle(-50, 50, 30, -30), multilinesGeoJson, false); // test #2: envelope that spans dateline @@ -207,7 +208,7 @@ public void testParseEnvelope() throws IOException, ParseException { expected = SPATIAL_CONTEXT.makeRectangle(50, -50, -30, 30); assertGeometryEquals(expected, multilinesGeoJson, true); - assertGeometryEquals(new org.elasticsearch.geo.geometry.Rectangle(-30, 30, 50, -50), + assertGeometryEquals(new org.elasticsearch.geometry.Rectangle(50, -50, 30, -30), multilinesGeoJson, false); // test #3: "envelope" (actually a triangle) with invalid number of coordinates (TopRight, BottomLeft, BottomRight) @@ -263,10 +264,10 @@ public void testParsePolygon() throws IOException, ParseException { Polygon expected = GEOMETRY_FACTORY.createPolygon(shell, null); assertGeometryEquals(jtsGeom(expected), polygonGeoJson, true); - org.elasticsearch.geo.geometry.Polygon p = new org.elasticsearch.geo.geometry.Polygon( - new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0d, 0d, 1d, 1d, 0d}, - new double[] {100d, 101d, 101d, 100d, 100d})); + org.elasticsearch.geometry.Polygon p = new org.elasticsearch.geometry.Polygon( + new org.elasticsearch.geometry.LinearRing( + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {0d, 0d, 1d, 1d, 0d} + )); assertGeometryEquals(p, polygonGeoJson, false); } @@ -310,9 +311,8 @@ public void testParse3DPolygon() throws IOException, ParseException { ElasticsearchGeoAssertions.assertEquals(jtsGeom(expected), ShapeParser.parse(parser, mapperBuilder).buildS4J()); } - org.elasticsearch.geo.geometry.Polygon p = new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - Arrays.stream(coordinates).mapToDouble(i->i.y).toArray(), - Arrays.stream(coordinates).mapToDouble(i->i.x).toArray() + org.elasticsearch.geometry.Polygon p = new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + Arrays.stream(coordinates).mapToDouble(i->i.x).toArray(), Arrays.stream(coordinates).mapToDouble(i->i.y).toArray() )); assertGeometryEquals(p, polygonGeoJson, false); } @@ -863,12 +863,12 @@ public void testParsePolygonWithHole() throws IOException, ParseException { Polygon expected = GEOMETRY_FACTORY.createPolygon(shell, holes); assertGeometryEquals(jtsGeom(expected), polygonGeoJson, true); - org.elasticsearch.geo.geometry.LinearRing hole = - new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}, new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}); - org.elasticsearch.geo.geometry.Polygon p = - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0d, 0d, 1d, 1d, 0d}, new double[] {100d, 101d, 101d, 100d, 100d}), Collections.singletonList(hole)); + org.elasticsearch.geometry.LinearRing hole = + new org.elasticsearch.geometry.LinearRing( + new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}, new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}); + org.elasticsearch.geometry.Polygon p = + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {0d, 0d, 1d, 1d, 0d}), Collections.singletonList(hole)); assertGeometryEquals(p, polygonGeoJson, false); } @@ -911,8 +911,8 @@ public void testParseMultiPoint() throws IOException, ParseException { assertGeometryEquals(expected, multiPointGeoJson, true); assertGeometryEquals(new MultiPoint(Arrays.asList( - new org.elasticsearch.geo.geometry.Point(0, 100), - new org.elasticsearch.geo.geometry.Point(1, 101))), multiPointGeoJson, false); + new org.elasticsearch.geometry.Point(100, 0), + new org.elasticsearch.geometry.Point(101, 1))), multiPointGeoJson, false); } @Override @@ -983,14 +983,14 @@ public void testParseMultiPolygon() throws IOException, ParseException { assertGeometryEquals(expected, multiPolygonGeoJson, true); - org.elasticsearch.geo.geometry.LinearRing hole = new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}, new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}); + org.elasticsearch.geometry.LinearRing hole = new org.elasticsearch.geometry.LinearRing( + new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}, new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}); - org.elasticsearch.geo.geometry.MultiPolygon polygons = new org.elasticsearch.geo.geometry.MultiPolygon(Arrays.asList( - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {2d, 3d, 3d, 2d, 2d}, new double[] {103d, 103d, 102d, 102d, 103d})), - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0d, 1d, 1d, 0d, 0d}, new double[] {101d, 101d, 100d, 100d, 101d}), Collections.singletonList(hole)))); + org.elasticsearch.geometry.MultiPolygon polygons = new org.elasticsearch.geometry.MultiPolygon(Arrays.asList( + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {103d, 103d, 102d, 102d, 103d}, new double[] {2d, 3d, 3d, 2d, 2d})), + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {101d, 101d, 100d, 100d, 101d}, new double[] {0d, 1d, 1d, 0d, 0d}), Collections.singletonList(hole)))); assertGeometryEquals(polygons, multiPolygonGeoJson, false); @@ -1041,13 +1041,13 @@ public void testParseMultiPolygon() throws IOException, ParseException { assertGeometryEquals(jtsGeom(withHoles), multiPolygonGeoJson, true); - org.elasticsearch.geo.geometry.LinearRing luceneHole = - new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}, new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}); + org.elasticsearch.geometry.LinearRing luceneHole = + new org.elasticsearch.geometry.LinearRing( + new double[] {100.8d, 100.8d, 100.2d, 100.2d, 100.8d}, new double[] {0.8d, 0.2d, 0.2d, 0.8d, 0.8d}); - org.elasticsearch.geo.geometry.Polygon lucenePolygons = (new org.elasticsearch.geo.geometry.Polygon( - new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0d, 0d, 1d, 1d, 0d}, new double[] {100d, 101d, 101d, 100d, 100d}), Collections.singletonList(luceneHole))); + org.elasticsearch.geometry.Polygon lucenePolygons = (new org.elasticsearch.geometry.Polygon( + new org.elasticsearch.geometry.LinearRing( + new double[] {100d, 101d, 101d, 100d, 100d}, new double[] {0d, 0d, 1d, 1d, 0d}), Collections.singletonList(luceneHole))); assertGeometryEquals(lucenePolygons, multiPolygonGeoJson, false); } @@ -1124,16 +1124,16 @@ public void testParseGeometryCollection() throws IOException, ParseException { assertGeometryEquals(shapeCollection(expected), geometryCollectionGeoJson, true); GeometryCollection geometryExpected = new GeometryCollection<> (Arrays.asList( - new org.elasticsearch.geo.geometry.Line(new double[] {0d, 1d}, new double[] {100d, 101d}), - new org.elasticsearch.geo.geometry.Point(2d, 102d), - new org.elasticsearch.geo.geometry.MultiPolygon(Arrays.asList( - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {-12.142857142857142d, 12.142857142857142d, 15d, 0d, -15d, -12.142857142857142d}, - new double[] {180d, 180d, 176d, 172d, 176d, 180d} + new Line(new double[] {100d, 101d}, new double[] {0d, 1d}), + new org.elasticsearch.geometry.Point(102d, 2d), + new org.elasticsearch.geometry.MultiPolygon(Arrays.asList( + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {180d, 180d, 176d, 172d, 176d, 180d}, + new double[] {-12.142857142857142d, 12.142857142857142d, 15d, 0d, -15d, -12.142857142857142d} )), - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {12.142857142857142d, -12.142857142857142d, -10d, 10d, 12.142857142857142d}, - new double[] {-180d, -180d, -177d, -177d, -180d} + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {-180d, -180d, -177d, -177d, -180d}, + new double[] {12.142857142857142d, -12.142857142857142d, -10d, 10d, 12.142857142857142d} )) )) )); @@ -1159,7 +1159,7 @@ public void testThatParserExtractsCorrectTypeAndCoordinatesFromArbitraryJson() t Point expected = GEOMETRY_FACTORY.createPoint(new Coordinate(100.0, 0.0)); assertGeometryEquals(new JtsPoint(expected, SPATIAL_CONTEXT), pointGeoJson, true); - org.elasticsearch.geo.geometry.Point expectedPt = new org.elasticsearch.geo.geometry.Point(0, 100); + org.elasticsearch.geometry.Point expectedPt = new org.elasticsearch.geometry.Point(100, 0); assertGeometryEquals(expectedPt, pointGeoJson, false); } @@ -1423,7 +1423,7 @@ public void testParseInvalidGeometryCollectionShapes() throws IOException { assertNull(parser.nextToken()); // no more elements afterwards } } - + public Geometry parse(XContentParser parser) throws IOException, ParseException { GeometryParser geometryParser = new GeometryParser(true, true, true); GeoShapeIndexer indexer = new GeoShapeIndexer(true, "name"); diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeoWKTShapeParserTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeoWKTShapeParserTests.java index e820b03c4b2b7..0bc74447e7493 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeoWKTShapeParserTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeoWKTShapeParserTests.java @@ -40,11 +40,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; import org.elasticsearch.index.mapper.ContentPath; import org.elasticsearch.index.mapper.GeoShapeFieldMapper; import org.elasticsearch.index.mapper.GeoShapeIndexer; @@ -110,7 +110,7 @@ public void testParsePoint() throws IOException, ParseException { Coordinate c = new Coordinate(p.lon(), p.lat()); Point expected = GEOMETRY_FACTORY.createPoint(c); assertExpected(new JtsPoint(expected, SPATIAL_CONTEXT), new PointBuilder().coordinate(c), true); - assertExpected(new org.elasticsearch.geo.geometry.Point(p.lat(), p.lon()), new PointBuilder().coordinate(c), false); + assertExpected(new org.elasticsearch.geometry.Point(p.lon(), p.lat()), new PointBuilder().coordinate(c), false); assertMalformed(new PointBuilder().coordinate(c)); } @@ -122,10 +122,10 @@ public void testParseMultiPoint() throws IOException, ParseException { coordinates.add(new Coordinate(GeoTestUtil.nextLongitude(), GeoTestUtil.nextLatitude())); } - List points = new ArrayList<>(numPoints); + List points = new ArrayList<>(numPoints); for (int i = 0; i < numPoints; ++i) { Coordinate c = coordinates.get(i); - points.add(new org.elasticsearch.geo.geometry.Point(c.y, c.x)); + points.add(new org.elasticsearch.geometry.Point(c.x, c.y)); } Geometry expectedGeom; @@ -177,7 +177,7 @@ public void testParseLineString() throws IOException, ParseException { lats[i] = coordinates.get(i).y; lons[i] = coordinates.get(i).x; } - assertExpected(new Line(lats, lons), new LineStringBuilder(coordinates), false); + assertExpected(new Line(lons, lats), new LineStringBuilder(coordinates), false); } @Override @@ -195,14 +195,14 @@ public void testParseMultiLineString() throws IOException, ParseException { List lines = new ArrayList<>(lineStrings.size()); for (int j = 0; j < lineStrings.size(); ++j) { Coordinate[] c = lineStrings.get(j).getCoordinates(); - lines.add(new Line(Arrays.stream(c).mapToDouble(i->i.y).toArray(), - Arrays.stream(c).mapToDouble(i->i.x).toArray())); + lines.add(new Line(Arrays.stream(c).mapToDouble(i->i.x).toArray(), Arrays.stream(c).mapToDouble(i->i.y).toArray() + )); } Geometry expectedGeom; if (lines.isEmpty()) { expectedGeom = GeometryCollection.EMPTY; } else if (lines.size() == 1) { - expectedGeom = new Line(lines.get(0).getLats(), lines.get(0).getLons()); + expectedGeom = new Line(lines.get(0).getX(), lines.get(0).getY()); } else { expectedGeom = new MultiLine(lines); } @@ -275,12 +275,12 @@ public void testParsePolygonWithHole() throws IOException, ParseException { Polygon expected = GEOMETRY_FACTORY.createPolygon(shell, holes); assertExpected(jtsGeom(expected), polygonWithHole, true); - org.elasticsearch.geo.geometry.LinearRing hole = - new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0.8d, 0.8d, 0.2d, 0.2d, 0.8d}, new double[] {100.2d, 100.8d, 100.8d, 100.2d, 100.2d}); - org.elasticsearch.geo.geometry.Polygon p = - new org.elasticsearch.geo.geometry.Polygon(new org.elasticsearch.geo.geometry.LinearRing( - new double[] {0d, 1d, 1d, 0d, 0d}, new double[] {101d, 101d, 100d, 100d, 101d}), Collections.singletonList(hole)); + org.elasticsearch.geometry.LinearRing hole = + new org.elasticsearch.geometry.LinearRing( + new double[] {100.2d, 100.8d, 100.8d, 100.2d, 100.2d}, new double[] {0.8d, 0.8d, 0.2d, 0.2d, 0.8d}); + org.elasticsearch.geometry.Polygon p = + new org.elasticsearch.geometry.Polygon(new org.elasticsearch.geometry.LinearRing( + new double[] {101d, 101d, 100d, 100d, 101d}, new double[] {0d, 1d, 1d, 0d, 0d}), Collections.singletonList(hole)); assertExpected(p, polygonWithHole, false); assertMalformed(polygonWithHole); } @@ -448,7 +448,7 @@ public void testParseEnvelope() throws IOException, ParseException { Rectangle expected = SPATIAL_CONTEXT.makeRectangle(r.minLon, r.maxLon, r.minLat, r.maxLat); assertExpected(expected, builder, true); - assertExpected(new org.elasticsearch.geo.geometry.Rectangle(r.minLat, r.maxLat, r.minLon, r.maxLon), builder, false); + assertExpected(new org.elasticsearch.geometry.Rectangle(r.minLon, r.maxLon, r.maxLat, r.minLat), builder, false); assertMalformed(builder); } diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeometryIOTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeometryIOTests.java index 7694d6c3d7d62..e78938290de1b 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeometryIOTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeometryIOTests.java @@ -24,9 +24,9 @@ import org.elasticsearch.common.io.stream.NamedWriteableAwareStreamInput; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.ShapeType; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.ShapeType; import org.elasticsearch.test.ESTestCase; import static org.elasticsearch.geo.GeometryTestUtils.randomGeometry; @@ -84,7 +84,7 @@ public void testRandomSerialization() throws Exception { } private boolean shapeSupported(Geometry geometry) { - if (geometry.hasAlt()) { + if (geometry.hasZ()) { return false; } diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeometryIndexerTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeometryIndexerTests.java index cb79ebe4fd0e3..5e5b2b688ea17 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeometryIndexerTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeometryIndexerTests.java @@ -22,17 +22,17 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.index.mapper.GeoShapeIndexer; import org.elasticsearch.test.ESTestCase; @@ -50,7 +50,7 @@ public class GeometryIndexerTests extends ESTestCase { public void testCircle() { UnsupportedOperationException ex = - expectThrows(UnsupportedOperationException.class, () -> indexer.prepareForIndexing(new Circle(1, 2, 3))); + expectThrows(UnsupportedOperationException.class, () -> indexer.prepareForIndexing(new Circle(2, 1, 3))); assertEquals("CIRCLE geometry is not supported", ex.getMessage()); } @@ -58,21 +58,21 @@ public void testCollection() { assertEquals(GeometryCollection.EMPTY, indexer.prepareForIndexing(GeometryCollection.EMPTY)); GeometryCollection collection = new GeometryCollection<>(Collections.singletonList( - new Point(1, 2) + new Point(2, 1) )); - Geometry indexed = new Point(1, 2); + Geometry indexed = new Point(2, 1); assertEquals(indexed, indexer.prepareForIndexing(collection)); collection = new GeometryCollection<>(Arrays.asList( - new Point(1, 2), new Point(3, 4), new Line(new double[]{10, 20}, new double[]{160, 200}) + new Point(2, 1), new Point(4, 3), new Line(new double[]{160, 200}, new double[]{10, 20}) )); indexed = new GeometryCollection<>(Arrays.asList( - new Point(1, 2), new Point(3, 4), + new Point(2, 1), new Point(4, 3), new MultiLine(Arrays.asList( - new Line(new double[]{10, 15}, new double[]{160, 180}), - new Line(new double[]{15, 20}, new double[]{180, -160})) + new Line(new double[]{160, 180}, new double[]{10, 15}), + new Line(new double[]{180, -160}, new double[]{15, 20})) )) ); assertEquals(indexed, indexer.prepareForIndexing(collection)); @@ -80,44 +80,44 @@ public void testCollection() { } public void testLine() { - Line line = new Line(new double[]{1, 2}, new double[]{3, 4}); + Line line = new Line(new double[]{3, 4}, new double[]{1, 2}); Geometry indexed = line; assertEquals(indexed, indexer.prepareForIndexing(line)); - line = new Line(new double[]{10, 20}, new double[]{160, 200}); + line = new Line(new double[]{160, 200}, new double[]{10, 20}); indexed = new MultiLine(Arrays.asList( - new Line(new double[]{10, 15}, new double[]{160, 180}), - new Line(new double[]{15, 20}, new double[]{180, -160})) + new Line(new double[]{160, 180}, new double[]{10, 15}), + new Line(new double[]{180, -160}, new double[]{15, 20})) ); assertEquals(indexed, indexer.prepareForIndexing(line)); } public void testMultiLine() { - Line line = new Line(new double[]{1, 2}, new double[]{3, 4}); + Line line = new Line(new double[]{3, 4}, new double[]{1, 2}); MultiLine multiLine = new MultiLine(Collections.singletonList(line)); Geometry indexed = line; assertEquals(indexed, indexer.prepareForIndexing(multiLine)); multiLine = new MultiLine(Arrays.asList( - line, new Line(new double[]{10, 20}, new double[]{160, 200}) + line, new Line(new double[]{160, 200}, new double[]{10, 20}) )); indexed = new MultiLine(Arrays.asList( line, - new Line(new double[]{10, 15}, new double[]{160, 180}), - new Line(new double[]{15, 20}, new double[]{180, -160})) + new Line(new double[]{160, 180}, new double[]{10, 15}), + new Line(new double[]{180, -160}, new double[]{15, 20})) ); assertEquals(indexed, indexer.prepareForIndexing(multiLine)); } public void testPoint() { - Point point = new Point(1, 2); + Point point = new Point(2, 1); Geometry indexed = point; assertEquals(indexed, indexer.prepareForIndexing(point)); - point = new Point(1, 2, 3); + point = new Point(2, 1, 3); assertEquals(indexed, indexer.prepareForIndexing(point)); } @@ -126,38 +126,38 @@ public void testMultiPoint() { Geometry indexed = multiPoint; assertEquals(indexed, indexer.prepareForIndexing(multiPoint)); - multiPoint = new MultiPoint(Collections.singletonList(new Point(1, 2))); - indexed = new Point(1, 2); + multiPoint = new MultiPoint(Collections.singletonList(new Point(2, 1))); + indexed = new Point(2, 1); assertEquals(indexed, indexer.prepareForIndexing(multiPoint)); - multiPoint = new MultiPoint(Arrays.asList(new Point(1, 2), new Point(3, 4))); + multiPoint = new MultiPoint(Arrays.asList(new Point(2, 1), new Point(4, 3))); indexed = multiPoint; assertEquals(indexed, indexer.prepareForIndexing(multiPoint)); - multiPoint = new MultiPoint(Arrays.asList(new Point(1, 2, 10), new Point(3, 4, 10))); + multiPoint = new MultiPoint(Arrays.asList(new Point(2, 1, 10), new Point(4, 3, 10))); assertEquals(indexed, indexer.prepareForIndexing(multiPoint)); } public void testPolygon() { - Polygon polygon = new Polygon(new LinearRing(new double[]{10, 10, 20, 20, 10}, new double[]{160, 200, 200, 160, 160})); + Polygon polygon = new Polygon(new LinearRing(new double[]{160, 200, 200, 160, 160}, new double[]{10, 10, 20, 20, 10})); Geometry indexed = new MultiPolygon(Arrays.asList( - new Polygon(new LinearRing(new double[]{10, 20, 20, 10, 10}, new double[]{180, 180, 160, 160, 180})), - new Polygon(new LinearRing(new double[]{20, 10, 10, 20, 20}, new double[]{-180, -180, -160, -160, -180})) + new Polygon(new LinearRing(new double[]{180, 180, 160, 160, 180}, new double[]{10, 20, 20, 10, 10})), + new Polygon(new LinearRing(new double[]{-180, -180, -160, -160, -180}, new double[]{20, 10, 10, 20, 20})) )); assertEquals(indexed, indexer.prepareForIndexing(polygon)); - polygon = new Polygon(new LinearRing(new double[]{10, 10, 20, 20, 10}, new double[]{160, 200, 200, 160, 160}), + polygon = new Polygon(new LinearRing(new double[]{160, 200, 200, 160, 160}, new double[]{10, 10, 20, 20, 10}), Collections.singletonList( - new LinearRing(new double[]{12, 18, 18, 12, 12}, new double[]{165, 165, 195, 195, 165}))); + new LinearRing(new double[]{165, 165, 195, 195, 165}, new double[]{12, 18, 18, 12, 12}))); indexed = new MultiPolygon(Arrays.asList( new Polygon(new LinearRing( - new double[]{10, 12, 12, 18, 18, 20, 20, 10, 10}, - new double[]{180, 180, 165, 165, 180, 180, 160, 160, 180})), + new double[]{180, 180, 165, 165, 180, 180, 160, 160, 180}, new double[]{10, 12, 12, 18, 18, 20, 20, 10, 10} + )), new Polygon(new LinearRing( - new double[]{12, 10, 10, 20, 20, 18, 18, 12, 12}, - new double[]{-180, -180, -160, -160, -180, -180, -165, -165, -180})) + new double[]{-180, -180, -160, -160, -180, -180, -165, -165, -180}, new double[]{12, 10, 10, 20, 20, 18, 18, 12, 12} + )) )); assertEquals(indexed, indexer.prepareForIndexing(polygon)); diff --git a/server/src/test/java/org/elasticsearch/common/geo/GeometryParserTests.java b/server/src/test/java/org/elasticsearch/common/geo/GeometryParserTests.java index 68492317f4791..fc3dc43294ba0 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/GeometryParserTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/GeometryParserTests.java @@ -26,10 +26,10 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParseException; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; import org.elasticsearch.test.ESTestCase; /** @@ -48,9 +48,9 @@ public void testGeoJsonParsing() throws Exception { try (XContentParser parser = createParser(pointGeoJson)) { parser.nextToken(); GeometryFormat format = new GeometryParser(true, randomBoolean(), randomBoolean()).geometryFormat(parser); - assertEquals(new Point(0, 100), format.fromXContent(parser)); + assertEquals(new Point(100, 0), format.fromXContent(parser)); XContentBuilder newGeoJson = XContentFactory.jsonBuilder(); - format.toXContent(new Point(10, 100), newGeoJson, ToXContent.EMPTY_PARAMS); + format.toXContent(new Point(100, 10), newGeoJson, ToXContent.EMPTY_PARAMS); assertEquals("{\"type\":\"point\",\"coordinates\":[100.0,10.0]}", Strings.toString(newGeoJson)); } @@ -62,7 +62,7 @@ public void testGeoJsonParsing() throws Exception { try (XContentParser parser = createParser(pointGeoJsonWithZ)) { parser.nextToken(); - assertEquals(new Point(0, 100, 10.0), new GeometryParser(true, randomBoolean(), true).parse(parser)); + assertEquals(new Point(100, 0, 10.0), new GeometryParser(true, randomBoolean(), true).parse(parser)); } @@ -84,7 +84,7 @@ public void testGeoJsonParsing() throws Exception { .endArray() .endObject(); - Polygon p = new Polygon(new LinearRing(new double[]{1d, 1d, 0d, 0d, 1d}, new double[]{100d, 101d, 101d, 100d, 100d})); + Polygon p = new Polygon(new LinearRing(new double[]{100d, 101d, 101d, 100d, 100d}, new double[]{1d, 1d, 0d, 0d, 1d})); try (XContentParser parser = createParser(polygonGeoJson)) { parser.nextToken(); // Coerce should automatically close the polygon @@ -109,9 +109,9 @@ public void testWKTParsing() throws Exception { parser.nextToken(); // Field Name parser.nextToken(); // Field Value GeometryFormat format = new GeometryParser(true, randomBoolean(), randomBoolean()).geometryFormat(parser); - assertEquals(new Point(0, 100), format.fromXContent(parser)); + assertEquals(new Point(100, 0), format.fromXContent(parser)); XContentBuilder newGeoJson = XContentFactory.jsonBuilder().startObject().field("val"); - format.toXContent(new Point(10, 100), newGeoJson, ToXContent.EMPTY_PARAMS); + format.toXContent(new Point(100, 10), newGeoJson, ToXContent.EMPTY_PARAMS); newGeoJson.endObject(); assertEquals("{\"val\":\"point (100.0 10.0)\"}", Strings.toString(newGeoJson)); } @@ -126,7 +126,7 @@ public void testWKTParsing() throws Exception { parser.nextToken(); // Start object parser.nextToken(); // Field Name parser.nextToken(); // Field Value - assertEquals(new Line(new double[]{0, 10}, new double[]{100, 200} ), + assertEquals(new Line(new double[]{100, 200}, new double[]{0, 10}), new GeometryParser(true, randomBoolean(), randomBoolean()).parse(parser)); } } @@ -146,7 +146,7 @@ public void testNullParsing() throws Exception { XContentBuilder newGeoJson = XContentFactory.jsonBuilder().startObject().field("val"); // if we serialize non-null value - it should be serialized as geojson - format.toXContent(new Point(10, 100), newGeoJson, ToXContent.EMPTY_PARAMS); + format.toXContent(new Point(100, 10), newGeoJson, ToXContent.EMPTY_PARAMS); newGeoJson.endObject(); assertEquals("{\"val\":{\"type\":\"point\",\"coordinates\":[100.0,10.0]}}", Strings.toString(newGeoJson)); diff --git a/server/src/test/java/org/elasticsearch/common/geo/ShapeBuilderTests.java b/server/src/test/java/org/elasticsearch/common/geo/ShapeBuilderTests.java index 6022eaec3d526..7570a44592c2e 100644 --- a/server/src/test/java/org/elasticsearch/common/geo/ShapeBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/common/geo/ShapeBuilderTests.java @@ -27,6 +27,7 @@ import org.elasticsearch.common.geo.builders.PointBuilder; import org.elasticsearch.common.geo.builders.PolygonBuilder; import org.elasticsearch.common.geo.builders.ShapeBuilder; +import org.elasticsearch.geometry.LinearRing; import org.elasticsearch.index.mapper.GeoShapeIndexer; import org.elasticsearch.test.ESTestCase; import org.locationtech.jts.geom.Coordinate; @@ -52,9 +53,9 @@ public void testNewPoint() { Point point = pb.buildS4J(); assertEquals(-100D, point.getX(), 0.0d); assertEquals(45D, point.getY(), 0.0d); - org.elasticsearch.geo.geometry.Point geoPoint = pb.buildGeometry(); - assertEquals(-100D, geoPoint.getLon(), 0.0d); - assertEquals(45D, geoPoint.getLat(), 0.0d); + org.elasticsearch.geometry.Point geoPoint = pb.buildGeometry(); + assertEquals(-100D, geoPoint.getX(), 0.0d); + assertEquals(45D, geoPoint.getY(), 0.0d); } public void testNewRectangle() { @@ -65,11 +66,11 @@ public void testNewRectangle() { assertEquals(45D, rectangle.getMaxX(), 0.0d); assertEquals(30D, rectangle.getMaxY(), 0.0d); - org.elasticsearch.geo.geometry.Rectangle luceneRectangle = eb.buildGeometry(); - assertEquals(-45D, luceneRectangle.getMinLon(), 0.0d); - assertEquals(-30D, luceneRectangle.getMinLat(), 0.0d); - assertEquals(45D, luceneRectangle.getMaxLon(), 0.0d); - assertEquals(30D, luceneRectangle.getMaxLat(), 0.0d); + org.elasticsearch.geometry.Rectangle luceneRectangle = eb.buildGeometry(); + assertEquals(-45D, luceneRectangle.getMinX(), 0.0d); + assertEquals(-30D, luceneRectangle.getMinY(), 0.0d); + assertEquals(45D, luceneRectangle.getMaxX(), 0.0d); + assertEquals(30D, luceneRectangle.getMaxY(), 0.0d); } public void testNewPolygon() { @@ -87,15 +88,15 @@ public void testNewPolygon() { assertEquals(exterior.getCoordinateN(2), new Coordinate(45, -30)); assertEquals(exterior.getCoordinateN(3), new Coordinate(-45, -30)); - org.elasticsearch.geo.geometry.LinearRing polygon = pb.toPolygonGeometry().getPolygon(); - assertEquals(polygon.getLat(0), 30, 0d); - assertEquals(polygon.getLon(0), -45, 0d); - assertEquals(polygon.getLat(1), 30, 0d); - assertEquals(polygon.getLon(1), 45, 0d); - assertEquals(polygon.getLat(2), -30, 0d); - assertEquals(polygon.getLon(2), 45, 0d); - assertEquals(polygon.getLat(3), -30, 0d); - assertEquals(polygon.getLon(3), -45, 0d); + LinearRing polygon = pb.toPolygonGeometry().getPolygon(); + assertEquals(polygon.getY(0), 30, 0d); + assertEquals(polygon.getX(0), -45, 0d); + assertEquals(polygon.getY(1), 30, 0d); + assertEquals(polygon.getX(1), 45, 0d); + assertEquals(polygon.getY(2), -30, 0d); + assertEquals(polygon.getX(2), 45, 0d); + assertEquals(polygon.getY(3), -30, 0d); + assertEquals(polygon.getX(3), -45, 0d); } public void testNewPolygon_coordinate() { @@ -113,15 +114,15 @@ public void testNewPolygon_coordinate() { assertEquals(exterior.getCoordinateN(2), new Coordinate(45, -30)); assertEquals(exterior.getCoordinateN(3), new Coordinate(-45, -30)); - org.elasticsearch.geo.geometry.LinearRing polygon = pb.toPolygonGeometry().getPolygon(); - assertEquals(polygon.getLat(0), 30, 0d); - assertEquals(polygon.getLon(0), -45, 0d); - assertEquals(polygon.getLat(1), 30, 0d); - assertEquals(polygon.getLon(1), 45, 0d); - assertEquals(polygon.getLat(2), -30, 0d); - assertEquals(polygon.getLon(2), 45, 0d); - assertEquals(polygon.getLat(3), -30, 0d); - assertEquals(polygon.getLon(3), -45, 0d); + LinearRing polygon = pb.toPolygonGeometry().getPolygon(); + assertEquals(polygon.getY(0), 30, 0d); + assertEquals(polygon.getX(0), -45, 0d); + assertEquals(polygon.getY(1), 30, 0d); + assertEquals(polygon.getX(1), 45, 0d); + assertEquals(polygon.getY(2), -30, 0d); + assertEquals(polygon.getX(2), 45, 0d); + assertEquals(polygon.getY(3), -30, 0d); + assertEquals(polygon.getX(3), -45, 0d); } public void testNewPolygon_coordinates() { @@ -137,15 +138,15 @@ public void testNewPolygon_coordinates() { assertEquals(exterior.getCoordinateN(2), new Coordinate(45, -30)); assertEquals(exterior.getCoordinateN(3), new Coordinate(-45, -30)); - org.elasticsearch.geo.geometry.LinearRing polygon = pb.toPolygonGeometry().getPolygon(); - assertEquals(polygon.getLat(0), 30, 0d); - assertEquals(polygon.getLon(0), -45, 0d); - assertEquals(polygon.getLat(1), 30, 0d); - assertEquals(polygon.getLon(1), 45, 0d); - assertEquals(polygon.getLat(2), -30, 0d); - assertEquals(polygon.getLon(2), 45, 0d); - assertEquals(polygon.getLat(3), -30, 0d); - assertEquals(polygon.getLon(3), -45, 0d); + LinearRing polygon = pb.toPolygonGeometry().getPolygon(); + assertEquals(polygon.getY(0), 30, 0d); + assertEquals(polygon.getX(0), -45, 0d); + assertEquals(polygon.getY(1), 30, 0d); + assertEquals(polygon.getX(1), 45, 0d); + assertEquals(polygon.getY(2), -30, 0d); + assertEquals(polygon.getX(2), 45, 0d); + assertEquals(polygon.getY(3), -30, 0d); + assertEquals(polygon.getX(3), -45, 0d); } public void testLineStringBuilder() { diff --git a/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java b/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java index b744ad1609488..dc9f244fe4154 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java @@ -29,7 +29,7 @@ import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.geo.geometry.Point; +import org.elasticsearch.geometry.Point; import org.elasticsearch.index.query.QueryShardContext; import java.io.IOException; @@ -183,7 +183,7 @@ public void parse(ParseContext context) throws IOException { // Let's add a Dummy Shape if (shapeMapper instanceof GeoShapeFieldMapper) { - shapeMapper.parse(context.createExternalValueContext(new Point(45, -100))); + shapeMapper.parse(context.createExternalValueContext(new Point(-100, 45))); } else { PointBuilder pb = new PointBuilder(-100, 45); shapeMapper.parse(context.createExternalValueContext(pb.buildS4J())); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/GeoPointFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/GeoPointFieldMapperTests.java index 27da7cbe0592a..e84f917eaa92d 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/GeoPointFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/GeoPointFieldMapperTests.java @@ -39,7 +39,7 @@ import java.util.Collection; import static org.elasticsearch.action.support.WriteRequest.RefreshPolicy.IMMEDIATE; -import static org.elasticsearch.geo.utils.Geohash.stringEncode; +import static org.elasticsearch.geometry.utils.Geohash.stringEncode; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.elasticsearch.index.mapper.GeoPointFieldMapper.Names.IGNORE_Z_VALUE; import static org.elasticsearch.index.mapper.GeoPointFieldMapper.Names.NULL_VALUE; diff --git a/server/src/test/java/org/elasticsearch/index/search/geo/GeoPointParsingTests.java b/server/src/test/java/org/elasticsearch/index/search/geo/GeoPointParsingTests.java index 0d7f5f5fef68e..13433d26c2a5a 100644 --- a/server/src/test/java/org/elasticsearch/index/search/geo/GeoPointParsingTests.java +++ b/server/src/test/java/org/elasticsearch/index/search/geo/GeoPointParsingTests.java @@ -32,7 +32,7 @@ import java.io.IOException; import java.util.function.DoubleSupplier; -import static org.elasticsearch.geo.utils.Geohash.stringEncode; +import static org.elasticsearch.geometry.utils.Geohash.stringEncode; import static org.elasticsearch.test.EqualsHashCodeTestUtils.checkEqualsAndHashCode; import static org.hamcrest.Matchers.is; diff --git a/server/src/test/java/org/elasticsearch/index/search/geo/GeoUtilsTests.java b/server/src/test/java/org/elasticsearch/index/search/geo/GeoUtilsTests.java index 14052ea403aab..a15c9b1dedffb 100644 --- a/server/src/test/java/org/elasticsearch/index/search/geo/GeoUtilsTests.java +++ b/server/src/test/java/org/elasticsearch/index/search/geo/GeoUtilsTests.java @@ -28,7 +28,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser.Token; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.test.ESTestCase; import org.locationtech.spatial4j.context.SpatialContext; import org.locationtech.spatial4j.distance.DistanceUtils; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/GeoHashGridIT.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/GeoHashGridIT.java index 1067215445550..2f6c16a992c9e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/GeoHashGridIT.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/GeoHashGridIT.java @@ -44,8 +44,8 @@ import java.util.Random; import java.util.Set; -import static org.elasticsearch.geo.utils.Geohash.PRECISION; -import static org.elasticsearch.geo.utils.Geohash.stringEncode; +import static org.elasticsearch.geometry.utils.Geohash.PRECISION; +import static org.elasticsearch.geometry.utils.Geohash.stringEncode; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.elasticsearch.search.aggregations.AggregationBuilders.geohashGrid; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ShardReduceIT.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ShardReduceIT.java index f0494d2f0515b..97ed2b03d727e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ShardReduceIT.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ShardReduceIT.java @@ -20,7 +20,7 @@ import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.Aggregator.SubAggCollectionMode; import org.elasticsearch.search.aggregations.bucket.filter.Filter; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorTests.java index 5d0d684cd49a8..7fa517807f619 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridAggregatorTests.java @@ -19,7 +19,7 @@ package org.elasticsearch.search.aggregations.bucket.geogrid; -import static org.elasticsearch.geo.utils.Geohash.stringEncode; +import static org.elasticsearch.geometry.utils.Geohash.stringEncode; public class GeoHashGridAggregatorTests extends GeoGridAggregatorTestCase { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridTests.java index ce4748422336f..2370e8b3ca58e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridTests.java @@ -19,7 +19,7 @@ package org.elasticsearch.search.aggregations.bucket.geogrid; import org.elasticsearch.common.io.stream.Writeable; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractGeoTestCase.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractGeoTestCase.java index c32c919dcc78f..4e58d836683e7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractGeoTestCase.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractGeoTestCase.java @@ -33,7 +33,7 @@ import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; diff --git a/server/src/test/java/org/elasticsearch/search/geo/GeoDistanceIT.java b/server/src/test/java/org/elasticsearch/search/geo/GeoDistanceIT.java index f6803488d9a59..193bf1a81fef6 100644 --- a/server/src/test/java/org/elasticsearch/search/geo/GeoDistanceIT.java +++ b/server/src/test/java/org/elasticsearch/search/geo/GeoDistanceIT.java @@ -29,7 +29,7 @@ import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.index.fielddata.ScriptDocValues; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.plugins.Plugin; diff --git a/server/src/test/java/org/elasticsearch/search/geo/GeoFilterIT.java b/server/src/test/java/org/elasticsearch/search/geo/GeoFilterIT.java index a8d6af7c42107..37b44afe099a2 100644 --- a/server/src/test/java/org/elasticsearch/search/geo/GeoFilterIT.java +++ b/server/src/test/java/org/elasticsearch/search/geo/GeoFilterIT.java @@ -66,7 +66,7 @@ import java.util.zip.GZIPInputStream; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.elasticsearch.geo.utils.Geohash.addNeighbors; +import static org.elasticsearch.geometry.utils.Geohash.addNeighbors; import static org.elasticsearch.index.query.QueryBuilders.geoBoundingBoxQuery; import static org.elasticsearch.index.query.QueryBuilders.geoDistanceQuery; import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; diff --git a/server/src/test/java/org/elasticsearch/search/sort/GeoDistanceIT.java b/server/src/test/java/org/elasticsearch/search/sort/GeoDistanceIT.java index f3899785c499c..4d750c4d43828 100644 --- a/server/src/test/java/org/elasticsearch/search/sort/GeoDistanceIT.java +++ b/server/src/test/java/org/elasticsearch/search/sort/GeoDistanceIT.java @@ -27,7 +27,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.geo.utils.Geohash; +import org.elasticsearch.geometry.utils.Geohash; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.VersionUtils; diff --git a/server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java b/server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java index bbffb3e8287dd..576dc6dce3686 100644 --- a/server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java +++ b/server/src/test/java/org/elasticsearch/search/suggest/completion/GeoContextMappingTests.java @@ -40,7 +40,7 @@ import java.util.Collection; import java.util.List; -import static org.elasticsearch.geo.utils.Geohash.addNeighborsAtLevel; +import static org.elasticsearch.geometry.utils.Geohash.addNeighborsAtLevel; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.elasticsearch.search.suggest.completion.CategoryContextMappingTests.assertContextSuggestFields; import static org.hamcrest.Matchers.equalTo; diff --git a/server/src/test/java/org/elasticsearch/test/hamcrest/ElasticsearchGeoAssertions.java b/server/src/test/java/org/elasticsearch/test/hamcrest/ElasticsearchGeoAssertions.java index a5b64597181cf..40b09e378a717 100644 --- a/server/src/test/java/org/elasticsearch/test/hamcrest/ElasticsearchGeoAssertions.java +++ b/server/src/test/java/org/elasticsearch/test/hamcrest/ElasticsearchGeoAssertions.java @@ -24,7 +24,8 @@ import org.elasticsearch.common.geo.parsers.ShapeParser; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.geo.geometry.MultiLine; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.MultiLine; import org.hamcrest.Matcher; import org.junit.Assert; import org.locationtech.jts.geom.Coordinate; @@ -223,7 +224,7 @@ public static void assertEquals(Object s1, Object s2) { Assert.assertEquals(s1, s2); } else if (s1 instanceof Object[] && s2 instanceof Object[]) { Assert.assertArrayEquals((Object[]) s1, (Object[]) s2); - } else if (s1 instanceof org.elasticsearch.geo.geometry.Geometry && s2 instanceof org.elasticsearch.geo.geometry.Geometry) { + } else if (s1 instanceof org.elasticsearch.geometry.Geometry && s2 instanceof org.elasticsearch.geometry.Geometry) { Assert.assertEquals(s1, s2); } else { //We want to know the type of the shape because we test shape equality in a special way... @@ -245,7 +246,7 @@ public static void assertMultiPolygon(Object shape, boolean useJTS) { unwrapJTS(shape) instanceof MultiPolygon); } else { assertTrue("expected Polygon[] but found " + shape.getClass().getName(), - shape instanceof org.elasticsearch.geo.geometry.MultiPolygon); + shape instanceof org.elasticsearch.geometry.MultiPolygon); } } @@ -255,7 +256,7 @@ public static void assertPolygon(Object shape, boolean useJTS) { + unwrapJTS(shape).getClass().getName(), unwrapJTS(shape) instanceof Polygon); } else { assertTrue("expected Polygon but found " + shape.getClass().getName(), - shape instanceof org.elasticsearch.geo.geometry.Polygon); + shape instanceof org.elasticsearch.geometry.Polygon); } } @@ -265,7 +266,7 @@ public static void assertLineString(Object shape, boolean useJTS) { + unwrapJTS(shape).getClass().getName(), unwrapJTS(shape) instanceof LineString); } else { assertTrue("expected Line but found " + shape.getClass().getName(), - shape instanceof org.elasticsearch.geo.geometry.Line); + shape instanceof Line); } } diff --git a/test/framework/src/main/java/org/elasticsearch/geo/GeometryTestUtils.java b/test/framework/src/main/java/org/elasticsearch/geo/GeometryTestUtils.java index 863a5938d1d27..6555381f0c6e7 100644 --- a/test/framework/src/main/java/org/elasticsearch/geo/GeometryTestUtils.java +++ b/test/framework/src/main/java/org/elasticsearch/geo/GeometryTestUtils.java @@ -20,17 +20,17 @@ package org.elasticsearch.geo; import org.apache.lucene.geo.GeoTestUtil; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; import org.elasticsearch.test.ESTestCase; import java.util.ArrayList; @@ -53,10 +53,10 @@ public static double randomAlt() { public static Circle randomCircle(boolean hasAlt) { if (hasAlt) { - return new Circle(randomLat(), randomLon(), ESTestCase.randomDouble(), + return new Circle(randomLon(), randomLat(), ESTestCase.randomDouble(), ESTestCase.randomDoubleBetween(0, 100, false)); } else { - return new Circle(randomLat(), randomLon(), ESTestCase.randomDoubleBetween(0, 100, false)); + return new Circle(randomLon(), randomLat(), ESTestCase.randomDoubleBetween(0, 100, false)); } } @@ -75,9 +75,9 @@ public static Line randomLine(boolean hasAlts) { } } if (hasAlts) { - return new Line(lats, lons, alts); + return new Line(lons, lats, alts); } - return new Line(lats, lons); + return new Line(lons, lats); } public static Point randomPoint() { @@ -86,9 +86,9 @@ public static Point randomPoint() { public static Point randomPoint(boolean hasAlt) { if (hasAlt) { - return new Point(randomLat(), randomLon(), randomAlt()); + return new Point(randomLon(), randomLat(), randomAlt()); } else { - return new Point(randomLat(), randomLon()); + return new Point(randomLon(), randomLat()); } } @@ -99,11 +99,11 @@ public static Polygon randomPolygon(boolean hasAlt) { List holes = new ArrayList<>(); for (int i = 0; i < lucenePolygon.numHoles(); i++) { org.apache.lucene.geo.Polygon poly = luceneHoles[i]; - holes.add(linearRing(poly.getPolyLats(), poly.getPolyLons(), hasAlt)); + holes.add(linearRing(poly.getPolyLons(), poly.getPolyLats(), hasAlt)); } - return new Polygon(linearRing(lucenePolygon.getPolyLats(), lucenePolygon.getPolyLons(), hasAlt), holes); + return new Polygon(linearRing(lucenePolygon.getPolyLons(), lucenePolygon.getPolyLats(), hasAlt), holes); } - return new Polygon(linearRing(lucenePolygon.getPolyLats(), lucenePolygon.getPolyLons(), hasAlt)); + return new Polygon(linearRing(lucenePolygon.getPolyLons(), lucenePolygon.getPolyLats(), hasAlt)); } @@ -116,16 +116,16 @@ private static double[] randomAltRing(int size) { return alts; } - public static LinearRing linearRing(double[] lats, double[] lons, boolean generateAlts) { + public static LinearRing linearRing(double[] lons, double[] lats,boolean generateAlts) { if (generateAlts) { - return new LinearRing(lats, lons, randomAltRing(lats.length)); + return new LinearRing(lons, lats, randomAltRing(lats.length)); } - return new LinearRing(lats, lons); + return new LinearRing(lons, lats); } public static Rectangle randomRectangle() { org.apache.lucene.geo.Rectangle rectangle = GeoTestUtil.nextBox(); - return new Rectangle(rectangle.minLat, rectangle.maxLat, rectangle.minLon, rectangle.maxLon); + return new Rectangle(rectangle.minLon, rectangle.maxLon, rectangle.maxLat, rectangle.minLat); } public static MultiPoint randomMultiPoint(boolean hasAlt) { diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/extractor/fields/ExtractedField.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/extractor/fields/ExtractedField.java index 8c741e3c53565..e6f3c14f91433 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/extractor/fields/ExtractedField.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/extractor/fields/ExtractedField.java @@ -6,11 +6,11 @@ package org.elasticsearch.xpack.ml.datafeed.extractor.fields; import org.elasticsearch.common.document.DocumentField; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.ShapeType; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.ShapeType; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.search.SearchHit; import java.io.IOException; @@ -168,7 +168,7 @@ private String handleString(String geoString) { throw new IllegalArgumentException("Unexpected non-point geo_shape type: " + geometry.type().name()); } Point pt = ((Point)geometry); - return pt.getLat() + "," + pt.getLon(); + return pt.getY() + "," + pt.getX(); } else { throw new IllegalArgumentException("Unexpected value for a geo_shape field: " + geoString); } diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeFieldMapper.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeFieldMapper.java index 667422b8c00aa..472caa6e8ed86 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeFieldMapper.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeFieldMapper.java @@ -10,7 +10,7 @@ import org.elasticsearch.common.geo.GeometryParser; import org.elasticsearch.common.geo.builders.ShapeBuilder; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.geo.geometry.Geometry; +import org.elasticsearch.geometry.Geometry; import org.elasticsearch.index.mapper.AbstractGeometryFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperParsingException; diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeIndexer.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeIndexer.java index d76ef95d72a36..2df89bee955ba 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeIndexer.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeIndexer.java @@ -9,15 +9,18 @@ import org.apache.lucene.geo.XYLine; import org.apache.lucene.geo.XYPolygon; import org.apache.lucene.index.IndexableField; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; import org.elasticsearch.index.mapper.AbstractGeometryFieldMapper; import org.elasticsearch.index.mapper.ParseContext; @@ -71,8 +74,8 @@ public Void visit(GeometryCollection collection) { } @Override - public Void visit(org.elasticsearch.geo.geometry.Line line) { - float[][] vertices = lineToFloatArray(line.getLons(), line.getLats()); + public Void visit(Line line) { + float[][] vertices = lineToFloatArray(line.getX(), line.getY()); addFields(XYShape.createIndexableFields(name, new XYLine(vertices[0], vertices[1]))); return null; } @@ -84,7 +87,7 @@ public Void visit(LinearRing ring) { @Override public Void visit(MultiLine multiLine) { - for (org.elasticsearch.geo.geometry.Line line : multiLine) { + for (Line line : multiLine) { visit(line); } return null; @@ -100,7 +103,7 @@ public Void visit(MultiPoint multiPoint) { @Override public Void visit(MultiPolygon multiPolygon) { - for(org.elasticsearch.geo.geometry.Polygon polygon : multiPolygon) { + for(Polygon polygon : multiPolygon) { visit(polygon); } return null; @@ -108,21 +111,21 @@ public Void visit(MultiPolygon multiPolygon) { @Override public Void visit(Point point) { - addFields(XYShape.createIndexableFields(name, (float)point.getLon(), (float)point.getLat())); + addFields(XYShape.createIndexableFields(name, (float)point.getX(), (float)point.getY())); return null; } @Override - public Void visit(org.elasticsearch.geo.geometry.Polygon polygon) { + public Void visit(Polygon polygon) { addFields(XYShape.createIndexableFields(name, toLucenePolygon(polygon))); return null; } @Override - public Void visit(org.elasticsearch.geo.geometry.Rectangle r) { + public Void visit(Rectangle r) { XYPolygon p = new XYPolygon( - new float[]{(float)r.getMinLon(), (float)r.getMaxLon(), (float)r.getMaxLon(), (float)r.getMinLon(), (float)r.getMinLon()}, - new float[]{(float)r.getMinLat(), (float)r.getMinLat(), (float)r.getMaxLat(), (float)r.getMaxLat(), (float)r.getMinLat()}); + new float[]{(float)r.getMinX(), (float)r.getMaxX(), (float)r.getMaxX(), (float)r.getMinX(), (float)r.getMinX()}, + new float[]{(float)r.getMinY(), (float)r.getMinY(), (float)r.getMaxY(), (float)r.getMaxY(), (float)r.getMinY()}); addFields(XYShape.createIndexableFields(name, p)); return null; } @@ -132,17 +135,17 @@ private void addFields(IndexableField[] fields) { } } - public static XYPolygon toLucenePolygon(org.elasticsearch.geo.geometry.Polygon polygon) { + public static XYPolygon toLucenePolygon(Polygon polygon) { XYPolygon[] holes = new XYPolygon[polygon.getNumberOfHoles()]; LinearRing ring; float[][] vertices; for(int i = 0; i collection) { } @Override - public Query visit(org.elasticsearch.geo.geometry.Line line) { + public Query visit(Line line) { return XYShape.newLineQuery(fieldName, relation.getLuceneRelation(), - new XYLine(doubleArrayToFloatArray(line.getLons()), doubleArrayToFloatArray(line.getLats()))); + new XYLine(doubleArrayToFloatArray(line.getX()), doubleArrayToFloatArray(line.getY()))); } @Override @@ -98,8 +101,8 @@ public Query visit(LinearRing ring) { public Query visit(MultiLine multiLine) { XYLine[] lines = new XYLine[multiLine.size()]; for (int i=0; i holes = new ArrayList<>(); for (int i = 0; i < lucenePolygon.numHoles(); i++) { XYPolygon poly = luceneHoles[i]; - holes.add(linearRing(poly.getPolyY(), poly.getPolyX(), hasAlt)); + holes.add(linearRing(poly.getPolyX(), poly.getPolyY(), hasAlt)); } - return new Polygon(linearRing(lucenePolygon.getPolyY(), lucenePolygon.getPolyX(), hasAlt), holes); + return new Polygon(linearRing(lucenePolygon.getPolyX(), lucenePolygon.getPolyY(), hasAlt), holes); } - return new Polygon(linearRing(lucenePolygon.getPolyY(), lucenePolygon.getPolyX(), hasAlt)); + return new Polygon(linearRing(lucenePolygon.getPolyX(), lucenePolygon.getPolyY(), hasAlt)); } public static Rectangle randomRectangle() { org.apache.lucene.geo.XYRectangle rectangle = XShapeTestUtil.nextBox(); - return new Rectangle(rectangle.minY, rectangle.maxY, rectangle.minX, rectangle.maxX); + return new Rectangle(rectangle.minX, rectangle.maxX, rectangle.maxY, rectangle.minY); } public static MultiPoint randomMultiPoint(boolean hasAlt) { diff --git a/x-pack/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/TypeConverter.java b/x-pack/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/TypeConverter.java index 82615662d7147..b788161cd4abc 100644 --- a/x-pack/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/TypeConverter.java +++ b/x-pack/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/TypeConverter.java @@ -5,8 +5,8 @@ */ package org.elasticsearch.xpack.sql.jdbc; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.xpack.sql.proto.StringUtils; import java.io.IOException; diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/JdbcAssert.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/JdbcAssert.java index e26313cbad9a5..ec9386d2d6e12 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/JdbcAssert.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/jdbc/JdbcAssert.java @@ -8,10 +8,10 @@ import com.carrotsearch.hppc.IntObjectHashMap; import org.apache.logging.log4j.Logger; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.xpack.sql.jdbc.EsType; import org.elasticsearch.xpack.sql.proto.StringUtils; import org.relique.jdbc.csv.CsvResultSet; @@ -78,7 +78,7 @@ public static void assertResultSets(ResultSet expected, ResultSet actual, Logger public static void assertResultSets(ResultSet expected, ResultSet actual, Logger logger, boolean lenientDataType) throws SQLException { assertResultSets(expected, actual, logger, lenientDataType, true); } - + /** * Assert the given result sets, potentially in a lenient way. * When lenientDataType is specified, the type comparison of a column is widden to reach a common, compatible ground. @@ -165,7 +165,7 @@ public static void assertResultSetMetadata(ResultSet expected, ResultSet actual, if ((expectedType == Types.VARCHAR && expected instanceof CsvResultSet) && nameOf(actualType).startsWith("INTERVAL_")) { expectedType = actualType; } - + // csv doesn't support NULL type so skip type checking if (actualType == Types.NULL && expected instanceof CsvResultSet) { expectedType = Types.NULL; @@ -177,7 +177,7 @@ public static void assertResultSetMetadata(ResultSet expected, ResultSet actual, expectedType, actualType); } } - + private static String nameOf(int sqlType) { return SQL_TO_TYPE.get(sqlType).getName(); } @@ -191,7 +191,7 @@ public static void assertResultSetData(ResultSet expected, ResultSet actual, Log throws SQLException { assertResultSetData(expected, actual, logger, lenientDataType, true); } - + public static void assertResultSetData(ResultSet expected, ResultSet actual, Logger logger, boolean lenientDataType, boolean lenientFloatingNumbers) throws SQLException { try (ResultSet ex = expected; ResultSet ac = actual) { @@ -282,8 +282,8 @@ else if (type == Types.DOUBLE) { // geo points are loaded form doc values where they are stored as long-encoded values leading // to lose in precision assertThat(expectedObject, instanceOf(Point.class)); - assertEquals(((Point) expectedObject).getLat(), ((Point) actualObject).getLat(), 0.000001d); - assertEquals(((Point) expectedObject).getLon(), ((Point) actualObject).getLon(), 0.000001d); + assertEquals(((Point) expectedObject).getY(), ((Point) actualObject).getY(), 0.000001d); + assertEquals(((Point) expectedObject).getX(), ((Point) actualObject).getX(), 0.000001d); } else { assertEquals(msg, expectedObject, actualObject); } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/geo/GeoShape.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/geo/GeoShape.java index ad0bbdd7c94c8..3006a08fad202 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/geo/GeoShape.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/geo/GeoShape.java @@ -17,21 +17,21 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.geo.geometry.Circle; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.GeometryCollection; -import org.elasticsearch.geo.geometry.GeometryVisitor; -import org.elasticsearch.geo.geometry.Line; -import org.elasticsearch.geo.geometry.LinearRing; -import org.elasticsearch.geo.geometry.MultiLine; -import org.elasticsearch.geo.geometry.MultiPoint; -import org.elasticsearch.geo.geometry.MultiPolygon; -import org.elasticsearch.geo.geometry.Point; -import org.elasticsearch.geo.geometry.Polygon; -import org.elasticsearch.geo.geometry.Rectangle; -import org.elasticsearch.geo.utils.StandardValidator; -import org.elasticsearch.geo.utils.GeometryValidator; -import org.elasticsearch.geo.utils.WellKnownText; +import org.elasticsearch.geometry.Circle; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.GeometryCollection; +import org.elasticsearch.geometry.GeometryVisitor; +import org.elasticsearch.geometry.Line; +import org.elasticsearch.geometry.LinearRing; +import org.elasticsearch.geometry.MultiLine; +import org.elasticsearch.geometry.MultiPoint; +import org.elasticsearch.geometry.MultiPolygon; +import org.elasticsearch.geometry.Point; +import org.elasticsearch.geometry.Polygon; +import org.elasticsearch.geometry.Rectangle; +import org.elasticsearch.geometry.utils.StandardValidator; +import org.elasticsearch.geometry.utils.GeometryValidator; +import org.elasticsearch.geometry.utils.WellKnownText; import org.elasticsearch.xpack.sql.SqlIllegalArgumentException; import java.io.IOException; @@ -58,7 +58,7 @@ public class GeoShape implements ToXContentFragment, NamedWriteable { private static final WellKnownText WKT_PARSER = new WellKnownText(true, validator); public GeoShape(double lon, double lat) { - shape = new Point(lat, lon); + shape = new Point(lon, lat); } public GeoShape(Object value) throws IOException { @@ -101,7 +101,7 @@ public Point firstPoint() { return shape.visit(new GeometryVisitor() { @Override public Point visit(Circle circle) { - return new Point(circle.getLat(), circle.getLon(), circle.hasAlt() ? circle.getAlt() : Double.NaN); + return new Point(circle.getX(), circle.getY(), circle.hasZ() ? circle.getZ() : Double.NaN); } @Override @@ -115,7 +115,7 @@ public Point visit(GeometryCollection collection) { @Override public Point visit(Line line) { if (line.length() > 0) { - return new Point(line.getLat(0), line.getLon(0), line.hasAlt() ? line.getAlt(0) : Double.NaN); + return new Point(line.getX(0), line.getY(0), line.hasZ() ? line.getZ(0) : Double.NaN); } return null; } @@ -152,24 +152,24 @@ public Point visit(Polygon polygon) { @Override public Point visit(Rectangle rectangle) { - return new Point(rectangle.getMinLat(), rectangle.getMinLon(), rectangle.getMinAlt()); + return new Point(rectangle.getMinX(), rectangle.getMinY(), rectangle.getMinZ()); } }); } public Double getX() { Point firstPoint = firstPoint(); - return firstPoint != null ? firstPoint.getLon() : null; + return firstPoint != null ? firstPoint.getX() : null; } public Double getY() { Point firstPoint = firstPoint(); - return firstPoint != null ? firstPoint.getLat() : null; + return firstPoint != null ? firstPoint.getY() : null; } public Double getZ() { Point firstPoint = firstPoint(); - return firstPoint != null && firstPoint.hasAlt() ? firstPoint.getAlt() : null; + return firstPoint != null && firstPoint.hasZ() ? firstPoint.getZ() : null; } public String getGeometryType() { @@ -183,10 +183,10 @@ public static double distance(GeoShape shape1, GeoShape shape2) { if (shape2.shape instanceof Point == false) { throw new SqlIllegalArgumentException("distance calculation is only supported for points; received [{}]", shape2); } - double srcLat = ((Point) shape1.shape).getLat(); - double srcLon = ((Point) shape1.shape).getLon(); - double dstLat = ((Point) shape2.shape).getLat(); - double dstLon = ((Point) shape2.shape).getLon(); + double srcLat = ((Point) shape1.shape).getY(); + double srcLon = ((Point) shape1.shape).getX(); + double dstLat = ((Point) shape2.shape).getY(); + double dstLon = ((Point) shape2.shape).getX(); return GeoUtils.arcDistance(srcLat, srcLon, dstLat, dstLon); } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/planner/QueryTranslator.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/planner/QueryTranslator.java index 7e5516810d92a..c70302795679c 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/planner/QueryTranslator.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/planner/QueryTranslator.java @@ -5,8 +5,8 @@ */ package org.elasticsearch.xpack.sql.planner; -import org.elasticsearch.geo.geometry.Geometry; -import org.elasticsearch.geo.geometry.Point; +import org.elasticsearch.geometry.Geometry; +import org.elasticsearch.geometry.Point; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.xpack.sql.SqlIllegalArgumentException; import org.elasticsearch.xpack.sql.expression.Attribute; @@ -151,7 +151,7 @@ private QueryTranslator(){} new CountAggs(), new DateTimes(), new Firsts(), - new Lasts(), + new Lasts(), new MADs() ); @@ -673,7 +673,7 @@ private static Query translateQuery(BinaryComparison bc) { if (geometry instanceof Point) { String field = nameOf(stDistance.left()); return new GeoDistanceQuery(source, field, ((Number) value).doubleValue(), - ((Point) geometry).getLat(), ((Point) geometry).getLon()); + ((Point) geometry).getY(), ((Point) geometry).getX()); } } } @@ -756,7 +756,7 @@ static class Ranges extends ExpressionTranslator { @Override protected QueryTranslation asQuery(Range r, boolean onAggs) { Expression e = r.value(); - + if (e instanceof NamedExpression) { Query query = null; AggFilter aggFilter = null; @@ -779,7 +779,7 @@ protected QueryTranslation asQuery(Range r, boolean onAggs) { } } } - + static class Scalars extends ExpressionTranslator { @Override @@ -803,7 +803,7 @@ protected QueryTranslation asQuery(ScalarFunction f, boolean onAggs) { // // Agg translators // - + static class CountAggs extends SingleValueAggTranslator { @Override