diff options
author | Adrien Grand <jpountz@gmail.com> | 2016-06-08 15:40:46 +0200 |
---|---|---|
committer | Adrien Grand <jpountz@gmail.com> | 2016-06-10 16:18:12 +0200 |
commit | 44c653f5a87337a02daf4737bcb34150df509dbe (patch) | |
tree | 2b9c2fe3a5afb6d39d3a38beb9f2ecaa0b2b934f /core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java | |
parent | a25b8ee1bf2e70bc28f688731ef43962a3ef18ce (diff) |
Upgrade to lucene-6.1.0-snapshot-3a57bea.
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java')
-rw-r--r-- | core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java index 192ad6c28d..ec838e7dd4 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java @@ -20,7 +20,7 @@ package org.elasticsearch.search.aggregations.metrics.geocentroid; import org.apache.lucene.index.LeafReaderContext; -import org.apache.lucene.spatial.util.GeoEncodingUtils; +import org.apache.lucene.spatial.geopoint.document.GeoPointField; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.lease.Releasables; import org.elasticsearch.common.util.BigArrays; @@ -82,9 +82,9 @@ public final class GeoCentroidAggregator extends MetricsAggregator { counts.increment(bucket, valueCount); // get the previous GeoPoint if a moving avg was computed if (prevCounts > 0) { - final GeoPoint centroid = GeoPoint.fromIndexLong(centroids.get(bucket)); - pt[0] = centroid.lon(); - pt[1] = centroid.lat(); + final long mortonCode = centroids.get(bucket); + pt[0] = GeoPointField.decodeLongitude(mortonCode); + pt[1] = GeoPointField.decodeLatitude(mortonCode); } // update the moving average for (int i = 0; i < valueCount; ++i) { @@ -92,7 +92,9 @@ public final class GeoCentroidAggregator extends MetricsAggregator { pt[0] = pt[0] + (value.getLon() - pt[0]) / ++prevCounts; pt[1] = pt[1] + (value.getLat() - pt[1]) / prevCounts; } - centroids.set(bucket, GeoEncodingUtils.mortonHash(pt[1], pt[0])); + // TODO: we do not need to interleave the lat and lon bits here + // should we just store them contiguously? + centroids.set(bucket, GeoPointField.encodeLatLon(pt[1], pt[0])); } } }; @@ -104,8 +106,10 @@ public final class GeoCentroidAggregator extends MetricsAggregator { return buildEmptyAggregation(); } final long bucketCount = counts.get(bucket); - final GeoPoint bucketCentroid = (bucketCount > 0) ? GeoPoint.fromIndexLong(centroids.get(bucket)) : - new GeoPoint(Double.NaN, Double.NaN); + final long mortonCode = centroids.get(bucket); + final GeoPoint bucketCentroid = (bucketCount > 0) + ? new GeoPoint(GeoPointField.decodeLatitude(mortonCode), GeoPointField.decodeLongitude(mortonCode)) + : null; return new InternalGeoCentroid(name, bucketCentroid , bucketCount, pipelineAggregators(), metaData()); } |