From c13310220004fa32d3c43cc0176495d4b84b282e Mon Sep 17 00:00:00 2001 From: Igor Motov Date: Fri, 9 Aug 2019 13:22:00 -0400 Subject: [PATCH] Geo: Change order of parameter in Geometries to lon, lat 7.x Changes the order of parameters in Geometries from lat, lon to lon, lat and moves all Geometry classes are moved to the org.elasticsearch.geomtery package. Backport of #45332 Closes #45048 --- .../migration/migrate_7_0/java.asciidoc | 8 + .../{geo => }/geometry/Circle.java | 68 +++++--- .../{geo => }/geometry/Geometry.java | 8 +- .../geometry/GeometryCollection.java | 17 +- .../{geo => }/geometry/GeometryVisitor.java | 6 +- .../{geo => }/geometry/Line.java | 110 +++++++----- .../{geo => }/geometry/LinearRing.java | 33 ++-- .../{geo => }/geometry/MultiLine.java | 2 +- .../{geo => }/geometry/MultiPoint.java | 2 +- .../{geo => }/geometry/MultiPolygon.java | 2 +- .../{geo => }/geometry/Point.java | 65 ++++--- .../{geo => }/geometry/Polygon.java | 8 +- .../{geo => }/geometry/Rectangle.java | 145 ++++++++-------- .../{geo => }/geometry/ShapeType.java | 2 +- .../{geo => geometry}/package-info.java | 4 +- .../{geo => geometry}/utils/BitUtil.java | 2 +- .../utils/GeographyValidator.java | 64 +++---- .../{geo => geometry}/utils/Geohash.java | 16 +- .../utils/GeometryValidator.java | 4 +- .../utils/StandardValidator.java | 42 ++--- .../utils/WellKnownText.java | 88 +++++----- .../geometry/BaseGeometryTestCase.java | 10 +- .../{geo => }/geometry/CircleTests.java | 32 ++-- .../geometry/GeometryCollectionTests.java | 20 +-- .../geometry/GeometryValidatorTests.java | 8 +- .../{geo => }/geometry/LineTests.java | 28 +-- .../{geo => }/geometry/LinearRingTests.java | 36 ++-- .../{geo => }/geometry/MultiLineTests.java | 16 +- .../{geo => }/geometry/MultiPointTests.java | 24 +-- .../{geo => }/geometry/MultiPolygonTests.java | 16 +- .../{geo => }/geometry/PointTests.java | 26 +-- .../{geo => }/geometry/PolygonTests.java | 40 ++--- .../{geo => }/geometry/RectangleTests.java | 30 ++-- .../{geo => geometry}/utils/GeoHashTests.java | 14 +- .../org/elasticsearch/common/geo/GeoJson.java | 68 ++++---- .../elasticsearch/common/geo/GeoPoint.java | 22 +-- .../common/geo/GeometryFormat.java | 2 +- .../elasticsearch/common/geo/GeometryIO.java | 48 ++--- .../common/geo/GeometryParser.java | 8 +- .../common/geo/builders/CircleBuilder.java | 4 +- .../common/geo/builders/EnvelopeBuilder.java | 6 +- .../builders/GeometryCollectionBuilder.java | 11 +- .../geo/builders/LineStringBuilder.java | 10 +- .../geo/builders/MultiLineStringBuilder.java | 14 +- .../geo/builders/MultiPointBuilder.java | 4 +- .../geo/builders/MultiPolygonBuilder.java | 9 +- .../common/geo/builders/PointBuilder.java | 6 +- .../common/geo/builders/PolygonBuilder.java | 17 +- .../common/geo/builders/ShapeBuilder.java | 2 +- .../index/fielddata/ScriptDocValues.java | 2 +- .../mapper/AbstractGeometryFieldMapper.java | 2 +- .../index/mapper/GeoShapeFieldMapper.java | 2 +- .../index/mapper/GeoShapeIndexer.java | 164 +++++++++--------- .../query/AbstractGeometryQueryBuilder.java | 2 +- .../query/GeoBoundingBoxQueryBuilder.java | 6 +- .../index/query/GeoShapeQueryBuilder.java | 2 +- .../query/LegacyGeoShapeQueryProcessor.java | 40 +++-- .../index/query/QueryBuilders.java | 2 +- .../query/VectorGeoShapeQueryProcessor.java | 33 ++-- .../elasticsearch/search/DocValueFormat.java | 2 +- .../geogrid/GeoHashGridAggregatorFactory.java | 2 +- .../geogrid/InternalGeoHashGridBucket.java | 2 +- .../completion/context/GeoContextMapping.java | 4 +- .../common/geo/BaseGeoParsingTestCase.java | 6 +- .../common/geo/GeoJsonParserTests.java | 76 ++++---- .../common/geo/GeoJsonSerializationTests.java | 4 +- .../common/geo/GeoJsonShapeParserTests.java | 96 +++++----- .../common/geo/GeoWKTShapeParserTests.java | 38 ++-- .../common/geo/GeometryIOTests.java | 8 +- .../common/geo/GeometryIndexerTests.java | 82 ++++----- .../common/geo/GeometryParserTests.java | 24 +-- .../common/geo/ShapeBuilderTests.java | 71 ++++---- .../index/mapper/ExternalMapper.java | 4 +- .../mapper/GeoPointFieldMapperTests.java | 2 +- .../search/geo/GeoPointParsingTests.java | 2 +- .../index/search/geo/GeoUtilsTests.java | 2 +- .../aggregations/bucket/GeoHashGridIT.java | 4 +- .../aggregations/bucket/ShardReduceIT.java | 2 +- .../geogrid/GeoHashGridAggregatorTests.java | 2 +- .../bucket/geogrid/GeoHashGridTests.java | 2 +- .../metrics/AbstractGeoTestCase.java | 2 +- .../search/geo/GeoDistanceIT.java | 2 +- .../elasticsearch/search/geo/GeoFilterIT.java | 2 +- .../search/sort/GeoDistanceIT.java | 2 +- .../completion/GeoContextMappingTests.java | 2 +- .../hamcrest/ElasticsearchGeoAssertions.java | 11 +- .../elasticsearch/geo/GeometryTestUtils.java | 48 ++--- .../extractor/fields/ExtractedField.java | 12 +- .../index/mapper/ShapeFieldMapper.java | 2 +- .../spatial/index/mapper/ShapeIndexer.java | 45 ++--- .../index/query/ShapeQueryBuilder.java | 2 +- .../index/query/ShapeQueryProcessor.java | 37 ++-- .../index/query/ShapeQueryBuilderTests.java | 4 +- .../xpack/spatial/search/ShapeQueryTests.java | 4 +- .../xpack/spatial/util/ShapeTestUtils.java | 28 +-- .../xpack/sql/jdbc/TypeConverter.java | 4 +- .../xpack/sql/qa/jdbc/JdbcAssert.java | 20 +-- .../function/scalar/geo/GeoShape.java | 52 +++--- .../xpack/sql/planner/QueryTranslator.java | 16 +- 99 files changed, 1159 insertions(+), 1053 deletions(-) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Circle.java (69%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Geometry.java (91%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/GeometryCollection.java (87%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/GeometryVisitor.java (91%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Line.java (52%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/LinearRing.java (64%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/MultiLine.java (97%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/MultiPoint.java (97%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/MultiPolygon.java (97%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Point.java (67%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Polygon.java (96%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/Rectangle.java (53%) rename libs/geo/src/main/java/org/elasticsearch/{geo => }/geometry/ShapeType.java (97%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/package-info.java (92%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/BitUtil.java (98%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/GeographyValidator.java (75%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/Geohash.java (95%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/GeometryValidator.java (92%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/StandardValidator.java (78%) rename libs/geo/src/main/java/org/elasticsearch/{geo => geometry}/utils/WellKnownText.java (89%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/BaseGeometryTestCase.java (94%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/CircleTests.java (70%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/GeometryCollectionTests.java (86%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/GeometryValidatorTests.java (95%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/LineTests.java (74%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/LinearRingTests.java (73%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/MultiLineTests.java (85%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/MultiPointTests.java (75%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/MultiPolygonTests.java (78%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/PointTests.java (77%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/PolygonTests.java (67%) rename libs/geo/src/test/java/org/elasticsearch/{geo => }/geometry/RectangleTests.java (72%) rename libs/geo/src/test/java/org/elasticsearch/{geo => geometry}/utils/GeoHashTests.java (90%) diff --git a/docs/reference/migration/migrate_7_0/java.asciidoc b/docs/reference/migration/migrate_7_0/java.asciidoc index e1533ad8c53b3..1c5666ec5657f 100644 --- a/docs/reference/migration/migrate_7_0/java.asciidoc +++ b/docs/reference/migration/migrate_7_0/java.asciidoc @@ -57,3 +57,11 @@ The client method `termVector`, deprecated in 2.0, has been removed. The method The constructor `AbstractLifecycleComponent(Settings settings)`, deprecated in 6.7 has been removed. The parameterless constructor should be used instead. + +[float] +==== Changes to Geometry classes + +Geometry classes used to represent geo values in SQL have been moved from the +`org.elasticsearch.geo.geometry` package to the `org.elasticsearch.geometry` +package and the order of the constructor parameters has changed from `lat`, `lon` +to `lon`, `lat`. 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 04f96e09f13dc..06b3027fe64d8 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 d6ba295be67e3..08895e272adec 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 @@ -52,7 +52,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 1e2a89dc9496f..00d3ebb2c5abc 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 6e1264b0e1932..f0068f29e3382 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 e07e6dd6d4f58..a52ddd1b62d4b 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 3b4bf73de7366..c4459ced05566 100644 --- a/server/src/main/java/org/elasticsearch/search/DocValueFormat.java +++ b/server/src/main/java/org/elasticsearch/search/DocValueFormat.java @@ -30,7 +30,7 @@ import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.common.time.DateMathParser; import org.elasticsearch.common.time.DateUtils; -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 6cee71c25aea1..8a25cbb973808 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 57800236efe7d..28a737e9e36e8 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 9267018ddb31c..dd768f1386e62 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/ExternalMapper.java @@ -30,7 +30,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; @@ -187,7 +187,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 adfc8c7dd2db7..433e91b6da18a 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 7af00168c9c89..241d22b3e2775 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 be72f091a53d4..fa66a83b89cb4 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 83fce4b137cef..5e07b8276b2c2 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 d1829dc7b63c7..d46b2a3da01b3 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 @@ -6,8 +6,8 @@ package org.elasticsearch.xpack.sql.planner; import org.elasticsearch.common.time.DateFormatter; -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; @@ -157,7 +157,7 @@ private QueryTranslator(){} new CountAggs(), new DateTimes(), new Firsts(), - new Lasts(), + new Lasts(), new MADs() ); @@ -679,7 +679,7 @@ private static Query translateQuery(BinaryComparison bc) { // Since RangeQueryBuilder can handle date as String as well, we'll format it as String and provide the format as well. value = formatter.format((ZonedDateTime) value); } else { - formatter = DateFormatter.forPattern(TIME_FORMAT); + formatter = DateFormatter.forPattern(TIME_FORMAT); value = formatter.format((OffsetTime) value); } format = formatter.pattern(); @@ -698,7 +698,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()); } } } @@ -787,7 +787,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; @@ -810,7 +810,7 @@ protected QueryTranslation asQuery(Range r, boolean onAggs) { } } } - + static class Scalars extends ExpressionTranslator { @Override @@ -834,7 +834,7 @@ protected QueryTranslation asQuery(ScalarFunction f, boolean onAggs) { // // Agg translators // - + static class CountAggs extends SingleValueAggTranslator { @Override