Skip to content

Commit dee2de4

Browse files
committed
added large polygon query, geometry interning in filters
1 parent 3541007 commit dee2de4

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

geowave-accumulo/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
</exclusion>
4242
</exclusions>
4343
</dependency>
44-
<dependency>
44+
<dependency>
4545
<groupId>junit</groupId>
4646
<artifactId>junit</artifactId>
4747
<version>4.11</version>

geowave-accumulo/src/test/java/mil/nga/giat/geowave/accumulo/query/AccumuloRangeQueryTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import java.util.ArrayList;
44
import java.util.List;
5+
import java.util.Random;
56

7+
import com.vividsolutions.jts.geom.Polygon;
68
import junit.framework.Assert;
79
import mil.nga.giat.geowave.accumulo.AccumuloDataStore;
810
import mil.nga.giat.geowave.accumulo.BasicAccumuloOperations;
911
import mil.nga.giat.geowave.index.ByteArrayId;
1012
import mil.nga.giat.geowave.store.CloseableIterator;
1113
import mil.nga.giat.geowave.store.DataStore;
14+
import mil.nga.giat.geowave.store.GeometryUtils;
1215
import mil.nga.giat.geowave.store.adapter.AbstractDataAdapter;
1316
import mil.nga.giat.geowave.store.adapter.NativeFieldHandler;
1417
import mil.nga.giat.geowave.store.adapter.NativeFieldHandler.RowBuilder;
@@ -111,6 +114,24 @@ public void testIntersection() {
111114
Assert.assertTrue(resultOfIntersect.hasNext());
112115
}
113116

117+
@Test
118+
public void largeQuery() {
119+
final Geometry largeGeo = createPolygon(50000);
120+
final Query largeQuery = new SpatialQuery(
121+
largeGeo);
122+
final CloseableIterator itr = mockDataStore.query(
123+
index,
124+
largeQuery);
125+
int numfeats = 0;
126+
while (itr.hasNext()) {
127+
itr.next();
128+
numfeats++;
129+
}
130+
Assert.assertEquals(
131+
numfeats,
132+
1);
133+
}
134+
114135
@Test
115136
public void testMiss() {
116137
final Query intersectQuery = new SpatialQuery(
@@ -161,6 +182,31 @@ public void testEncompass() {
161182
geom1.id);
162183
}
163184

185+
private static Polygon createPolygon(
186+
int numPoints ) {
187+
double centerX = 4;
188+
double centerY = 12;
189+
int maxRadius = 80;
190+
191+
List<Coordinate> coords = new ArrayList<Coordinate>();
192+
Random rand = new Random(
193+
8675309l);
194+
195+
double increment = (double) 360 / numPoints;
196+
197+
for (double theta = 0; theta <= 360; theta += increment) {
198+
double radius = rand.nextDouble() * maxRadius + 0.1;
199+
double rad = theta * Math.PI / 180.0;
200+
double x = centerX + radius * Math.sin(rad);
201+
double y = centerY + radius * Math.cos(rad);
202+
coords.add(new Coordinate(
203+
x,
204+
y));
205+
}
206+
coords.add(coords.get(0));
207+
return GeometryUtils.GEOMETRY_FACTORY.createPolygon(coords.toArray(new Coordinate[coords.size()]));
208+
}
209+
164210
protected static class TestGeometry
165211
{
166212
protected final Geometry geom;

geowave-store/src/main/java/mil/nga/giat/geowave/store/filter/SpatialQueryFilter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.util.List;
77
import java.util.Set;
88

9+
import com.google.common.collect.Interner;
10+
import com.google.common.collect.Interners;
911
import mil.nga.giat.geowave.index.ByteArrayId;
1012
import mil.nga.giat.geowave.index.sfc.data.BasicNumericDataset;
1113
import mil.nga.giat.geowave.index.sfc.data.MultiDimensionalNumericData;
@@ -25,6 +27,9 @@
2527
public class SpatialQueryFilter extends
2628
BasicQueryFilter
2729
{
30+
31+
private static final Interner<Geometry> geometryInterner = Interners.newWeakInterner();
32+
2833
private Geometry queryGeometry;
2934

3035
private Set<ByteArrayId> geometryFieldIds;
@@ -188,7 +193,7 @@ public void fromBinary(
188193
fieldId));
189194
}
190195
buf.get(theRest);
191-
queryGeometry = GeometryUtils.geometryFromBinary(geometryBinary);
196+
queryGeometry = geometryInterner.intern(GeometryUtils.geometryFromBinary(geometryBinary));
192197

193198
super.fromBinary(theRest);
194199
}

0 commit comments

Comments
 (0)