Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Cannot introspect source or layer obtained from style #6584

Description

@1ec5

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:

NSURL *url = [NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7"];
NSAssert([[mapView.style layerWithIdentifier:@"country-label-md"].source.URL isEqual:url]);

To fix this issue, we’ll have to expose more members of mbgl::style::Layer and mbgl::style::Source that up to now have been stashed away in private Impl classes. For instance, we’ll need an mbgl::style::VectorSource::getTileset() that returns the existing mbgl::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

Activity

  1. added
    iOSMapbox Maps SDK for iOS
    macOSMapbox Maps SDK for macOS
    AndroidMapbox Maps SDK for Android
    CoreThe cross-platform C++ core, aka mbgl
    on Oct 5, 2016
  2. jfirebaugh commented on Oct 5, 2016

    @jfirebaugh
    Contributor

    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.
  3. boundsj commented on Oct 5, 2016

    @boundsj
    Contributor

    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.

  4. ivovandongen commented on Oct 6, 2016

    @ivovandongen
    Contributor

    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.

  5. jfirebaugh commented on Oct 6, 2016

    @jfirebaugh
    Contributor

    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 single VectorSource::getTileset().

  6. added this to the ios-v3.4.0 milestone on Oct 6, 2016
  7. modified the milestones: , ios-v3.4.0 on Oct 30, 2016
  8. 1ec5 commented on Dec 11, 2016

    @1ec5
    ContributorAuthor

    The main thing developers would want to extract from a GeoJSON source would be the (untiled) GeoJSON it contains: #7376.

  9. modified the milestones: ios-v3.5.0, ios-v3.4.1 on Jan 24, 2017
  10. removed this from the ios-v3.5.0 milestone on Mar 9, 2017
  11. stale commented on Nov 26, 2018

    @stale

    This issue has been automatically detected as stale because it has not had recent activity and will be archived. Thank you for your contributions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

AndroidMapbox Maps SDK for AndroidCoreThe cross-platform C++ core, aka mbglarchivedArchived because of inactivitybugiOSMapbox Maps SDK for iOSmacOSMapbox Maps SDK for macOSruntime styling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions