use of org.locationtech.geowave.core.store.query.constraints.BasicQueryByClass.ConstraintData in project geowave by locationtech.
the class ChooseLocalityPreservingQueryStrategyTest method createConstraints.
private ConstraintsByClass createConstraints(final double lat, final double lon, final double time) {
final ConstraintSet cs1 = new ConstraintSet();
cs1.addConstraint(LatitudeDefinition.class, new ConstraintData(new ConstrainedIndexValue(0, lat), true));
cs1.addConstraint(LongitudeDefinition.class, new ConstraintData(new ConstrainedIndexValue(0, lon), true));
final ConstraintSet cs2a = new ConstraintSet();
cs2a.addConstraint(TimeDefinition.class, new ConstraintData(new ConstrainedIndexValue(0, time), true));
return new ConstraintsByClass(Arrays.asList(cs2a)).merge(Collections.singletonList(cs1));
}
use of org.locationtech.geowave.core.store.query.constraints.BasicQueryByClass.ConstraintData in project geowave by locationtech.
the class GeometryUtils method basicConstraintSetFromEnvelope.
/**
* This utility method will convert a JTS envelope to contraints that can be used in a GeoWave
* query.
*
* @return Constraints as a mapping of NumericData objects representing ranges for a latitude
* dimension and a longitude dimension
*/
public static ConstraintSet basicConstraintSetFromEnvelope(final Envelope env) {
// Create a NumericRange object using the x axis
final NumericRange rangeLongitude = new NumericRange(env.getMinX(), env.getMaxX());
// Create a NumericRange object using the y axis
final NumericRange rangeLatitude = new NumericRange(env.getMinY(), env.getMaxY());
final Map<Class<? extends NumericDimensionDefinition>, ConstraintData> constraintsPerDimension = new HashMap<>();
// Create and return a new IndexRange array with an x and y axis
// range
final ConstraintData xRange = new ConstraintData(rangeLongitude, false);
final ConstraintData yRange = new ConstraintData(rangeLatitude, false);
constraintsPerDimension.put(CustomCRSUnboundedSpatialDimensionX.class, xRange);
constraintsPerDimension.put(CustomCRSUnboundedSpatialDimensionY.class, yRange);
constraintsPerDimension.put(CustomCRSBoundedSpatialDimensionX.class, xRange);
constraintsPerDimension.put(CustomCRSBoundedSpatialDimensionY.class, yRange);
constraintsPerDimension.put(LongitudeDefinition.class, xRange);
constraintsPerDimension.put(LatitudeDefinition.class, yRange);
return new ConstraintSet(constraintsPerDimension);
}
use of org.locationtech.geowave.core.store.query.constraints.BasicQueryByClass.ConstraintData in project geowave by locationtech.
the class GeometryUtils method basicConstraintsFromPoint.
/**
* This utility method will convert a JTS envelope to that can be used in a GeoWave query.
*
* @return Constraints as a mapping of NumericData objects representing ranges for a latitude
* dimension and a longitude dimension
*/
public static ConstraintSet basicConstraintsFromPoint(final double latitudeDegrees, final double longitudeDegrees) {
// Create a NumericData object using the x axis
final NumericData latitude = new NumericValue(latitudeDegrees);
// Create a NumericData object using the y axis
final NumericData longitude = new NumericValue(longitudeDegrees);
final Map<Class<? extends NumericDimensionDefinition>, ConstraintData> constraintsPerDimension = new HashMap<>();
// Create and return a new IndexRange array with an x and y axis
// range
constraintsPerDimension.put(LongitudeDefinition.class, new ConstraintData(longitude, false));
constraintsPerDimension.put(LatitudeDefinition.class, new ConstraintData(latitude, false));
return new ConstraintSet(constraintsPerDimension);
}
use of org.locationtech.geowave.core.store.query.constraints.BasicQueryByClass.ConstraintData in project geowave by locationtech.
the class BasicQueryByClassTest method testIntersectCasesWithPersistence.
@Test
public void testIntersectCasesWithPersistence() {
final Index index = new CustomNameIndex(new ExampleNumericIndexStrategy(), new BasicIndexModel(new NumericDimensionField[] { new ExampleDimensionOne(), new ExampleDimensionTwo() }), "22");
final List<MultiDimensionalNumericData> expectedResults = new ArrayList<>();
expectedResults.add(new BasicNumericDataset(new NumericData[] { new ConstrainedIndexValue(0.3, 0.5), new ConstrainedIndexValue(0.1, 0.7) }));
final ConstraintSet cs1 = new ConstraintSet();
cs1.addConstraint(ExampleDimensionOne.class, new ConstraintData(new ConstrainedIndexValue(0.3, 0.5), true));
cs1.addConstraint(ExampleDimensionTwo.class, new ConstraintData(new ConstrainedIndexValue(0.4, 0.7), true));
final ConstraintSet cs2a = new ConstraintSet();
cs2a.addConstraint(ExampleDimensionTwo.class, new ConstraintData(new ConstrainedIndexValue(0.1, 0.2), true));
final ConstraintsByClass constraints = new ConstraintsByClass(Arrays.asList(cs2a)).merge(Collections.singletonList(cs1));
assertEquals(expectedResults, constraints.getIndexConstraints(new IndexImpl(new ExampleNumericIndexStrategy(), null)));
final byte[] image = new BasicQueryByClass(constraints).toBinary();
final BasicQueryByClass query = new BasicQueryByClass();
query.fromBinary(image);
assertEquals(expectedResults, query.getIndexConstraints(index));
}
use of org.locationtech.geowave.core.store.query.constraints.BasicQueryByClass.ConstraintData in project geowave by locationtech.
the class BasicQueryByClassTest method testDisjointCasesWithPersistence.
@Test
public void testDisjointCasesWithPersistence() {
final List<MultiDimensionalNumericData> expectedResults = new ArrayList<>();
expectedResults.add(new BasicNumericDataset(new NumericData[] { new ConstrainedIndexValue(0.3, 0.7), new ConstrainedIndexValue(0.1, 2.3) }));
expectedResults.add(new BasicNumericDataset(new NumericData[] { new ConstrainedIndexValue(0.3, 0.7), new ConstrainedIndexValue(3.4, 3.7) }));
final ConstraintSet cs1 = new ConstraintSet();
cs1.addConstraint(ExampleDimensionOne.class, new ConstraintData(new ConstrainedIndexValue(0.3, 0.5), true));
cs1.addConstraint(ExampleDimensionOne.class, new ConstraintData(new ConstrainedIndexValue(0.4, 0.7), true));
final ConstraintSet cs2a = new ConstraintSet();
cs2a.addConstraint(ExampleDimensionTwo.class, new ConstraintData(new ConstrainedIndexValue(0.1, 0.2), true));
cs2a.addConstraint(ExampleDimensionTwo.class, new ConstraintData(new ConstrainedIndexValue(2.1, 2.3), true));
final ConstraintSet cs2b = new ConstraintSet();
cs2b.addConstraint(ExampleDimensionTwo.class, new ConstraintData(new ConstrainedIndexValue(3.4, 3.7), true));
final ConstraintsByClass constraints = new ConstraintsByClass(Arrays.asList(cs2a, cs2b)).merge(Collections.singletonList(cs1));
assertEquals(expectedResults, constraints.getIndexConstraints(new IndexImpl(new ExampleNumericIndexStrategy(), null)));
final byte[] image = new BasicQueryByClass(constraints).toBinary();
final BasicQueryByClass query = new BasicQueryByClass();
query.fromBinary(image);
final Index index = new CustomNameIndex(new ExampleNumericIndexStrategy(), new BasicIndexModel(new NumericDimensionField[] { new ExampleDimensionOne(), new ExampleDimensionTwo() }), "22");
assertEquals(expectedResults, query.getIndexConstraints(index));
final List<QueryFilter> filters = query.createFilters(index);
assertEquals(1, filters.size());
final Map<String, ConstrainedIndexValue> fieldIdToValueMap = new HashMap<>();
fieldIdToValueMap.put("one", new ConstrainedIndexValue(0.4, 0.4));
fieldIdToValueMap.put("two", new ConstrainedIndexValue(0.5, 0.5));
final CommonIndexModel model = null;
assertTrue(filters.get(0).accept(model, new CommonIndexedPersistenceEncoding((short) 1, StringUtils.stringToBinary("data"), StringUtils.stringToBinary("partition"), StringUtils.stringToBinary("sort"), // duplicate count
1, new MultiFieldPersistentDataset(fieldIdToValueMap), null)));
fieldIdToValueMap.put("one", new ConstrainedIndexValue(0.1, 0.1));
assertFalse(filters.get(0).accept(model, new CommonIndexedPersistenceEncoding((short) 1, StringUtils.stringToBinary("data"), StringUtils.stringToBinary("partition"), StringUtils.stringToBinary("sort"), // duplicate count
1, new MultiFieldPersistentDataset(fieldIdToValueMap), null)));
fieldIdToValueMap.put("one", new ConstrainedIndexValue(0.4, 0.4));
fieldIdToValueMap.put("two", new ConstrainedIndexValue(5.0, 5.0));
assertFalse(filters.get(0).accept(model, new CommonIndexedPersistenceEncoding((short) 1, StringUtils.stringToBinary("data"), StringUtils.stringToBinary("partition"), StringUtils.stringToBinary("sort"), // duplicate count
1, new MultiFieldPersistentDataset(fieldIdToValueMap), null)));
/**
* Tests the 'OR' Case
*/
fieldIdToValueMap.put("two", new ConstrainedIndexValue(3.5, 3.5));
assertTrue(filters.get(0).accept(model, new CommonIndexedPersistenceEncoding((short) 1, StringUtils.stringToBinary("data"), StringUtils.stringToBinary("partition"), StringUtils.stringToBinary("sort"), // duplicate count
1, new MultiFieldPersistentDataset(fieldIdToValueMap), null)));
}
Aggregations