use of com.mapbox.maps.ScreenCoordinate in project maps by rnmapbox.
the class RCTMGLCamera method getUserLocationUpdateCameraOptions.
private CameraOptions getUserLocationUpdateCameraOptions(double zoomLevel) {
LatLng center = mUserLocation.getCoordinate();
ScreenCoordinate anchor = CameraAnimationsUtils.getCamera(mMapView).getAnchor();
CameraState actState = mMapView.getMapboxMap().getCameraState();
if (mUserLocationVerticalAlignment != UserLocationVerticalAlignment.CENTER) {
CameraOptions options = ExtensionUtils.toCameraOptions(actState, anchor);
CoordinateBounds bounds = mMapView.getMapboxMap().coordinateBoundsForCamera(options);
switch(mUserLocationVerticalAlignment) {
case UserLocationVerticalAlignment.TOP:
center = new LatLng(bounds.getNortheast().latitude(), center.getLongitude());
break;
case UserLocationVerticalAlignment.BOTTOM:
center = new LatLng(bounds.getSouthwest().latitude(), center.getLongitude());
break;
}
}
return new CameraOptions.Builder().center(center.getPoint()).bearing(getDirectionForUserLocationUpdate()).pitch(mPitch).anchor(anchor).padding(actState.getPadding()).zoom(zoomLevel).build();
}
use of com.mapbox.maps.ScreenCoordinate in project maps by rnmapbox.
the class RCTMGLMapView method onMapClick.
@Override
public boolean onMapClick(@NonNull Point point) {
RCTMGLMapView _this = this;
/*if (mPointAnnotationManager != nil) {
getAnnotations()
}*/
if (mAnnotationClicked) {
mAnnotationClicked = false;
return true;
}
ScreenCoordinate screenPoint = mMap.pixelForCoordinate(point);
List<RCTSource> touchableSources = getAllTouchableSources();
HashMap<String, List<Feature>> hits = new HashMap<>();
handleTapInSources(new LinkedList<>(touchableSources), screenPoint, hits, new ArrayList<>(), new HandleTap() {
@Override
public void run(List<RCTSource> hitTouchableSources, Map<String, List<Feature>> hits) {
if (hits.size() > 0) {
RCTSource source = getTouchableSourceWithHighestZIndex(hitTouchableSources);
if (source != null && source.hasPressListener()) {
source.onPress(new RCTSource.OnPressEvent(hits.get(source.getID()), GeoJSONUtils.toLatLng(point), new PointF((float) screenPoint.getX(), (float) screenPoint.getY())));
return;
}
}
MapClickEvent event = new MapClickEvent(_this, new LatLng(point), screenPoint);
mManager.handleEvent(event);
}
});
return false;
}
use of com.mapbox.maps.ScreenCoordinate 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