Spatial Index
Optimised data structure for spatial search
Last updated
private QuadTree<GeoFence> geoFenceSearchTree;
@Override
public void initialize(Properties prop) throws ProcessorException {
super.initialize(prop);
geoFenceSearchTree.initialise();
// Other custom initialization
}
/**
* Query the geoFenceSearchTree with passed location information
*
* @param event
* @param entityLatitude
* @param entityLongitude
*/
private GeoTrackingInfo queryGeospace(final StreamEvent event, final double entityLatitude, final double entityLongitude){
// Perform geofence search
Collection<GeoFence> foundGeoFences = geoFenceSearchTree.query(new Tuple<>(entityLatitude, entityLongitude));
Object trackingKey = event.getValue(trackingEventKey);
// Update stateful tracking
GeoTrackingInfo info = state.get(trackingKey);
info.setCurrentLatLng(entityLatitude, entityLongitude, event.getEventTime());
info.setCurrentGeofenceIds(foundGeoFences);
return info;
}
/**
* Set QuadTree for processor
*
* @param geoFenceSearchTree
*/
@JsonProperty(value = "spatial index")
public void setGeoFenceSearchTree(QuadTree<GeoFence> geoFenceSearchTree) {
this.geoFenceSearchTree = geoFenceSearchTree;
}