Repository navigation
Cannot introspect source or layer obtained from style #6584
Description
Activity
- addediOSMapbox Maps SDK for iOSMapbox Maps SDK for iOSmacOSMapbox Maps SDK for macOSMapbox Maps SDK for macOSAndroidMapbox Maps SDK for AndroidMapbox Maps SDK for AndroidCoreThe cross-platform C++ core, aka mbglThe cross-platform C++ core, aka mbgl
on Oct 5, 2016 I’m sure these members were hidden for good reason.
Not really, there's just never been a requirement to expose accessors for them before.
API design considerations:
- I'd prefer not to expose a
Tileset/ TileJSON concept in public APIs. I think these concepts are on their way out, and sources will eventually just have inline properties for their URL templates, zoom range, etc. So those properties are best exposed directly on the source object, without an intermediate "Tileset" domain object. - In the current implementation, the tileset properties might not be available during the initial load, while the TileJSON is being requested. This wrinkle will go away if we inline TileJSON properties, but for now the API needs to take it into account.
- I'd prefer not to expose a
I'd prefer not to expose a Tileset / TileJSON concept in public APIs.
Noting that this concept was recently added to the iOS SDK in #6316 to support the initialization of sources with tile templates.
Noting that this concept was recently added to the iOS SDK in #6316 to support the initialization of sources with tile templates.
Also has been a part of the Android API for a bit now. If we want to change this, we need to do this either before the upcoming 4.2 release or wait until 5.0.
It's probably fine used as a package of parameters you can pass when creating a source. I'm saying, write
VectorSource::getTileURLTemplates(),VectorSource::getZoomRange(), etc., not a singleVectorSource::getTileset().Reacted by Jesse Bounds and Ivo van DongenThe main thing developers would want to extract from a GeoJSON source would be the (untiled) GeoJSON it contains: #7376.
This issue has been automatically detected as stale because it has not had recent activity and will be archived. Thank you for your contributions.
A source or style layer obtained from a map’s current style has its identifier set but has no other properties set. Therefore, there’s no way to obtain the source associated with a particular layer that comes with the Mapbox Streets style, nor is there a way to get the tile sets associated with that source.
I’m filing this issue in the course of fixing #6406, based on a close reading of the iOS/macOS and Android code base. To reproduce this issue on iOS or macOS, try the following code with the Mapbox Streets v9 style:
To fix this issue, we’ll have to expose more members of
mbgl::style::Layerandmbgl::style::Sourcethat up to now have been stashed away in privateImplclasses. For instance, we’ll need anmbgl::style::VectorSource::getTileset()that returns the existingmbgl::style::TileSourceImpl::tileset. I’m sure these members were hidden for good reason. To mitigate any questions about the expected lifetime of the returned object, it may be necessary to fix #6254 in the course of fixing this bug. (#6254 probably applies to the Android SDK as well.)/cc @jfirebaugh @ivovandongen @incanus @frederoni @boundsj