Search in sources :

Example 1 with QueryFeaturesCallback

use of com.mapbox.maps.QueryFeaturesCallback in project maps by rnmapbox.

the class RCTMGLRasterDemSource method querySourceFeatures.

public void querySourceFeatures(String callbackID, @Size(min = 1) List<String> layerIDs, @Nullable Expression filter) {
    if (mSource == null) {
        WritableMap payload = new WritableNativeMap();
        payload.putString("error", "source is not yet loaded");
        AndroidCallbackEvent event = new AndroidCallbackEvent(this, callbackID, payload);
        mManager.handleEvent(event);
        return;
    }
    WritableMap payload = new WritableNativeMap();
    mMap.querySourceFeatures(mID, new SourceQueryOptions(layerIDs, filter), new QueryFeaturesCallback() {

        @Override
        public void run(@NonNull Expected<String, List<QueriedFeature>> queriedFeatures) {
            if (queriedFeatures.isError()) {
                // V10todo
                payload.putString("error", queriedFeatures.getError());
            } else {
                List<Feature> features = new LinkedList<>();
                for (QueriedFeature feature : queriedFeatures.getValue()) {
                    features.add(feature.getFeature());
                }
                payload.putString("data", FeatureCollection.fromFeatures(features).toJson());
            }
        }
    });
    AndroidCallbackEvent event = new AndroidCallbackEvent(this, callbackID, payload);
    mManager.handleEvent(event);
}
Also used : WritableMap(com.facebook.react.bridge.WritableMap) QueriedFeature(com.mapbox.maps.QueriedFeature) SourceQueryOptions(com.mapbox.maps.SourceQueryOptions) WritableNativeMap(com.facebook.react.bridge.WritableNativeMap) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) QueryFeaturesCallback(com.mapbox.maps.QueryFeaturesCallback) AndroidCallbackEvent(com.mapbox.rctmgl.events.AndroidCallbackEvent)

Example 2 with QueryFeaturesCallback

use of com.mapbox.maps.QueryFeaturesCallback in project maps by rnmapbox.

the class RCTMGLShapeSource method getClusterExpansionZoom.

public void getClusterExpansionZoom(String callbackID, int clusterId) {
    if (mSource == null) {
        WritableMap payload = new WritableNativeMap();
        payload.putString("error", "source is not yet loaded");
        AndroidCallbackEvent event = new AndroidCallbackEvent(this, callbackID, payload);
        mManager.handleEvent(event);
        return;
    }
    SourceQueryOptions options = new SourceQueryOptions(null, Expression.eq(Expression.get("cluster_id"), Expression.literal(clusterId)));
    RCTMGLShapeSource _this = this;
    mMap.querySourceFeatures(getID(), options, new QueryFeaturesCallback() {

        @Override
        public void run(@NonNull Expected<String, List<QueriedFeature>> features) {
            if (features.isValue()) {
                QueriedFeature cluster = features.getValue().get(0);
                mMap.queryFeatureExtensions(getID(), cluster.getFeature(), "supercluster", "expansion-zoom", null, new QueryFeatureExtensionCallback() {

                    @Override
                    public void run(@NonNull Expected<String, FeatureExtensionValue> extension) {
                        if (extension.isValue()) {
                            Object contents = extension.getValue().getValue().getContents();
                            if (contents instanceof Long) {
                                WritableMap payload = new WritableNativeMap();
                                payload.putInt("data", ((Long) contents).intValue());
                                AndroidCallbackEvent event = new AndroidCallbackEvent(_this, callbackID, payload);
                                mManager.handleEvent(event);
                                return;
                            } else {
                                callbackError(callbackID, "Not a number", "getClusterExpansionZoom/queryFeatureExtensions2");
                                return;
                            }
                        } else {
                            callbackError(callbackID, extension.getError(), "getClusterExpansionZoom/queryFeatureExtensions");
                            return;
                        }
                    }
                });
            } else {
                callbackError(callbackID, features.getError(), "getClusterExpansionZoom/querySourceFeatures");
                return;
            }
        }
    });
}
Also used : Expected(com.mapbox.bindgen.Expected) WritableMap(com.facebook.react.bridge.WritableMap) WritableNativeMap(com.facebook.react.bridge.WritableNativeMap) QueryFeaturesCallback(com.mapbox.maps.QueryFeaturesCallback) AndroidCallbackEvent(com.mapbox.rctmgl.events.AndroidCallbackEvent) QueryFeatureExtensionCallback(com.mapbox.maps.QueryFeatureExtensionCallback) QueriedFeature(com.mapbox.maps.QueriedFeature) SourceQueryOptions(com.mapbox.maps.SourceQueryOptions) NonNull(androidx.annotation.NonNull) ArrayList(java.util.ArrayList) List(java.util.List)

Example 3 with QueryFeaturesCallback

use of com.mapbox.maps.QueryFeaturesCallback 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);
            }
        });
    }
}
Also used : RCTSource(com.mapbox.rctmgl.components.styles.sources.RCTSource) HashMap(java.util.HashMap) ScreenCoordinate(com.mapbox.maps.ScreenCoordinate) ArrayList(java.util.ArrayList) QueryFeaturesCallback(com.mapbox.maps.QueryFeaturesCallback) Feature(com.mapbox.geojson.Feature) QueriedFeature(com.mapbox.maps.QueriedFeature) AbstractMapFeature(com.mapbox.rctmgl.components.AbstractMapFeature) RenderedQueryOptions(com.mapbox.maps.RenderedQueryOptions) QueriedFeature(com.mapbox.maps.QueriedFeature) ScreenBox(com.mapbox.maps.ScreenBox) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList)

Aggregations

QueriedFeature (com.mapbox.maps.QueriedFeature)3 QueryFeaturesCallback (com.mapbox.maps.QueryFeaturesCallback)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 WritableMap (com.facebook.react.bridge.WritableMap)2 WritableNativeMap (com.facebook.react.bridge.WritableNativeMap)2 SourceQueryOptions (com.mapbox.maps.SourceQueryOptions)2 AndroidCallbackEvent (com.mapbox.rctmgl.events.AndroidCallbackEvent)2 LinkedList (java.util.LinkedList)2 NonNull (androidx.annotation.NonNull)1 Expected (com.mapbox.bindgen.Expected)1 Feature (com.mapbox.geojson.Feature)1 QueryFeatureExtensionCallback (com.mapbox.maps.QueryFeatureExtensionCallback)1 RenderedQueryOptions (com.mapbox.maps.RenderedQueryOptions)1 ScreenBox (com.mapbox.maps.ScreenBox)1 ScreenCoordinate (com.mapbox.maps.ScreenCoordinate)1 AbstractMapFeature (com.mapbox.rctmgl.components.AbstractMapFeature)1 RCTSource (com.mapbox.rctmgl.components.styles.sources.RCTSource)1 HashMap (java.util.HashMap)1