Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setFilter method for GeoJSONSource #10722

Open
jaericson opened this issue May 27, 2021 · 9 comments · May be fixed by #13023
Open

setFilter method for GeoJSONSource #10722

jaericson opened this issue May 27, 2021 · 9 comments · May be fixed by #13023

Comments

@jaericson
Copy link

Motivation

You can cluster a GeoJSONSource, but it's difficult to filter out source data because the layer filter expression applies to the clustered features. The GeoJSONSource has a filter property, but it can only be specified on source initialization.

To paint an illustrative example, let's say we have 50K features with a date property and as a user interacts with our app, we allow them to filter the clustered map to just show features in a certain date range. If the 50K features weren't clustered, we could just apply a filter to each layer we wanted to filter. But with the 50K features clustered, we either need to filter the source data ourselves and use setData or we need to remove the source and add it back with a filter applied to it. The former requires source data regeneration on our end, and the latter results in a flash as the map removes all features from the old source and adds all features from the new source.

Thanks for your consideration, and also open to alternative ideas! ❤️

Design Alternatives

Would it be possible to add a setFilter method to a GeoJSONSource to allow for this workflow?

Design

Currently, it looks like the setData workflow in a geojson_source will kick off a loadData, which checks to see if there is a filter, and if so, does a data.features.filter. Since this setData workflow looks at the filter, it seems like setFilter could potentially be a subset of this workflow.

Mock-Up

Concepts

Implementation

@mourner
Copy link
Member

mourner commented May 27, 2021

Thanks for the issue! It totally makes sense to add a setFilter method. I didn't add it in #9864 initially, thinking that removing/adding the source would be a good workaround, but layer flashing is indeed an issue.

@jaericson
Copy link
Author

Thanks so much, @mourner!!

@jaericson
Copy link
Author

👋 @mourner, just wondering if you had a general timeline for when this might be implemented. Thank you! 🙏

@yeegor
Copy link

yeegor commented Jun 27, 2022

@mourner as another year went by without support for filtering clustered layers, is this still considered as an idea worth implementing? Filtering functionality in Mapbox feels very incomplete due to this.

@dustinfarris
Copy link

This feature would be helpful

@ananmaysharan
Copy link

This would be super helpful!

@Ruschio
Copy link

Ruschio commented Dec 26, 2023

@jaericson I worked a bit with Mapbox and I made this pull request adding a new method setFilter to allow filter updates on GeoJSON source, without invoking setData function to pass pre-filtered geojson data.

@mourner I don't know if this is sufficient and well done, but it does the job.

@OAburub
Copy link

OAburub commented Aug 29, 2024

Any progress on this? it's been.. a while

@tempranova
Copy link

Would really like this feature, no updates?

@stepankuzmin stepankuzmin linked a pull request Sep 18, 2024 that will close this issue
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants