use of com.mapbox.maps.ScreenBox in project maps by rnmapbox.
the class RCTMGLMapView method handleTapInSources.
void handleTapInSources(LinkedList<RCTSource> sources, ScreenCoordinate screenPoint, HashMap<String, List<Feature>> hits, ArrayList<RCTSource> hitTouchableSources, HandleTap handleTap) {
if (sources.isEmpty()) {
handleTap.run(hitTouchableSources, hits);
return;
}
RCTSource source = sources.removeFirst();
Map<String, Double> hitbox = source.getTouchHitbox();
if (hitbox != null) {
double halfWidth = hitbox.get("width").floatValue() / 2.0f;
double halfHeight = hitbox.get("height").floatValue() / 2.0f;
ScreenBox screenBox = new ScreenBox(new ScreenCoordinate(screenPoint.getX() - halfWidth, screenPoint.getY() - halfHeight), new ScreenCoordinate(screenPoint.getX() + halfWidth, screenPoint.getY() + halfHeight));
getMapboxMap().queryRenderedFeatures(screenBox, new RenderedQueryOptions(source.getLayerIDs(), null), new QueryFeaturesCallback() {
@Override
public void run(@NonNull Expected<String, List<QueriedFeature>> features) {
HashMap<String, List<Feature>> newHits = hits;
if (features.isValue()) {
if (features.getValue().size() > 0) {
ArrayList<Feature> featuresList = new ArrayList<>();
for (QueriedFeature i : features.getValue()) {
featuresList.add(i.getFeature());
}
newHits.put(source.getID(), featuresList);
hitTouchableSources.add(source);
}
} else {
Logger.e("handleTapInSources", features.getError());
}
handleTapInSources(sources, screenPoint, newHits, hitTouchableSources, handleTap);
}
});
}
}
Aggregations