diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoDistance.java b/src/main/java/org/elasticsearch/common/geo/GeoDistance.java
similarity index 89%
rename from src/main/java/org/elasticsearch/index/search/geo/GeoDistance.java
rename to src/main/java/org/elasticsearch/common/geo/GeoDistance.java
index 719a50c9001..0ded5587e84 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoDistance.java
+++ b/src/main/java/org/elasticsearch/common/geo/GeoDistance.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.elasticsearch.index.search.geo;
+package org.elasticsearch.common.geo;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
import org.elasticsearch.common.unit.DistanceUnit;
@@ -136,8 +136,8 @@ public enum GeoDistance {
maxLon = MAX_LON;
}
- Point topLeft = new Point(Math.toDegrees(maxLat), Math.toDegrees(minLon));
- Point bottomRight = new Point(Math.toDegrees(minLat), Math.toDegrees(maxLon));
+ GeoPoint topLeft = new GeoPoint(Math.toDegrees(maxLat), Math.toDegrees(minLon));
+ GeoPoint bottomRight = new GeoPoint(Math.toDegrees(minLat), Math.toDegrees(maxLon));
if (minLon > maxLon) {
return new Meridian180DistanceBoundingCheck(topLeft, bottomRight);
}
@@ -164,9 +164,9 @@ public enum GeoDistance {
boolean isWithin(double targetLatitude, double targetLongitude);
- Point topLeft();
+ GeoPoint topLeft();
- Point bottomRight();
+ GeoPoint bottomRight();
}
public static AlwaysDistanceBoundingCheck ALWAYS_INSTANCE = new AlwaysDistanceBoundingCheck();
@@ -178,65 +178,65 @@ public enum GeoDistance {
}
@Override
- public Point topLeft() {
+ public GeoPoint topLeft() {
return null;
}
@Override
- public Point bottomRight() {
+ public GeoPoint bottomRight() {
return null;
}
}
public static class Meridian180DistanceBoundingCheck implements DistanceBoundingCheck {
- private final Point topLeft;
- private final Point bottomRight;
+ private final GeoPoint topLeft;
+ private final GeoPoint bottomRight;
- public Meridian180DistanceBoundingCheck(Point topLeft, Point bottomRight) {
+ public Meridian180DistanceBoundingCheck(GeoPoint topLeft, GeoPoint bottomRight) {
this.topLeft = topLeft;
this.bottomRight = bottomRight;
}
@Override
public boolean isWithin(double targetLatitude, double targetLongitude) {
- return (targetLatitude >= bottomRight.lat && targetLatitude <= topLeft.lat) &&
- (targetLongitude >= topLeft.lon || targetLongitude <= bottomRight.lon);
+ return (targetLatitude >= bottomRight.lat() && targetLatitude <= topLeft.lat()) &&
+ (targetLongitude >= topLeft.lon() || targetLongitude <= bottomRight.lon());
}
@Override
- public Point topLeft() {
+ public GeoPoint topLeft() {
return topLeft;
}
@Override
- public Point bottomRight() {
+ public GeoPoint bottomRight() {
return bottomRight;
}
}
public static class SimpleDistanceBoundingCheck implements DistanceBoundingCheck {
- private final Point topLeft;
- private final Point bottomRight;
+ private final GeoPoint topLeft;
+ private final GeoPoint bottomRight;
- public SimpleDistanceBoundingCheck(Point topLeft, Point bottomRight) {
+ public SimpleDistanceBoundingCheck(GeoPoint topLeft, GeoPoint bottomRight) {
this.topLeft = topLeft;
this.bottomRight = bottomRight;
}
@Override
public boolean isWithin(double targetLatitude, double targetLongitude) {
- return (targetLatitude >= bottomRight.lat && targetLatitude <= topLeft.lat) &&
- (targetLongitude >= topLeft.lon && targetLongitude <= bottomRight.lon);
+ return (targetLatitude >= bottomRight.lat() && targetLatitude <= topLeft.lat()) &&
+ (targetLongitude >= topLeft.lon() && targetLongitude <= bottomRight.lon());
}
@Override
- public Point topLeft() {
+ public GeoPoint topLeft() {
return topLeft;
}
@Override
- public Point bottomRight() {
+ public GeoPoint bottomRight() {
return bottomRight;
}
}
diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoHashUtils.java b/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java
similarity index 94%
rename from src/main/java/org/elasticsearch/index/search/geo/GeoHashUtils.java
rename to src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java
index af16ddc09f9..c6362e93ec6 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoHashUtils.java
+++ b/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.elasticsearch.index.search.geo;
+package org.elasticsearch.common.geo;
import gnu.trove.map.hash.TIntIntHashMap;
@@ -112,10 +112,10 @@ public class GeoHashUtils {
return geohash.toString();
}
- public static double[] decode(String geohash) {
- double[] ret = new double[2];
- decode(geohash, ret);
- return ret;
+ public static GeoPoint decode(String geohash) {
+ GeoPoint point = new GeoPoint();
+ decode(geohash, point);
+ return point;
}
/**
@@ -124,7 +124,7 @@ public class GeoHashUtils {
* @param geohash Geohash to deocde
* @return Array with the latitude at index 0, and longitude at index 1
*/
- public static void decode(String geohash, double[] ret) {
+ public static void decode(String geohash, GeoPoint ret) {
// double[] latInterval = {-90.0, 90.0};
// double[] lngInterval = {-180.0, 180.0};
double latInterval0 = -90.0;
@@ -160,10 +160,9 @@ public class GeoHashUtils {
}
// latitude = (latInterval[0] + latInterval[1]) / 2D;
- ret[0] = (latInterval0 + latInterval1) / 2D;
// longitude = (lngInterval[0] + lngInterval[1]) / 2D;
- ret[1] = (lngInterval0 + lngInterval1) / 2D;
+ ret.reset((latInterval0 + latInterval1) / 2D, (lngInterval0 + lngInterval1) / 2D);
// return ret;
}
}
\ No newline at end of file
diff --git a/src/main/java/org/elasticsearch/index/mapper/geo/GeoPoint.java b/src/main/java/org/elasticsearch/common/geo/GeoPoint.java
similarity index 75%
rename from src/main/java/org/elasticsearch/index/mapper/geo/GeoPoint.java
rename to src/main/java/org/elasticsearch/common/geo/GeoPoint.java
index 50918588546..37d79150842 100644
--- a/src/main/java/org/elasticsearch/index/mapper/geo/GeoPoint.java
+++ b/src/main/java/org/elasticsearch/common/geo/GeoPoint.java
@@ -17,9 +17,7 @@
* under the License.
*/
-package org.elasticsearch.index.mapper.geo;
-
-import org.elasticsearch.index.search.geo.GeoHashUtils;
+package org.elasticsearch.common.geo;
/**
*
@@ -43,6 +41,32 @@ public class GeoPoint {
return this;
}
+ public GeoPoint resetLat(double lat) {
+ this.lat = lat;
+ return this;
+ }
+
+ public GeoPoint resetLon(double lon) {
+ this.lon = lon;
+ return this;
+ }
+
+ public GeoPoint resetFromString(String value) {
+ int comma = value.indexOf(',');
+ if (comma != -1) {
+ lat = Double.parseDouble(value.substring(0, comma).trim());
+ lon = Double.parseDouble(value.substring(comma + 1).trim());
+ } else {
+ resetFromGeoHash(value);
+ }
+ return this;
+ }
+
+ public GeoPoint resetFromGeoHash(String hash) {
+ GeoHashUtils.decode(hash, this);
+ return this;
+ }
+
void latlon(double lat, double lon) {
this.lat = lat;
this.lon = lon;
@@ -95,4 +119,8 @@ public class GeoPoint {
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
+
+ public String toString() {
+ return "[" + lat + ", " + lon + "]";
+ }
}
diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoUtils.java b/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
similarity index 70%
rename from src/main/java/org/elasticsearch/index/search/geo/GeoUtils.java
rename to src/main/java/org/elasticsearch/common/geo/GeoUtils.java
index 1bedff92b40..b56a95e0463 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoUtils.java
+++ b/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.elasticsearch.index.search.geo;
+package org.elasticsearch.common.geo;
/**
*/
@@ -27,7 +27,6 @@ public class GeoUtils {
* Normalize longitude to lie within the -180 (exclusive) to 180 (inclusive) range.
*
* @param lon Longitude to normalize
- * @see #normalizePoint(Point)
* @return The normalized longitude.
*/
public static double normalizeLon(double lon) {
@@ -36,16 +35,16 @@ public class GeoUtils {
/**
* Normalize latitude to lie within the -90 to 90 (both inclusive) range.
- *
+ *
* Note: You should not normalize longitude and latitude separately,
- * because when normalizing latitude it may be necessary to
- * add a shift of 180° in the longitude.
- * For this purpose, you should call the
- * {@link #normalizePoint(Point)} function.
+ * because when normalizing latitude it may be necessary to
+ * add a shift of 180° in the longitude.
+ * For this purpose, you should call the
+ * {@link #normalizePoint(GeoPoint)} function.
*
* @param lat Latitude to normalize
- * @see #normalizePoint(Point)
* @return The normalized latitude.
+ * @see #normalizePoint(GeoPoint)
*/
public static double normalizeLat(double lat) {
lat = centeredModulus(lat, 360);
@@ -60,59 +59,62 @@ public class GeoUtils {
/**
* Normalize the geo {@code Point} for its coordinates to lie within their
* respective normalized ranges.
- *
+ *
* Note: A shift of 180° is applied in the longitude if necessary,
- * in order to normalize properly the latitude.
+ * in order to normalize properly the latitude.
*
* @param point The point to normalize in-place.
*/
- public static void normalizePoint(Point point) {
+ public static void normalizePoint(GeoPoint point) {
normalizePoint(point, true, true);
}
/**
* Normalize the geo {@code Point} for the given coordinates to lie within
* their respective normalized ranges.
- *
+ *
* You can control which coordinate gets normalized with the two flags.
- *
+ *
* Note: A shift of 180° is applied in the longitude if necessary,
- * in order to normalize properly the latitude.
- * If normalizing latitude but not longitude, it is assumed that
- * the longitude is in the form x+k*360, with x in ]-180;180],
- * and k is meaningful to the application.
- * Therefore x will be adjusted while keeping k preserved.
+ * in order to normalize properly the latitude.
+ * If normalizing latitude but not longitude, it is assumed that
+ * the longitude is in the form x+k*360, with x in ]-180;180],
+ * and k is meaningful to the application.
+ * Therefore x will be adjusted while keeping k preserved.
*
- * @param point The point to normalize in-place.
+ * @param point The point to normalize in-place.
* @param normLat Whether to normalize latitude or leave it as is.
* @param normLon Whether to normalize longitude.
*/
- public static void normalizePoint(Point point, boolean normLat, boolean normLon) {
+ public static void normalizePoint(GeoPoint point, boolean normLat, boolean normLon) {
+ double lat = point.lat();
+ double lon = point.lon();
if (normLat) {
- point.lat = centeredModulus(point.lat, 360);
+ lat = centeredModulus(lat, 360);
boolean shift = true;
- if (point.lat < -90) {
- point.lat = -180 - point.lat;
- } else if (point.lat > 90) {
- point.lat = 180 - point.lat;
+ if (lat < -90) {
+ lat = -180 - lat;
+ } else if (lat > 90) {
+ lat = 180 - lat;
} else {
// No need to shift the longitude, and the latitude is normalized
shift = false;
}
if (shift) {
if (normLon) {
- point.lon += 180;
+ lon += 180;
} else {
// Longitude won't be normalized,
// keep it in the form x+k*360 (with x in ]-180;180])
// by only changing x, assuming k is meaningful for the user application.
- point.lon += normalizeLon(point.lon) > 0 ? -180 : 180;
+ lon += normalizeLon(lon) > 0 ? -180 : 180;
}
}
}
if (normLon) {
- point.lon = centeredModulus(point.lon, 360);
+ lon = centeredModulus(lon, 360);
}
+ point.reset(lat, lon);
}
private static double centeredModulus(double dividend, double divisor) {
diff --git a/src/main/java/org/elasticsearch/index/fielddata/GeoPointValues.java b/src/main/java/org/elasticsearch/index/fielddata/GeoPointValues.java
index a9f7bbe8b8e..159190393e8 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/GeoPointValues.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/GeoPointValues.java
@@ -20,8 +20,8 @@
package org.elasticsearch.index.fielddata;
import org.elasticsearch.ElasticSearchIllegalStateException;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.fielddata.util.GeoPointArrayRef;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
/**
*/
diff --git a/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java b/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java
index 5a88959b721..46ec03cbf21 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/ScriptDocValues.java
@@ -20,10 +20,10 @@
package org.elasticsearch.index.fielddata;
import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.util.*;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.joda.time.MutableDateTime;
/**
diff --git a/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparator.java b/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparator.java
index b415a8cebf9..7183e3b43c9 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparator.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparator.java
@@ -21,11 +21,11 @@ package org.elasticsearch.index.fielddata.fieldcomparator;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.search.FieldComparator;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
-import org.elasticsearch.index.search.geo.GeoDistance;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparatorSource.java b/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparatorSource.java
index c4266121fc9..f12177e92d3 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparatorSource.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/GeoDistanceComparatorSource.java
@@ -21,10 +21,10 @@ package org.elasticsearch.index.fielddata.fieldcomparator;
import org.apache.lucene.search.FieldComparator;
import org.apache.lucene.search.SortField;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.IndexFieldData;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.search.geo.GeoDistance;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/index/fielddata/plain/GeoPointDoubleArrayAtomicFieldData.java b/src/main/java/org/elasticsearch/index/fielddata/plain/GeoPointDoubleArrayAtomicFieldData.java
index 9aa3e104646..00096eb8e1b 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/plain/GeoPointDoubleArrayAtomicFieldData.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/plain/GeoPointDoubleArrayAtomicFieldData.java
@@ -21,13 +21,13 @@ package org.elasticsearch.index.fielddata.plain;
import org.apache.lucene.util.FixedBitSet;
import org.elasticsearch.common.RamUsage;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.fielddata.*;
import org.elasticsearch.index.fielddata.ordinals.Ordinals;
import org.elasticsearch.index.fielddata.util.GeoPointArrayRef;
import org.elasticsearch.index.fielddata.util.IntArrayRef;
import org.elasticsearch.index.fielddata.util.StringArrayRef;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
/**
*/
diff --git a/src/main/java/org/elasticsearch/index/fielddata/util/GeoPointArrayRef.java b/src/main/java/org/elasticsearch/index/fielddata/util/GeoPointArrayRef.java
index d4859f2dd3d..6dcb23f3b6c 100644
--- a/src/main/java/org/elasticsearch/index/fielddata/util/GeoPointArrayRef.java
+++ b/src/main/java/org/elasticsearch/index/fielddata/util/GeoPointArrayRef.java
@@ -20,7 +20,7 @@
package org.elasticsearch.index.fielddata.util;
import org.apache.lucene.util.ArrayUtil;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoPoint;
import java.util.AbstractList;
import java.util.RandomAccess;
diff --git a/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
index 6434366f606..d9c553b9a27 100644
--- a/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
+++ b/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
@@ -23,6 +23,9 @@ import org.apache.lucene.document.FieldType;
import org.apache.lucene.index.FieldInfo.IndexOptions;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
import org.elasticsearch.common.Strings;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
@@ -34,9 +37,6 @@ import org.elasticsearch.index.mapper.core.DoubleFieldMapper;
import org.elasticsearch.index.mapper.core.NumberFieldMapper;
import org.elasticsearch.index.mapper.core.StringFieldMapper;
import org.elasticsearch.index.mapper.object.ArrayValueMapperParser;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
-import org.elasticsearch.index.search.geo.GeoUtils;
-import org.elasticsearch.index.search.geo.Point;
import java.io.IOException;
import java.util.Map;
@@ -387,10 +387,10 @@ public class GeoPointFieldMapper implements Mapper, ArrayValueMapperParser {
private void parseLatLon(ParseContext context, double lat, double lon) throws IOException {
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
+ GeoPoint point = new GeoPoint(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
+ lat = point.lat();
+ lon = point.lon();
}
if (validateLat) {
@@ -419,38 +419,33 @@ public class GeoPointFieldMapper implements Mapper, ArrayValueMapperParser {
}
private void parseGeohash(ParseContext context, String geohash) throws IOException {
- double[] values = GeoHashUtils.decode(geohash);
- double lat = values[0];
- double lon = values[1];
+ GeoPoint point = GeoHashUtils.decode(geohash);
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
}
if (validateLat) {
- if (lat > 90.0 || lat < -90.0) {
- throw new ElasticSearchIllegalArgumentException("illegal latitude value [" + lat + "] for " + name);
+ if (point.lat() > 90.0 || point.lat() < -90.0) {
+ throw new ElasticSearchIllegalArgumentException("illegal latitude value [" + point.lat() + "] for " + name);
}
}
if (validateLon) {
- if (lon > 180.0 || lon < -180) {
- throw new ElasticSearchIllegalArgumentException("illegal longitude value [" + lon + "] for " + name);
+ if (point.lon() > 180.0 || point.lon() < -180) {
+ throw new ElasticSearchIllegalArgumentException("illegal longitude value [" + point.lon() + "] for " + name);
}
}
- context.externalValue(Double.toString(lat) + ',' + Double.toString(lon));
+ context.externalValue(Double.toString(point.lat()) + ',' + Double.toString(point.lat()));
geoStringMapper.parse(context);
if (enableGeoHash) {
context.externalValue(geohash);
geohashMapper.parse(context);
}
if (enableLatLon) {
- context.externalValue(lat);
+ context.externalValue(point.lat());
latMapper.parse(context);
- context.externalValue(lon);
+ context.externalValue(point.lon());
lonMapper.parse(context);
}
}
diff --git a/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterBuilder.java b/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterBuilder.java
index 0c141a6e911..44cfe1104ce 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterBuilder.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterBuilder.java
@@ -19,8 +19,8 @@
package org.elasticsearch.index.query;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.index.search.geo.Point;
import java.io.IOException;
@@ -31,11 +31,11 @@ public class GeoBoundingBoxFilterBuilder extends BaseFilterBuilder {
private final String name;
- private Point topLeft;
+ private GeoPoint topLeft;
private String topLeftGeohash;
- private Point bottomRight;
+ private GeoPoint bottomRight;
private String bottomRightGeohash;
@@ -57,9 +57,7 @@ public class GeoBoundingBoxFilterBuilder extends BaseFilterBuilder {
* @param lon The longitude
*/
public GeoBoundingBoxFilterBuilder topLeft(double lat, double lon) {
- topLeft = new Point();
- topLeft.lat = lat;
- topLeft.lon = lon;
+ topLeft = new GeoPoint(lat, lon);
return this;
}
@@ -70,9 +68,7 @@ public class GeoBoundingBoxFilterBuilder extends BaseFilterBuilder {
* @param lon The longitude
*/
public GeoBoundingBoxFilterBuilder bottomRight(double lat, double lon) {
- bottomRight = new Point();
- bottomRight.lat = lat;
- bottomRight.lon = lon;
+ bottomRight = new GeoPoint(lat, lon);
return this;
}
@@ -124,7 +120,7 @@ public class GeoBoundingBoxFilterBuilder extends BaseFilterBuilder {
if (topLeftGeohash != null) {
builder.field("top_left", topLeftGeohash);
} else if (topLeft != null) {
- builder.startArray("top_left").value(topLeft.lon).value(topLeft.lat).endArray();
+ builder.startArray("top_left").value(topLeft.lon()).value(topLeft.lat()).endArray();
} else {
throw new QueryBuilderException("geo_bounding_box requires 'top_left' to be set");
}
@@ -132,7 +128,7 @@ public class GeoBoundingBoxFilterBuilder extends BaseFilterBuilder {
if (bottomRightGeohash != null) {
builder.field("bottom_right", bottomRightGeohash);
} else if (bottomRight != null) {
- builder.startArray("bottom_right").value(bottomRight.lon).value(bottomRight.lat).endArray();
+ builder.startArray("bottom_right").value(bottomRight.lon()).value(bottomRight.lat()).endArray();
} else {
throw new QueryBuilderException("geo_bounding_box requires 'bottom_right' to be set");
}
diff --git a/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterParser.java b/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterParser.java
index 3bf595be882..ac43454b699 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterParser.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxFilterParser.java
@@ -20,6 +20,9 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Filter;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.index.cache.filter.support.CacheKeyFilter;
@@ -27,7 +30,8 @@ import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.*;
+import org.elasticsearch.index.search.geo.InMemoryGeoBoundingBoxFilter;
+import org.elasticsearch.index.search.geo.IndexedGeoBoundingBoxFilter;
import java.io.IOException;
@@ -56,8 +60,8 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
boolean cache = false;
CacheKeyFilter.Key cacheKey = null;
String fieldName = null;
- Point topLeft = new Point();
- Point bottomRight = new Point();
+ GeoPoint topLeft = new GeoPoint();
+ GeoPoint bottomRight = new GeoPoint();
String filterName = null;
String currentFieldName = null;
@@ -76,7 +80,7 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
if (token == XContentParser.Token.FIELD_NAME) {
currentFieldName = parser.currentName();
} else if (token == XContentParser.Token.START_ARRAY) {
- Point point = null;
+ GeoPoint point = null;
if ("top_left".equals(currentFieldName) || "topLeft".equals(currentFieldName)) {
point = topLeft;
} else if ("bottom_right".equals(currentFieldName) || "bottomRight".equals(currentFieldName)) {
@@ -85,15 +89,15 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
if (point != null) {
token = parser.nextToken();
- point.lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
token = parser.nextToken();
- point.lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
}
} else if (token == XContentParser.Token.START_OBJECT) {
- Point point = null;
+ GeoPoint point = null;
if ("top_left".equals(currentFieldName) || "topLeft".equals(currentFieldName)) {
point = topLeft;
} else if ("bottom_right".equals(currentFieldName) || "bottomRight".equals(currentFieldName)) {
@@ -106,13 +110,11 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
currentFieldName = parser.currentName();
} else if (token.isValue()) {
if (currentFieldName.equals(GeoPointFieldMapper.Names.LAT)) {
- point.lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentFieldName.equals(GeoPointFieldMapper.Names.LON)) {
- point.lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentFieldName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- point.lat = values[0];
- point.lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
}
}
}
@@ -121,7 +123,7 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
if ("field".equals(currentFieldName)) {
fieldName = parser.text();
} else {
- Point point = null;
+ GeoPoint point = null;
if ("top_left".equals(currentFieldName) || "topLeft".equals(currentFieldName)) {
point = topLeft;
} else if ("bottom_right".equals(currentFieldName) || "bottomRight".equals(currentFieldName)) {
@@ -130,15 +132,7 @@ public class GeoBoundingBoxFilterParser implements FilterParser {
if (point != null) {
String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- point.lat = Double.parseDouble(value.substring(0, comma).trim());
- point.lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- point.lat = values[0];
- point.lon = values[1];
- }
+ point.resetFromString(value);
}
}
}
diff --git a/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterBuilder.java b/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterBuilder.java
index 9ebce3b95c0..1179edb3308 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterBuilder.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterBuilder.java
@@ -19,9 +19,9 @@
package org.elasticsearch.index.query;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.index.search.geo.GeoDistance;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterParser.java b/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterParser.java
index 75ecf780f87..9b6128b81db 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterParser.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoDistanceFilterParser.java
@@ -20,6 +20,10 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Filter;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentParser;
@@ -28,7 +32,7 @@ import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.*;
+import org.elasticsearch.index.search.geo.GeoDistanceFilter;
import java.io.IOException;
@@ -65,8 +69,7 @@ public class GeoDistanceFilterParser implements FilterParser {
CacheKeyFilter.Key cacheKey = null;
String filterName = null;
String currentFieldName = null;
- double lat = 0;
- double lon = 0;
+ GeoPoint point = new GeoPoint();
String fieldName = null;
double distance = 0;
Object vDistance = null;
@@ -80,9 +83,9 @@ public class GeoDistanceFilterParser implements FilterParser {
currentFieldName = parser.currentName();
} else if (token == XContentParser.Token.START_ARRAY) {
token = parser.nextToken();
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
token = parser.nextToken();
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
@@ -96,13 +99,11 @@ public class GeoDistanceFilterParser implements FilterParser {
currentName = parser.currentName();
} else if (token.isValue()) {
if (currentName.equals(GeoPointFieldMapper.Names.LAT)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.LON)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
} else {
throw new QueryParsingException(parseContext.index(), "[geo_distance] filter does not support [" + currentFieldName + "]");
}
@@ -120,15 +121,13 @@ public class GeoDistanceFilterParser implements FilterParser {
} else if (currentFieldName.equals("distance_type") || currentFieldName.equals("distanceType")) {
geoDistance = GeoDistance.fromString(parser.text());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.LAT_SUFFIX)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.LAT_SUFFIX.length());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.LON_SUFFIX)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.LON_SUFFIX.length());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.GEOHASH_SUFFIX)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.GEOHASH_SUFFIX.length());
} else if ("_name".equals(currentFieldName)) {
filterName = parser.text();
@@ -142,17 +141,7 @@ public class GeoDistanceFilterParser implements FilterParser {
normalizeLat = parser.booleanValue();
normalizeLon = parser.booleanValue();
} else {
- // assume the value is the actual value
- String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- lat = Double.parseDouble(value.substring(0, comma).trim());
- lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- lat = values[0];
- lon = values[1];
- }
+ point.resetFromString(parser.text());
fieldName = currentFieldName;
}
}
@@ -166,10 +155,7 @@ public class GeoDistanceFilterParser implements FilterParser {
distance = geoDistance.normalize(distance, DistanceUnit.MILES);
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
}
MapperService.SmartNameFieldMappers smartMappers = parseContext.smartFieldMappers(fieldName);
@@ -184,7 +170,7 @@ public class GeoDistanceFilterParser implements FilterParser {
IndexGeoPointFieldData indexFieldData = parseContext.fieldData().getForField(mapper);
- Filter filter = new GeoDistanceFilter(lat, lon, distance, geoDistance, indexFieldData, geoMapper, optimizeBbox);
+ Filter filter = new GeoDistanceFilter(point.lat(), point.lon(), distance, geoDistance, indexFieldData, geoMapper, optimizeBbox);
if (cache) {
filter = parseContext.cacheFilter(filter, cacheKey);
}
diff --git a/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterBuilder.java b/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterBuilder.java
index 4bbe6145c9a..adc4734f02e 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterBuilder.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterBuilder.java
@@ -19,8 +19,8 @@
package org.elasticsearch.index.query;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.index.search.geo.GeoDistance;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterParser.java b/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterParser.java
index be4f8ffc5f5..36f30598f6a 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterParser.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeFilterParser.java
@@ -20,6 +20,10 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Filter;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentParser;
@@ -28,7 +32,7 @@ import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.*;
+import org.elasticsearch.index.search.geo.GeoDistanceRangeFilter;
import java.io.IOException;
@@ -65,8 +69,7 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
CacheKeyFilter.Key cacheKey = null;
String filterName = null;
String currentFieldName = null;
- double lat = 0;
- double lon = 0;
+ GeoPoint point = new GeoPoint();
String fieldName = null;
Object vFrom = null;
Object vTo = null;
@@ -82,12 +85,13 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
currentFieldName = parser.currentName();
} else if (token == XContentParser.Token.START_ARRAY) {
token = parser.nextToken();
- lon = parser.doubleValue();
+ double lon = parser.doubleValue();
token = parser.nextToken();
- lat = parser.doubleValue();
+ double lat = parser.doubleValue();
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
+ point.reset(lat, lon);
fieldName = currentFieldName;
} else if (token == XContentParser.Token.START_OBJECT) {
// the json in the format of -> field : { lat : 30, lon : 12 }
@@ -98,13 +102,11 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
currentName = parser.currentName();
} else if (token.isValue()) {
if (currentName.equals(GeoPointFieldMapper.Names.LAT)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.LON)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
}
}
}
@@ -164,15 +166,13 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
} else if (currentFieldName.equals("distance_type") || currentFieldName.equals("distanceType")) {
geoDistance = GeoDistance.fromString(parser.text());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.LAT_SUFFIX)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.LAT_SUFFIX.length());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.LON_SUFFIX)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.LON_SUFFIX.length());
} else if (currentFieldName.endsWith(GeoPointFieldMapper.Names.GEOHASH_SUFFIX)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
fieldName = currentFieldName.substring(0, currentFieldName.length() - GeoPointFieldMapper.Names.GEOHASH_SUFFIX.length());
} else if ("_name".equals(currentFieldName)) {
filterName = parser.text();
@@ -186,17 +186,7 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
normalizeLat = parser.booleanValue();
normalizeLon = parser.booleanValue();
} else {
- // assume the value is the actual value
- String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- lat = Double.parseDouble(value.substring(0, comma).trim());
- lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- lat = values[0];
- lon = values[1];
- }
+ point.resetFromString(parser.text());
fieldName = currentFieldName;
}
}
@@ -222,10 +212,7 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
}
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
}
MapperService.SmartNameFieldMappers smartMappers = parseContext.smartFieldMappers(fieldName);
@@ -239,7 +226,7 @@ public class GeoDistanceRangeFilterParser implements FilterParser {
GeoPointFieldMapper geoMapper = ((GeoPointFieldMapper.GeoStringFieldMapper) mapper).geoMapper();
IndexGeoPointFieldData indexFieldData = parseContext.fieldData().getForField(mapper);
- Filter filter = new GeoDistanceRangeFilter(lat, lon, from, to, includeLower, includeUpper, geoDistance, geoMapper, indexFieldData, optimizeBbox);
+ Filter filter = new GeoDistanceRangeFilter(point, from, to, includeLower, includeUpper, geoDistance, geoMapper, indexFieldData, optimizeBbox);
if (cache) {
filter = parseContext.cacheFilter(filter, cacheKey);
}
diff --git a/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterBuilder.java b/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterBuilder.java
index d622307a872..104fd545fcc 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterBuilder.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterBuilder.java
@@ -20,9 +20,9 @@
package org.elasticsearch.index.query;
import com.google.common.collect.Lists;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
-import org.elasticsearch.index.search.geo.Point;
import java.io.IOException;
import java.util.List;
@@ -34,7 +34,7 @@ public class GeoPolygonFilterBuilder extends BaseFilterBuilder {
private final String name;
- private final List points = Lists.newArrayList();
+ private final List points = Lists.newArrayList();
private Boolean cache;
private String cacheKey;
@@ -53,13 +53,13 @@ public class GeoPolygonFilterBuilder extends BaseFilterBuilder {
* @return
*/
public GeoPolygonFilterBuilder addPoint(double lat, double lon) {
- points.add(new Point(lat, lon));
+ points.add(new GeoPoint(lat, lon));
return this;
}
public GeoPolygonFilterBuilder addPoint(String geohash) {
- double[] values = GeoHashUtils.decode(geohash);
- return addPoint(values[0], values[1]);
+ points.add(GeoHashUtils.decode(geohash));
+ return this;
}
/**
@@ -89,8 +89,8 @@ public class GeoPolygonFilterBuilder extends BaseFilterBuilder {
builder.startObject(name);
builder.startArray("points");
- for (Point point : points) {
- builder.startArray().value(point.lon).value(point.lat).endArray();
+ for (GeoPoint point : points) {
+ builder.startArray().value(point.lon()).value(point.lat()).endArray();
}
builder.endArray();
builder.endObject();
diff --git a/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterParser.java b/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterParser.java
index 05150896374..a7babddd1ee 100644
--- a/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterParser.java
+++ b/src/main/java/org/elasticsearch/index/query/GeoPolygonFilterParser.java
@@ -21,6 +21,9 @@ package org.elasticsearch.index.query;
import com.google.common.collect.Lists;
import org.apache.lucene.search.Filter;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.index.cache.filter.support.CacheKeyFilter;
@@ -28,10 +31,7 @@ import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
import org.elasticsearch.index.search.geo.GeoPolygonFilter;
-import org.elasticsearch.index.search.geo.GeoUtils;
-import org.elasticsearch.index.search.geo.Point;
import java.io.IOException;
import java.util.List;
@@ -70,7 +70,7 @@ public class GeoPolygonFilterParser implements FilterParser {
boolean cache = false;
CacheKeyFilter.Key cacheKey = null;
String fieldName = null;
- List points = Lists.newArrayList();
+ List points = Lists.newArrayList();
boolean normalizeLon = true;
boolean normalizeLat = true;
@@ -94,46 +94,32 @@ public class GeoPolygonFilterParser implements FilterParser {
if (token == XContentParser.Token.FIELD_NAME) {
currentFieldName = parser.currentName();
} else if (token == XContentParser.Token.START_ARRAY) {
- Point point = new Point();
token = parser.nextToken();
- point.lon = parser.doubleValue();
+ double lon = parser.doubleValue();
token = parser.nextToken();
- point.lat = parser.doubleValue();
+ double lat = parser.doubleValue();
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
- points.add(point);
+ points.add(new GeoPoint(lat, lon));
} else if (token == XContentParser.Token.START_OBJECT) {
- Point point = new Point();
+ GeoPoint point = new GeoPoint();
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
if (token == XContentParser.Token.FIELD_NAME) {
currentFieldName = parser.currentName();
} else if (token.isValue()) {
if (currentFieldName.equals(GeoPointFieldMapper.Names.LAT)) {
- point.lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentFieldName.equals(GeoPointFieldMapper.Names.LON)) {
- point.lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentFieldName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- point.lat = values[0];
- point.lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
}
}
}
points.add(point);
} else if (token.isValue()) {
- Point point = new Point();
- String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- point.lat = Double.parseDouble(value.substring(0, comma).trim());
- point.lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- point.lat = values[0];
- point.lon = values[1];
- }
- points.add(point);
+ points.add(new GeoPoint().resetFromString(parser.text()));
}
}
} else {
@@ -162,7 +148,7 @@ public class GeoPolygonFilterParser implements FilterParser {
}
if (normalizeLat || normalizeLon) {
- for (Point point : points) {
+ for (GeoPoint point : points) {
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
}
}
@@ -177,7 +163,7 @@ public class GeoPolygonFilterParser implements FilterParser {
}
IndexGeoPointFieldData indexFieldData = parseContext.fieldData().getForField(mapper);
- Filter filter = new GeoPolygonFilter(points.toArray(new Point[points.size()]), indexFieldData);
+ Filter filter = new GeoPolygonFilter(points.toArray(new GeoPoint[points.size()]), indexFieldData);
if (cache) {
filter = parseContext.cacheFilter(filter, cacheKey);
}
diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceFilter.java b/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceFilter.java
index 648f39023aa..fdc091d4f32 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceFilter.java
+++ b/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceFilter.java
@@ -25,13 +25,14 @@ import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
import org.elasticsearch.common.Nullable;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lucene.docset.AndDocIdSet;
import org.elasticsearch.common.lucene.docset.DocIdSets;
import org.elasticsearch.common.lucene.docset.MatchDocIdSet;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceRangeFilter.java b/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceRangeFilter.java
index e8c2b546ccc..e8918614920 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceRangeFilter.java
+++ b/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceRangeFilter.java
@@ -26,13 +26,14 @@ import org.apache.lucene.util.Bits;
import org.apache.lucene.util.NumericUtils;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
import org.elasticsearch.common.Nullable;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lucene.docset.AndDocIdSet;
import org.elasticsearch.common.lucene.docset.DocIdSets;
import org.elasticsearch.common.lucene.docset.MatchDocIdSet;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
import java.io.IOException;
@@ -55,10 +56,10 @@ public class GeoDistanceRangeFilter extends Filter {
private final IndexGeoPointFieldData indexFieldData;
- public GeoDistanceRangeFilter(double lat, double lon, Double lowerVal, Double upperVal, boolean includeLower, boolean includeUpper, GeoDistance geoDistance, GeoPointFieldMapper mapper, IndexGeoPointFieldData indexFieldData,
+ public GeoDistanceRangeFilter(GeoPoint point, Double lowerVal, Double upperVal, boolean includeLower, boolean includeUpper, GeoDistance geoDistance, GeoPointFieldMapper mapper, IndexGeoPointFieldData indexFieldData,
String optimizeBbox) {
- this.lat = lat;
- this.lon = lon;
+ this.lat = point.lat();
+ this.lon = point.lon();
this.geoDistance = geoDistance;
this.indexFieldData = indexFieldData;
diff --git a/src/main/java/org/elasticsearch/index/search/geo/GeoPolygonFilter.java b/src/main/java/org/elasticsearch/index/search/geo/GeoPolygonFilter.java
index bb7e5b9a3df..c882fef231a 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/GeoPolygonFilter.java
+++ b/src/main/java/org/elasticsearch/index/search/geo/GeoPolygonFilter.java
@@ -24,10 +24,10 @@ import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits;
import org.elasticsearch.common.Nullable;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lucene.docset.MatchDocIdSet;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
import java.io.IOException;
import java.util.Arrays;
@@ -37,16 +37,16 @@ import java.util.Arrays;
*/
public class GeoPolygonFilter extends Filter {
- private final Point[] points;
+ private final GeoPoint[] points;
private final IndexGeoPointFieldData indexFieldData;
- public GeoPolygonFilter(Point[] points, IndexGeoPointFieldData indexFieldData) {
+ public GeoPolygonFilter(GeoPoint[] points, IndexGeoPointFieldData indexFieldData) {
this.points = points;
this.indexFieldData = indexFieldData;
}
- public Point[] points() {
+ public GeoPoint[] points() {
return points;
}
@@ -67,9 +67,9 @@ public class GeoPolygonFilter extends Filter {
public static class GeoPolygonDocIdSet extends MatchDocIdSet {
private final GeoPointValues values;
- private final Point[] points;
+ private final GeoPoint[] points;
- public GeoPolygonDocIdSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, Point[] points) {
+ public GeoPolygonDocIdSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, GeoPoint[] points) {
super(maxDoc, acceptDocs);
this.values = values;
this.points = points;
@@ -101,16 +101,16 @@ public class GeoPolygonFilter extends Filter {
return false;
}
- private static boolean pointInPolygon(Point[] points, double lat, double lon) {
+ private static boolean pointInPolygon(GeoPoint[] points, double lat, double lon) {
int i;
int j = points.length - 1;
boolean inPoly = false;
for (i = 0; i < points.length; i++) {
- if (points[i].lon < lon && points[j].lon >= lon
- || points[j].lon < lon && points[i].lon >= lon) {
- if (points[i].lat + (lon - points[i].lon) /
- (points[j].lon - points[i].lon) * (points[j].lat - points[i].lat) < lat) {
+ if (points[i].lon() < lon && points[j].lon() >= lon
+ || points[j].lon() < lon && points[i].lon() >= lon) {
+ if (points[i].lat() + (lon - points[i].lon()) /
+ (points[j].lon() - points[i].lon()) * (points[j].lat() - points[i].lat()) < lat) {
inPoly = !inPoly;
}
}
diff --git a/src/main/java/org/elasticsearch/index/search/geo/InMemoryGeoBoundingBoxFilter.java b/src/main/java/org/elasticsearch/index/search/geo/InMemoryGeoBoundingBoxFilter.java
index f97b98c5a13..291ec08e96f 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/InMemoryGeoBoundingBoxFilter.java
+++ b/src/main/java/org/elasticsearch/index/search/geo/InMemoryGeoBoundingBoxFilter.java
@@ -24,10 +24,10 @@ import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits;
import org.elasticsearch.common.Nullable;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lucene.docset.MatchDocIdSet;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.mapper.geo.GeoPoint;
import java.io.IOException;
@@ -36,22 +36,22 @@ import java.io.IOException;
*/
public class InMemoryGeoBoundingBoxFilter extends Filter {
- private final Point topLeft;
- private final Point bottomRight;
+ private final GeoPoint topLeft;
+ private final GeoPoint bottomRight;
private final IndexGeoPointFieldData indexFieldData;
- public InMemoryGeoBoundingBoxFilter(Point topLeft, Point bottomRight, IndexGeoPointFieldData indexFieldData) {
+ public InMemoryGeoBoundingBoxFilter(GeoPoint topLeft, GeoPoint bottomRight, IndexGeoPointFieldData indexFieldData) {
this.topLeft = topLeft;
this.bottomRight = bottomRight;
this.indexFieldData = indexFieldData;
}
- public Point topLeft() {
+ public GeoPoint topLeft() {
return topLeft;
}
- public Point bottomRight() {
+ public GeoPoint bottomRight() {
return bottomRight;
}
@@ -64,7 +64,7 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
final GeoPointValues values = indexFieldData.load(context).getGeoPointValues();
//checks to see if bounding box crosses 180 degrees
- if (topLeft.lon > bottomRight.lon) {
+ if (topLeft.lon() > bottomRight.lon()) {
return new Meridian180GeoBoundingBoxDocSet(context.reader().maxDoc(), acceptedDocs, values, topLeft, bottomRight);
} else {
return new GeoBoundingBoxDocSet(context.reader().maxDoc(), acceptedDocs, values, topLeft, bottomRight);
@@ -78,10 +78,10 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
public static class Meridian180GeoBoundingBoxDocSet extends MatchDocIdSet {
private final GeoPointValues values;
- private final Point topLeft;
- private final Point bottomRight;
+ private final GeoPoint topLeft;
+ private final GeoPoint bottomRight;
- public Meridian180GeoBoundingBoxDocSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, Point topLeft, Point bottomRight) {
+ public Meridian180GeoBoundingBoxDocSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, GeoPoint topLeft, GeoPoint bottomRight) {
super(maxDoc, acceptDocs);
this.values = values;
this.topLeft = topLeft;
@@ -103,16 +103,16 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
GeoPointValues.Iter iter = values.getIter(doc);
while (iter.hasNext()) {
GeoPoint point = iter.next();
- if (((topLeft.lon <= point.lon() || bottomRight.lon >= point.lon())) &&
- (topLeft.lat >= point.lat() && bottomRight.lat <= point.lat())) {
+ if (((topLeft.lon() <= point.lon() || bottomRight.lon() >= point.lon())) &&
+ (topLeft.lat() >= point.lat() && bottomRight.lat() <= point.lat())) {
return true;
}
}
} else {
GeoPoint point = values.getValue(doc);
- if (((topLeft.lon <= point.lon() || bottomRight.lon >= point.lon())) &&
- (topLeft.lat >= point.lat() && bottomRight.lat <= point.lat())) {
+ if (((topLeft.lon() <= point.lon() || bottomRight.lon() >= point.lon())) &&
+ (topLeft.lat() >= point.lat() && bottomRight.lat() <= point.lat())) {
return true;
}
}
@@ -122,10 +122,10 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
public static class GeoBoundingBoxDocSet extends MatchDocIdSet {
private final GeoPointValues values;
- private final Point topLeft;
- private final Point bottomRight;
+ private final GeoPoint topLeft;
+ private final GeoPoint bottomRight;
- public GeoBoundingBoxDocSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, Point topLeft, Point bottomRight) {
+ public GeoBoundingBoxDocSet(int maxDoc, @Nullable Bits acceptDocs, GeoPointValues values, GeoPoint topLeft, GeoPoint bottomRight) {
super(maxDoc, acceptDocs);
this.values = values;
this.topLeft = topLeft;
@@ -147,15 +147,15 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
GeoPointValues.Iter iter = values.getIter(doc);
while (iter.hasNext()) {
GeoPoint point = iter.next();
- if (topLeft.lon <= point.lon() && bottomRight.lon >= point.lon()
- && topLeft.lat >= point.lat() && bottomRight.lat <= point.lat()) {
+ if (topLeft.lon() <= point.lon() && bottomRight.lon() >= point.lon()
+ && topLeft.lat() >= point.lat() && bottomRight.lat() <= point.lat()) {
return true;
}
}
} else {
GeoPoint point = values.getValue(doc);
- if (topLeft.lon <= point.lon() && bottomRight.lon >= point.lon()
- && topLeft.lat >= point.lat() && bottomRight.lat <= point.lat()) {
+ if (topLeft.lon() <= point.lon() && bottomRight.lon() >= point.lon()
+ && topLeft.lat() >= point.lat() && bottomRight.lat() <= point.lat()) {
return true;
}
}
diff --git a/src/main/java/org/elasticsearch/index/search/geo/IndexedGeoBoundingBoxFilter.java b/src/main/java/org/elasticsearch/index/search/geo/IndexedGeoBoundingBoxFilter.java
index decee9ffd6f..7ed9549b747 100644
--- a/src/main/java/org/elasticsearch/index/search/geo/IndexedGeoBoundingBoxFilter.java
+++ b/src/main/java/org/elasticsearch/index/search/geo/IndexedGeoBoundingBoxFilter.java
@@ -25,6 +25,7 @@ import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FixedBitSet;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lucene.docset.DocIdSets;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
@@ -34,12 +35,12 @@ import java.io.IOException;
*/
public class IndexedGeoBoundingBoxFilter {
- public static Filter create(Point topLeft, Point bottomRight, GeoPointFieldMapper fieldMapper) {
+ public static Filter create(GeoPoint topLeft, GeoPoint bottomRight, GeoPointFieldMapper fieldMapper) {
if (!fieldMapper.isEnableLatLon()) {
throw new ElasticSearchIllegalArgumentException("lat/lon is not enabled (indexed) for field [" + fieldMapper.name() + "], can't use indexed filter on it");
}
//checks to see if bounding box crosses 180 degrees
- if (topLeft.lon > bottomRight.lon) {
+ if (topLeft.lon() > bottomRight.lon()) {
return new LeftGeoBoundingBoxFilter(topLeft, bottomRight, fieldMapper);
} else {
return new RightGeoBoundingBoxFilter(topLeft, bottomRight, fieldMapper);
@@ -52,10 +53,10 @@ public class IndexedGeoBoundingBoxFilter {
final Filter lonFilter2;
final Filter latFilter;
- public LeftGeoBoundingBoxFilter(Point topLeft, Point bottomRight, GeoPointFieldMapper fieldMapper) {
- lonFilter1 = fieldMapper.lonMapper().rangeFilter(null, bottomRight.lon, true, true);
- lonFilter2 = fieldMapper.lonMapper().rangeFilter(topLeft.lon, null, true, true);
- latFilter = fieldMapper.latMapper().rangeFilter(bottomRight.lat, topLeft.lat, true, true);
+ public LeftGeoBoundingBoxFilter(GeoPoint topLeft, GeoPoint bottomRight, GeoPointFieldMapper fieldMapper) {
+ lonFilter1 = fieldMapper.lonMapper().rangeFilter(null, bottomRight.lon(), true, true);
+ lonFilter2 = fieldMapper.lonMapper().rangeFilter(topLeft.lon(), null, true, true);
+ latFilter = fieldMapper.latMapper().rangeFilter(bottomRight.lat(), topLeft.lat(), true, true);
}
@Override
@@ -119,9 +120,9 @@ public class IndexedGeoBoundingBoxFilter {
final Filter lonFilter;
final Filter latFilter;
- public RightGeoBoundingBoxFilter(Point topLeft, Point bottomRight, GeoPointFieldMapper fieldMapper) {
- lonFilter = fieldMapper.lonMapper().rangeFilter(topLeft.lon, bottomRight.lon, true, true);
- latFilter = fieldMapper.latMapper().rangeFilter(bottomRight.lat, topLeft.lat, true, true);
+ public RightGeoBoundingBoxFilter(GeoPoint topLeft, GeoPoint bottomRight, GeoPointFieldMapper fieldMapper) {
+ lonFilter = fieldMapper.lonMapper().rangeFilter(topLeft.lon(), bottomRight.lon(), true, true);
+ latFilter = fieldMapper.latMapper().rangeFilter(bottomRight.lat(), topLeft.lat(), true, true);
}
@Override
diff --git a/src/main/java/org/elasticsearch/index/search/geo/Point.java b/src/main/java/org/elasticsearch/index/search/geo/Point.java
deleted file mode 100644
index 4a1d7924037..00000000000
--- a/src/main/java/org/elasticsearch/index/search/geo/Point.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to ElasticSearch and Shay Banon under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. ElasticSearch licenses this
- * file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.index.search.geo;
-
-/**
- */
-public class Point {
- public double lat;
- public double lon;
-
- public Point() {
- }
-
- public Point(double lat, double lon) {
- this.lat = lat;
- this.lon = lon;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- Point point = (Point) o;
-
- if (Double.compare(point.lat, lat) != 0) return false;
- if (Double.compare(point.lon, lon) != 0) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result;
- long temp;
- temp = lat != +0.0d ? Double.doubleToLongBits(lat) : 0L;
- result = (int) (temp ^ (temp >>> 32));
- temp = lon != +0.0d ? Double.doubleToLongBits(lon) : 0L;
- result = 31 * result + (int) (temp ^ (temp >>> 32));
- return result;
- }
-
- public String toString() {
- return "[" + lat + ", " + lon + "]";
- }
-}
diff --git a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetBuilder.java b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetBuilder.java
index 72c2c3b4521..56031941c5b 100644
--- a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetBuilder.java
+++ b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetBuilder.java
@@ -21,10 +21,10 @@ package org.elasticsearch.search.facet.geodistance;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.FilterBuilder;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.search.builder.SearchSourceBuilderException;
import org.elasticsearch.search.facet.AbstractFacetBuilder;
@@ -36,8 +36,6 @@ import java.util.Map;
* A geo distance builder allowing to create a facet of distances from a specific location including the
* number of hits within each distance range, and aggregated data (like totals of either the distance or
* cusotm value fields).
- *
- *
*/
public class GeoDistanceFacetBuilder extends AbstractFacetBuilder {
diff --git a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetCollector.java b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetCollector.java
index 21809970c9f..f7721bb6cd8 100644
--- a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetCollector.java
+++ b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetCollector.java
@@ -20,10 +20,10 @@
package org.elasticsearch.search.facet.geodistance;
import org.apache.lucene.index.AtomicReaderContext;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.search.facet.AbstractFacetCollector;
import org.elasticsearch.search.facet.Facet;
import org.elasticsearch.search.internal.SearchContext;
diff --git a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetProcessor.java b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetProcessor.java
index 57404020491..a3a590bea60 100644
--- a/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetProcessor.java
+++ b/src/main/java/org/elasticsearch/search/facet/geodistance/GeoDistanceFacetProcessor.java
@@ -21,6 +21,10 @@ package org.elasticsearch.search.facet.geodistance;
import com.google.common.collect.Lists;
import org.elasticsearch.common.component.AbstractComponent;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.DistanceUnit;
@@ -29,10 +33,6 @@ import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.fielddata.IndexNumericFieldData;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.GeoDistance;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
-import org.elasticsearch.index.search.geo.GeoUtils;
-import org.elasticsearch.index.search.geo.Point;
import org.elasticsearch.search.facet.Facet;
import org.elasticsearch.search.facet.FacetCollector;
import org.elasticsearch.search.facet.FacetPhaseExecutionException;
@@ -66,8 +66,7 @@ public class GeoDistanceFacetProcessor extends AbstractComponent implements Face
String valueScript = null;
String scriptLang = null;
Map params = null;
- double lat = Double.NaN;
- double lon = Double.NaN;
+ GeoPoint point = new GeoPoint();
DistanceUnit unit = DistanceUnit.KILOMETERS;
GeoDistance geoDistance = GeoDistance.ARC;
List entries = Lists.newArrayList();
@@ -105,9 +104,9 @@ public class GeoDistanceFacetProcessor extends AbstractComponent implements Face
}
} else {
token = parser.nextToken();
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
token = parser.nextToken();
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
@@ -124,13 +123,11 @@ public class GeoDistanceFacetProcessor extends AbstractComponent implements Face
currentName = parser.currentName();
} else if (token.isValue()) {
if (currentName.equals(GeoPointFieldMapper.Names.LAT)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.LON)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
}
}
}
@@ -151,35 +148,19 @@ public class GeoDistanceFacetProcessor extends AbstractComponent implements Face
normalizeLon = parser.booleanValue();
} else {
// assume the value is the actual value
- String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- lat = Double.parseDouble(value.substring(0, comma).trim());
- lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- lat = values[0];
- lon = values[1];
- }
+ point.resetFromString(parser.text());
fieldName = currentName;
}
}
}
- if (Double.isNaN(lat) || Double.isNaN(lon)) {
- throw new FacetPhaseExecutionException(facetName, "lat/lon not set for geo_distance facet");
- }
-
if (entries.isEmpty()) {
throw new FacetPhaseExecutionException(facetName, "no ranges defined for geo_distance facet");
}
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
}
FieldMapper keyFieldMapper = context.smartNameFieldMapper(fieldName);
@@ -194,16 +175,16 @@ public class GeoDistanceFacetProcessor extends AbstractComponent implements Face
throw new FacetPhaseExecutionException(facetName, "failed to find mapping for [" + valueFieldName + "]");
}
IndexNumericFieldData valueIndexFieldData = context.fieldData().getForField(valueFieldMapper);
- return new ValueGeoDistanceFacetCollector(facetName, keyIndexFieldData, lat, lon, unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
+ return new ValueGeoDistanceFacetCollector(facetName, keyIndexFieldData, point.lat(), point.lon(), unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
context, valueIndexFieldData);
}
if (valueScript != null) {
- return new ScriptGeoDistanceFacetCollector(facetName, keyIndexFieldData, lat, lon, unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
+ return new ScriptGeoDistanceFacetCollector(facetName, keyIndexFieldData, point.lat(), point.lon(), unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
context, scriptLang, valueScript, params);
}
- return new GeoDistanceFacetCollector(facetName, keyIndexFieldData, lat, lon, unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
+ return new GeoDistanceFacetCollector(facetName, keyIndexFieldData, point.lat(), point.lon(), unit, geoDistance, entries.toArray(new GeoDistanceFacet.Entry[entries.size()]),
context);
}
diff --git a/src/main/java/org/elasticsearch/search/facet/geodistance/ScriptGeoDistanceFacetCollector.java b/src/main/java/org/elasticsearch/search/facet/geodistance/ScriptGeoDistanceFacetCollector.java
index d9d200b2016..b665ea31fbf 100644
--- a/src/main/java/org/elasticsearch/search/facet/geodistance/ScriptGeoDistanceFacetCollector.java
+++ b/src/main/java/org/elasticsearch/search/facet/geodistance/ScriptGeoDistanceFacetCollector.java
@@ -21,10 +21,10 @@ package org.elasticsearch.search.facet.geodistance;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.search.Scorer;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.script.SearchScript;
import org.elasticsearch.search.internal.SearchContext;
diff --git a/src/main/java/org/elasticsearch/search/facet/geodistance/ValueGeoDistanceFacetCollector.java b/src/main/java/org/elasticsearch/search/facet/geodistance/ValueGeoDistanceFacetCollector.java
index 9784abf4baa..4f35748fc10 100644
--- a/src/main/java/org/elasticsearch/search/facet/geodistance/ValueGeoDistanceFacetCollector.java
+++ b/src/main/java/org/elasticsearch/search/facet/geodistance/ValueGeoDistanceFacetCollector.java
@@ -20,12 +20,12 @@
package org.elasticsearch.search.facet.geodistance;
import org.apache.lucene.index.AtomicReaderContext;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.fielddata.DoubleValues;
import org.elasticsearch.index.fielddata.GeoPointValues;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.fielddata.IndexNumericFieldData;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.search.internal.SearchContext;
import java.io.IOException;
diff --git a/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java b/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java
index 55475c58f66..1f4b51707cc 100644
--- a/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java
+++ b/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortBuilder.java
@@ -19,16 +19,14 @@
package org.elasticsearch.search.sort;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.index.search.geo.GeoDistance;
import java.io.IOException;
/**
* A geo distance based sorting on a geo point like field.
- *
- *
*/
public class GeoDistanceSortBuilder extends SortBuilder {
diff --git a/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortParser.java b/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortParser.java
index 9065467645a..0140da913be 100644
--- a/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortParser.java
+++ b/src/main/java/org/elasticsearch/search/sort/GeoDistanceSortParser.java
@@ -21,16 +21,16 @@ package org.elasticsearch.search.sort;
import org.apache.lucene.search.SortField;
import org.elasticsearch.ElasticSearchIllegalArgumentException;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.index.fielddata.IndexGeoPointFieldData;
import org.elasticsearch.index.fielddata.fieldcomparator.GeoDistanceComparatorSource;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
-import org.elasticsearch.index.search.geo.GeoDistance;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
-import org.elasticsearch.index.search.geo.GeoUtils;
-import org.elasticsearch.index.search.geo.Point;
import org.elasticsearch.search.internal.SearchContext;
/**
@@ -46,8 +46,7 @@ public class GeoDistanceSortParser implements SortParser {
@Override
public SortField parse(XContentParser parser, SearchContext context) throws Exception {
String fieldName = null;
- double lat = Double.NaN;
- double lon = Double.NaN;
+ GeoPoint point = new GeoPoint();
DistanceUnit unit = DistanceUnit.KILOMETERS;
GeoDistance geoDistance = GeoDistance.ARC;
boolean reverse = false;
@@ -62,9 +61,9 @@ public class GeoDistanceSortParser implements SortParser {
currentName = parser.currentName();
} else if (token == XContentParser.Token.START_ARRAY) {
token = parser.nextToken();
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
token = parser.nextToken();
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
}
@@ -77,13 +76,11 @@ public class GeoDistanceSortParser implements SortParser {
currentName = parser.currentName();
} else if (token.isValue()) {
if (currentName.equals(GeoPointFieldMapper.Names.LAT)) {
- lat = parser.doubleValue();
+ point.resetLat(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.LON)) {
- lon = parser.doubleValue();
+ point.resetLon(parser.doubleValue());
} else if (currentName.equals(GeoPointFieldMapper.Names.GEOHASH)) {
- double[] values = GeoHashUtils.decode(parser.text());
- lat = values[0];
- lon = values[1];
+ GeoHashUtils.decode(parser.text(), point);
}
}
}
@@ -100,28 +97,14 @@ public class GeoDistanceSortParser implements SortParser {
normalizeLat = parser.booleanValue();
normalizeLon = parser.booleanValue();
} else {
- // assume the value is the actual value
- String value = parser.text();
- int comma = value.indexOf(',');
- if (comma != -1) {
- lat = Double.parseDouble(value.substring(0, comma).trim());
- lon = Double.parseDouble(value.substring(comma + 1).trim());
- } else {
- double[] values = GeoHashUtils.decode(value);
- lat = values[0];
- lon = values[1];
- }
-
+ point.resetFromString(parser.text());
fieldName = currentName;
}
}
}
if (normalizeLat || normalizeLon) {
- Point point = new Point(lat, lon);
GeoUtils.normalizePoint(point, normalizeLat, normalizeLon);
- lat = point.lat;
- lon = point.lon;
}
FieldMapper mapper = context.smartNameFieldMapper(fieldName);
@@ -130,6 +113,6 @@ public class GeoDistanceSortParser implements SortParser {
}
IndexGeoPointFieldData indexFieldData = context.fieldData().getForField(mapper);
- return new SortField(fieldName, new GeoDistanceComparatorSource(indexFieldData, lat, lon, unit, geoDistance), reverse);
+ return new SortField(fieldName, new GeoDistanceComparatorSource(indexFieldData, point.lat(), point.lon(), unit, geoDistance), reverse);
}
}
diff --git a/src/test/java/org/elasticsearch/benchmark/search/geo/GeoDistanceSearchBenchmark.java b/src/test/java/org/elasticsearch/benchmark/search/geo/GeoDistanceSearchBenchmark.java
index c3885369556..2849e4f1661 100644
--- a/src/test/java/org/elasticsearch/benchmark/search/geo/GeoDistanceSearchBenchmark.java
+++ b/src/test/java/org/elasticsearch/benchmark/search/geo/GeoDistanceSearchBenchmark.java
@@ -22,11 +22,11 @@ package org.elasticsearch.benchmark.search.geo;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.unit.SizeValue;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
diff --git a/src/test/java/org/elasticsearch/test/integration/search/geo/GeoDistanceTests.java b/src/test/java/org/elasticsearch/test/integration/search/geo/GeoDistanceTests.java
index 5d2942f9f6d..901c208a3cd 100644
--- a/src/test/java/org/elasticsearch/test/integration/search/geo/GeoDistanceTests.java
+++ b/src/test/java/org/elasticsearch/test/integration/search/geo/GeoDistanceTests.java
@@ -21,8 +21,8 @@ package org.elasticsearch.test.integration.search.geo;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.xcontent.XContentFactory;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
diff --git a/src/test/java/org/elasticsearch/test/integration/validate/SimpleValidateQueryTests.java b/src/test/java/org/elasticsearch/test/integration/validate/SimpleValidateQueryTests.java
index beddf05dd18..89515235a88 100644
--- a/src/test/java/org/elasticsearch/test/integration/validate/SimpleValidateQueryTests.java
+++ b/src/test/java/org/elasticsearch/test/integration/validate/SimpleValidateQueryTests.java
@@ -21,13 +21,13 @@ package org.elasticsearch.test.integration.validate;
import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryResponse;
import org.elasticsearch.client.Client;
+import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.search.geo.GeoDistance;
import org.elasticsearch.test.integration.AbstractNodesTests;
import org.hamcrest.Matcher;
import org.testng.annotations.AfterClass;
diff --git a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/GeohashMappingGeoPointTests.java b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/GeohashMappingGeoPointTests.java
index cde370494ee..7eb30ba234f 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/GeohashMappingGeoPointTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/GeohashMappingGeoPointTests.java
@@ -19,10 +19,10 @@
package org.elasticsearch.test.unit.index.mapper.geo;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.ParsedDocument;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
import org.elasticsearch.test.unit.index.mapper.MapperTests;
import org.hamcrest.MatcherAssert;
import org.testng.annotations.Test;
diff --git a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonAndGeohashMappingGeoPointTests.java b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonAndGeohashMappingGeoPointTests.java
index 84fd2a3605b..970a0e60426 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonAndGeohashMappingGeoPointTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonAndGeohashMappingGeoPointTests.java
@@ -19,10 +19,10 @@
package org.elasticsearch.test.unit.index.mapper.geo;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.ParsedDocument;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
import org.elasticsearch.test.unit.index.mapper.MapperTests;
import org.testng.annotations.Test;
diff --git a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonMappingGeoPointTests.java b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonMappingGeoPointTests.java
index 1ab84da2bb3..891a805685f 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonMappingGeoPointTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/mapper/geo/LatLonMappingGeoPointTests.java
@@ -19,11 +19,11 @@
package org.elasticsearch.test.unit.index.mapper.geo;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.MapperParsingException;
import org.elasticsearch.index.mapper.ParsedDocument;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
import org.elasticsearch.test.unit.index.mapper.MapperTests;
import org.testng.annotations.Test;
diff --git a/src/test/java/org/elasticsearch/test/unit/index/query/SimpleIndexQueryParserTests.java b/src/test/java/org/elasticsearch/test/unit/index/query/SimpleIndexQueryParserTests.java
index af3cd24348c..a7d09929875 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/query/SimpleIndexQueryParserTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/query/SimpleIndexQueryParserTests.java
@@ -1803,10 +1803,10 @@ public class SimpleIndexQueryParserTests {
XConstantScoreQuery constantScoreQuery = (XConstantScoreQuery) parsedQuery.query();
InMemoryGeoBoundingBoxFilter filter = (InMemoryGeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
- assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
- assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
- assertThat(filter.bottomRight().lat, closeTo(30, 0.00001));
- assertThat(filter.bottomRight().lon, closeTo(-80, 0.00001));
+ assertThat(filter.topLeft().lat(), closeTo(40, 0.00001));
+ assertThat(filter.topLeft().lon(), closeTo(-70, 0.00001));
+ assertThat(filter.bottomRight().lat(), closeTo(30, 0.00001));
+ assertThat(filter.bottomRight().lon(), closeTo(-80, 0.00001));
}
@@ -1819,10 +1819,10 @@ public class SimpleIndexQueryParserTests {
XConstantScoreQuery constantScoreQuery = (XConstantScoreQuery) parsedQuery;
InMemoryGeoBoundingBoxFilter filter = (InMemoryGeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
- assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
- assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
- assertThat(filter.bottomRight().lat, closeTo(30, 0.00001));
- assertThat(filter.bottomRight().lon, closeTo(-80, 0.00001));
+ assertThat(filter.topLeft().lat(), closeTo(40, 0.00001));
+ assertThat(filter.topLeft().lon(), closeTo(-70, 0.00001));
+ assertThat(filter.bottomRight().lat(), closeTo(30, 0.00001));
+ assertThat(filter.bottomRight().lon(), closeTo(-80, 0.00001));
}
@Test
@@ -1834,10 +1834,10 @@ public class SimpleIndexQueryParserTests {
XConstantScoreQuery constantScoreQuery = (XConstantScoreQuery) parsedQuery;
InMemoryGeoBoundingBoxFilter filter = (InMemoryGeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
- assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
- assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
- assertThat(filter.bottomRight().lat, closeTo(30, 0.00001));
- assertThat(filter.bottomRight().lon, closeTo(-80, 0.00001));
+ assertThat(filter.topLeft().lat(), closeTo(40, 0.00001));
+ assertThat(filter.topLeft().lon(), closeTo(-70, 0.00001));
+ assertThat(filter.bottomRight().lat(), closeTo(30, 0.00001));
+ assertThat(filter.bottomRight().lon(), closeTo(-80, 0.00001));
}
@Test
@@ -1849,10 +1849,10 @@ public class SimpleIndexQueryParserTests {
XConstantScoreQuery constantScoreQuery = (XConstantScoreQuery) parsedQuery;
InMemoryGeoBoundingBoxFilter filter = (InMemoryGeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
- assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
- assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
- assertThat(filter.bottomRight().lat, closeTo(30, 0.00001));
- assertThat(filter.bottomRight().lon, closeTo(-80, 0.00001));
+ assertThat(filter.topLeft().lat(), closeTo(40, 0.00001));
+ assertThat(filter.topLeft().lon(), closeTo(-70, 0.00001));
+ assertThat(filter.bottomRight().lat(), closeTo(30, 0.00001));
+ assertThat(filter.bottomRight().lon(), closeTo(-80, 0.00001));
}
@Test
@@ -1864,10 +1864,10 @@ public class SimpleIndexQueryParserTests {
XConstantScoreQuery constantScoreQuery = (XConstantScoreQuery) parsedQuery;
InMemoryGeoBoundingBoxFilter filter = (InMemoryGeoBoundingBoxFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
- assertThat(filter.topLeft().lat, closeTo(40, 0.00001));
- assertThat(filter.topLeft().lon, closeTo(-70, 0.00001));
- assertThat(filter.bottomRight().lat, closeTo(30, 0.00001));
- assertThat(filter.bottomRight().lon, closeTo(-80, 0.00001));
+ assertThat(filter.topLeft().lat(), closeTo(40, 0.00001));
+ assertThat(filter.topLeft().lon(), closeTo(-70, 0.00001));
+ assertThat(filter.bottomRight().lat(), closeTo(30, 0.00001));
+ assertThat(filter.bottomRight().lon(), closeTo(-80, 0.00001));
}
@Test
@@ -1881,12 +1881,12 @@ public class SimpleIndexQueryParserTests {
GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3));
- assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
- assertThat(filter.points()[0].lon, closeTo(-70, 0.00001));
- assertThat(filter.points()[1].lat, closeTo(30, 0.00001));
- assertThat(filter.points()[1].lon, closeTo(-80, 0.00001));
- assertThat(filter.points()[2].lat, closeTo(20, 0.00001));
- assertThat(filter.points()[2].lon, closeTo(-90, 0.00001));
+ assertThat(filter.points()[0].lat(), closeTo(40, 0.00001));
+ assertThat(filter.points()[0].lon(), closeTo(-70, 0.00001));
+ assertThat(filter.points()[1].lat(), closeTo(30, 0.00001));
+ assertThat(filter.points()[1].lon(), closeTo(-80, 0.00001));
+ assertThat(filter.points()[2].lat(), closeTo(20, 0.00001));
+ assertThat(filter.points()[2].lon(), closeTo(-90, 0.00001));
}
@Test
@@ -1899,12 +1899,12 @@ public class SimpleIndexQueryParserTests {
GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3));
- assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
- assertThat(filter.points()[0].lon, closeTo(-70, 0.00001));
- assertThat(filter.points()[1].lat, closeTo(30, 0.00001));
- assertThat(filter.points()[1].lon, closeTo(-80, 0.00001));
- assertThat(filter.points()[2].lat, closeTo(20, 0.00001));
- assertThat(filter.points()[2].lon, closeTo(-90, 0.00001));
+ assertThat(filter.points()[0].lat(), closeTo(40, 0.00001));
+ assertThat(filter.points()[0].lon(), closeTo(-70, 0.00001));
+ assertThat(filter.points()[1].lat(), closeTo(30, 0.00001));
+ assertThat(filter.points()[1].lon(), closeTo(-80, 0.00001));
+ assertThat(filter.points()[2].lat(), closeTo(20, 0.00001));
+ assertThat(filter.points()[2].lon(), closeTo(-90, 0.00001));
}
@Test
@@ -1917,12 +1917,12 @@ public class SimpleIndexQueryParserTests {
GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3));
- assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
- assertThat(filter.points()[0].lon, closeTo(-70, 0.00001));
- assertThat(filter.points()[1].lat, closeTo(30, 0.00001));
- assertThat(filter.points()[1].lon, closeTo(-80, 0.00001));
- assertThat(filter.points()[2].lat, closeTo(20, 0.00001));
- assertThat(filter.points()[2].lon, closeTo(-90, 0.00001));
+ assertThat(filter.points()[0].lat(), closeTo(40, 0.00001));
+ assertThat(filter.points()[0].lon(), closeTo(-70, 0.00001));
+ assertThat(filter.points()[1].lat(), closeTo(30, 0.00001));
+ assertThat(filter.points()[1].lon(), closeTo(-80, 0.00001));
+ assertThat(filter.points()[2].lat(), closeTo(20, 0.00001));
+ assertThat(filter.points()[2].lon(), closeTo(-90, 0.00001));
}
@Test
@@ -1935,12 +1935,12 @@ public class SimpleIndexQueryParserTests {
GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3));
- assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
- assertThat(filter.points()[0].lon, closeTo(-70, 0.00001));
- assertThat(filter.points()[1].lat, closeTo(30, 0.00001));
- assertThat(filter.points()[1].lon, closeTo(-80, 0.00001));
- assertThat(filter.points()[2].lat, closeTo(20, 0.00001));
- assertThat(filter.points()[2].lon, closeTo(-90, 0.00001));
+ assertThat(filter.points()[0].lat(), closeTo(40, 0.00001));
+ assertThat(filter.points()[0].lon(), closeTo(-70, 0.00001));
+ assertThat(filter.points()[1].lat(), closeTo(30, 0.00001));
+ assertThat(filter.points()[1].lon(), closeTo(-80, 0.00001));
+ assertThat(filter.points()[2].lat(), closeTo(20, 0.00001));
+ assertThat(filter.points()[2].lon(), closeTo(-90, 0.00001));
}
@Test
@@ -1953,12 +1953,12 @@ public class SimpleIndexQueryParserTests {
GeoPolygonFilter filter = (GeoPolygonFilter) constantScoreQuery.getFilter();
assertThat(filter.fieldName(), equalTo("location"));
assertThat(filter.points().length, equalTo(3));
- assertThat(filter.points()[0].lat, closeTo(40, 0.00001));
- assertThat(filter.points()[0].lon, closeTo(-70, 0.00001));
- assertThat(filter.points()[1].lat, closeTo(30, 0.00001));
- assertThat(filter.points()[1].lon, closeTo(-80, 0.00001));
- assertThat(filter.points()[2].lat, closeTo(20, 0.00001));
- assertThat(filter.points()[2].lon, closeTo(-90, 0.00001));
+ assertThat(filter.points()[0].lat(), closeTo(40, 0.00001));
+ assertThat(filter.points()[0].lon(), closeTo(-70, 0.00001));
+ assertThat(filter.points()[1].lat(), closeTo(30, 0.00001));
+ assertThat(filter.points()[1].lon(), closeTo(-80, 0.00001));
+ assertThat(filter.points()[2].lat(), closeTo(20, 0.00001));
+ assertThat(filter.points()[2].lon(), closeTo(-90, 0.00001));
}
@Test
diff --git a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoDistanceTests.java b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoDistanceTests.java
index 649769e26d5..5fced9e6523 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoDistanceTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoDistanceTests.java
@@ -19,15 +19,13 @@
package org.elasticsearch.test.unit.index.search.geo;
+import org.elasticsearch.common.geo.GeoDistance;
+import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
-import org.elasticsearch.index.search.geo.GeoDistance;
-import org.elasticsearch.index.search.geo.Point;
import org.testng.annotations.Test;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.lessThan;
+import static org.hamcrest.Matchers.*;
/**
*/
@@ -49,22 +47,22 @@ public class GeoDistanceTests {
@Test
public void testArcDistanceVsPlaneInEllipsis() {
- Point centre = new Point(48.8534100, 2.3488000);
- Point northernPoint = new Point(48.8801108681, 2.35152032666);
- Point westernPoint = new Point(48.85265, 2.308896);
+ GeoPoint centre = new GeoPoint(48.8534100, 2.3488000);
+ GeoPoint northernPoint = new GeoPoint(48.8801108681, 2.35152032666);
+ GeoPoint westernPoint = new GeoPoint(48.85265, 2.308896);
// With GeoDistance.ARC both the northern and western points are within the 4km range
- assertThat(GeoDistance.ARC.calculate(centre.lat, centre.lon, northernPoint.lat,
- northernPoint.lon, DistanceUnit.KILOMETERS), lessThan(4D));
- assertThat(GeoDistance.ARC.calculate(centre.lat, centre.lon, westernPoint.lat,
- westernPoint.lon, DistanceUnit.KILOMETERS), lessThan(4D));
+ assertThat(GeoDistance.ARC.calculate(centre.lat(), centre.lon(), northernPoint.lat(),
+ northernPoint.lon(), DistanceUnit.KILOMETERS), lessThan(4D));
+ assertThat(GeoDistance.ARC.calculate(centre.lat(), centre.lon(), westernPoint.lat(),
+ westernPoint.lon(), DistanceUnit.KILOMETERS), lessThan(4D));
// With GeoDistance.PLANE, only the northern point is within the 4km range,
// the western point is outside of the range due to the simple math it employs,
// meaning results will appear elliptical
- assertThat(GeoDistance.PLANE.calculate(centre.lat, centre.lon, northernPoint.lat,
- northernPoint.lon, DistanceUnit.KILOMETERS), lessThan(4D));
- assertThat(GeoDistance.PLANE.calculate(centre.lat, centre.lon, westernPoint.lat,
- westernPoint.lon, DistanceUnit.KILOMETERS), greaterThan(4D));
+ assertThat(GeoDistance.PLANE.calculate(centre.lat(), centre.lon(), northernPoint.lat(),
+ northernPoint.lon(), DistanceUnit.KILOMETERS), lessThan(4D));
+ assertThat(GeoDistance.PLANE.calculate(centre.lat(), centre.lon(), westernPoint.lat(),
+ westernPoint.lon(), DistanceUnit.KILOMETERS), greaterThan(4D));
}
}
diff --git a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoHashUtilsTests.java b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoHashUtilsTests.java
index 41920b03947..67b729049b2 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoHashUtilsTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoHashUtilsTests.java
@@ -19,7 +19,8 @@
package org.elasticsearch.test.unit.index.search.geo;
-import org.elasticsearch.index.search.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoPoint;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
@@ -50,10 +51,10 @@ public class GeoHashUtilsTests {
public void testDecodePreciseLongitudeLatitude() {
String hash = GeoHashUtils.encode(52.3738007, 4.8909347);
- double[] latitudeLongitude = GeoHashUtils.decode(hash);
+ GeoPoint point = GeoHashUtils.decode(hash);
- assertEquals(52.3738007, latitudeLongitude[0], 0.00001D);
- assertEquals(4.8909347, latitudeLongitude[1], 0.00001D);
+ assertEquals(52.3738007, point.lat(), 0.00001D);
+ assertEquals(4.8909347, point.lon(), 0.00001D);
}
/**
@@ -64,10 +65,10 @@ public class GeoHashUtilsTests {
public void testDecodeImpreciseLongitudeLatitude() {
String hash = GeoHashUtils.encode(84.6, 10.5);
- double[] latitudeLongitude = GeoHashUtils.decode(hash);
+ GeoPoint point = GeoHashUtils.decode(hash);
- assertEquals(84.6, latitudeLongitude[0], 0.00001D);
- assertEquals(10.5, latitudeLongitude[1], 0.00001D);
+ assertEquals(84.6, point.lat(), 0.00001D);
+ assertEquals(10.5, point.lon(), 0.00001D);
}
/*
@@ -78,16 +79,10 @@ public class GeoHashUtilsTests {
public void testDecodeEncode() {
String geoHash = "u173zq37x014";
assertEquals(geoHash, GeoHashUtils.encode(52.3738007, 4.8909347));
- double[] decode = GeoHashUtils.decode(geoHash);
- assertEquals(52.37380061d, decode[0], 0.000001d);
- assertEquals(4.8909343d, decode[1], 0.000001d);
+ GeoPoint decode = GeoHashUtils.decode(geoHash);
+ assertEquals(52.37380061d, decode.lat(), 0.000001d);
+ assertEquals(4.8909343d, decode.lon(), 0.000001d);
- assertEquals(geoHash, GeoHashUtils.encode(decode[0], decode[1]));
-
- geoHash = "u173";
- decode = GeoHashUtils.decode("u173");
- geoHash = GeoHashUtils.encode(decode[0], decode[1]);
- assertEquals(decode[0], GeoHashUtils.decode(geoHash)[0], 0.000001d);
- assertEquals(decode[1], GeoHashUtils.decode(geoHash)[1], 0.000001d);
+ assertEquals(geoHash, GeoHashUtils.encode(decode.lat(), decode.lon()));
}
}
diff --git a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoUtilsTests.java b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoUtilsTests.java
index 0d3bda367f8..caf3473d0a4 100644
--- a/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoUtilsTests.java
+++ b/src/test/java/org/elasticsearch/test/unit/index/search/geo/GeoUtilsTests.java
@@ -19,8 +19,8 @@
package org.elasticsearch.test.unit.index.search.geo;
-import org.elasticsearch.index.search.geo.GeoUtils;
-import org.elasticsearch.index.search.geo.Point;
+import org.elasticsearch.common.geo.GeoPoint;
+import org.elasticsearch.common.geo.GeoUtils;
import org.testng.annotations.Test;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -85,7 +85,7 @@ public class GeoUtilsTests {
// Now with points, to check for longitude shifting with latitude normalization
// We've gone past the north pole and down the other side, the longitude will
// be shifted by 180
- assertNormalizedPoint(new Point(90.5, 10), new Point(89.5, -170));
+ assertNormalizedPoint(new GeoPoint(90.5, 10), new GeoPoint(89.5, -170));
// Every 10-units, multiple full turns
for (int shift = -20; shift <= 20; ++shift) {
@@ -199,7 +199,7 @@ public class GeoUtilsTests {
assertThat(GeoUtils.normalizeLat(+18000000000091.0), equalTo(GeoUtils.normalizeLat(+091.0)));
}
- private static void assertNormalizedPoint(Point input, Point expected) {
+ private static void assertNormalizedPoint(GeoPoint input, GeoPoint expected) {
GeoUtils.normalizePoint(input);
assertThat(input, equalTo(expected));
}