|
20 | 20 | package org.elasticsearch.search.aggregations.bucket.geogrid;
|
21 | 21 |
|
22 | 22 | import org.elasticsearch.common.geo.GeoPoint;
|
| 23 | +import org.elasticsearch.geometry.Rectangle; |
23 | 24 | import org.elasticsearch.test.ESTestCase;
|
24 | 25 |
|
25 | 26 | import static org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils.MAX_ZOOM;
|
|
28 | 29 | import static org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils.keyToGeoPoint;
|
29 | 30 | import static org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils.longEncode;
|
30 | 31 | import static org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils.stringEncode;
|
| 32 | +import static org.hamcrest.Matchers.anyOf; |
31 | 33 | import static org.hamcrest.Matchers.closeTo;
|
32 | 34 | import static org.hamcrest.Matchers.containsString;
|
| 35 | +import static org.hamcrest.Matchers.equalTo; |
33 | 36 |
|
34 | 37 | public class GeoTileUtilsTests extends ESTestCase {
|
35 | 38 |
|
@@ -231,4 +234,23 @@ public void testSingularityAtPoles() {
|
231 | 234 | String clippedTileIndex = stringEncode(longEncode(lon, clippedLat, zoom));
|
232 | 235 | assertEquals(tileIndex, clippedTileIndex);
|
233 | 236 | }
|
| 237 | + |
| 238 | + public void testPointToTile() { |
| 239 | + int zoom = randomIntBetween(0, MAX_ZOOM); |
| 240 | + int tiles = 1 << zoom; |
| 241 | + int xTile = randomIntBetween(0, zoom); |
| 242 | + int yTile = randomIntBetween(0, zoom); |
| 243 | + Rectangle rectangle = GeoTileUtils.toBoundingBox(xTile, yTile, zoom); |
| 244 | + // check corners |
| 245 | + assertThat(GeoTileUtils.getXTile(rectangle.getMinX(), tiles), equalTo(xTile)); |
| 246 | + assertThat(GeoTileUtils.getXTile(rectangle.getMaxX(), tiles), equalTo(Math.min(tiles - 1, xTile + 1))); |
| 247 | + assertThat(GeoTileUtils.getYTile(rectangle.getMaxY(), tiles), anyOf(equalTo(yTile - 1), equalTo(yTile))); |
| 248 | + assertThat(GeoTileUtils.getYTile(rectangle.getMinY(), tiles), anyOf(equalTo(yTile + 1), equalTo(yTile))); |
| 249 | + // check point inside |
| 250 | + double x = randomDoubleBetween(rectangle.getMinX(), rectangle.getMaxX(), false); |
| 251 | + double y = randomDoubleBetween(rectangle.getMinY(), rectangle.getMaxY(), false); |
| 252 | + assertThat(GeoTileUtils.getXTile(x, tiles), equalTo(xTile)); |
| 253 | + assertThat(GeoTileUtils.getYTile(y, tiles), equalTo(yTile)); |
| 254 | + |
| 255 | + } |
234 | 256 | }
|
0 commit comments