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

Commit

Permalink
[ios, macos] Introduce MGLTileSet
Browse files Browse the repository at this point in the history
This reverts a previous change to vector / raster sources that
added initializers to those classes so they could take certain
tileset properties and create their own mbgl::Tileset objects.

Now, a new MGLTileSet class that wraps all available core Tileset
options can be created and passed into the sources. The sources
pass that tileset object along to core.
  • Loading branch information
boundsj committed Sep 14, 2016
1 parent 495e66a commit c0fb939
Show file tree
Hide file tree
Showing 10 changed files with 145 additions and 33 deletions.
9 changes: 5 additions & 4 deletions platform/darwin/src/MGLRasterSource.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
#import "MGLSource.h"
#import "MGLTypes.h"

@class MGLTileSet;

NS_ASSUME_NONNULL_BEGIN

@interface MGLRasterSource : MGLSource

@property (nonatomic, readonly, copy) NSURL *URL;
@property (nonatomic, readonly, assign) CGFloat tileSize;
@property (nonatomic, readonly, copy) NS_ARRAY_OF(NSString *) *tileURLTemplates;
@property (nonatomic, readonly) uint8_t minimumZoomLevel;
@property (nonatomic, readonly) uint8_t maximumZoomLevel;
@property (nonatomic, readonly, nullable) MGLTileSet *tileSet;

- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier URL:(NSURL *)url tileSize:(CGFloat)tileSize;

- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel;
- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileSize:(CGFloat)tileSize tileSet:(MGLTileSet *)tileSet;

@end

NS_ASSUME_NONNULL_END
16 changes: 5 additions & 11 deletions platform/darwin/src/MGLRasterSource.mm
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#import "MGLRasterSource.h"

#import "MGLSource_Private.h"
#import "MGLTileSet_Private.h"

#include <mbgl/style/sources/raster_source.hpp>

Expand All @@ -15,13 +16,12 @@ - (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier URL:(NSURL
return self;
}

- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel
- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileSize:(CGFloat)tileSize tileSet:(MGLTileSet *)tileSet;
{
if (self = [super initWithSourceIdentifier:sourceIdentifier])
{
_tileURLTemplates = tileURLTemplates;
_minimumZoomLevel = minimumZoomLevel;
_maximumZoomLevel = maximumZoomLevel;
_tileSize = tileSize;
_tileSet = tileSet;
}
return self;
}
Expand All @@ -38,13 +38,7 @@ - (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTem
}
else
{
mbgl::Tileset tileSource;
tileSource.zoomRange = mbgl::Range<uint8_t>(self.minimumZoomLevel, self.maximumZoomLevel);
for (NSString *tileURLTemplate in self.tileURLTemplates)
{
tileSource.tiles.push_back(tileURLTemplate.UTF8String);
}
source = std::make_unique<mbgl::style::RasterSource>(self.sourceIdentifier.UTF8String, tileSource, uint16_t(self.tileSize));
source = std::make_unique<mbgl::style::RasterSource>(self.sourceIdentifier.UTF8String, self.tileSet.mbglTileset, uint16_t(self.tileSize));

}

Expand Down
24 changes: 24 additions & 0 deletions platform/darwin/src/MGLTileSet.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#import <Foundation/Foundation.h>
#import "MGLTypes.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSUInteger, MGLTileSetScheme) {
MGLTileSetSchemeXYZ = 0,
MGLTileSetSchemeTMS
};

@interface MGLTileSet : NSObject

@property (nonatomic, copy) NS_ARRAY_OF(NSString *) *tileURLTemplates;
@property (nonatomic) NSUInteger minimumZoomLevel;
@property (nonatomic) NSUInteger maximumZoomLevel;
@property (nonatomic, copy) NSString *attribution;
@property (nonatomic) MGLTileSetScheme scheme;

- (instancetype)initWithTileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates;
- (instancetype)initWithTileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel;

@end

NS_ASSUME_NONNULL_END
72 changes: 72 additions & 0 deletions platform/darwin/src/MGLTileSet.mm
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#import "MGLTileSet.h"

#include <mbgl/util/tileset.hpp>

@implementation MGLTileSet
{
BOOL _minimumZoomLevelIsSet;
BOOL _maximumZoomLevelIsSet;
}

- (instancetype)initWithTileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates
{
if (self = [super init])
{
_tileURLTemplates = tileURLTemplates;
}
return self;
}

- (instancetype)initWithTileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel
{
if (self = [super init])
{
_tileURLTemplates = tileURLTemplates;
_minimumZoomLevel = minimumZoomLevel;
_minimumZoomLevelIsSet = YES;
_maximumZoomLevel = maximumZoomLevel;
_maximumZoomLevelIsSet = YES;
}
return self;
}

- (void)setMinimumZoomLevel:(NSUInteger)minimumZoomLevel
{
_minimumZoomLevel = minimumZoomLevel;
_minimumZoomLevelIsSet = YES;
}

- (void)setMaximumZoomLevel:(NSUInteger)maximumZoomLevel
{
_maximumZoomLevel = maximumZoomLevel;
_maximumZoomLevelIsSet = YES;
}

- (mbgl::Tileset)mbglTileset
{
mbgl::Tileset tileset;

for (NSString *tileURLTemplate in self.tileURLTemplates)
{
tileset.tiles.push_back(tileURLTemplate.UTF8String);
}

// set the minimum / maximum zoom range to the values specified by this class if they
// were set. otherwise, use the core objects default values
uint8_t minimumZoomLevel = _minimumZoomLevelIsSet ? self.minimumZoomLevel : tileset.zoomRange.min;
uint8_t maximumZoomLevel = _maximumZoomLevelIsSet ? self.maximumZoomLevel : tileset.zoomRange.max;
tileset.zoomRange = mbgl::Range<uint8_t>(minimumZoomLevel, maximumZoomLevel);

if (self.attribution)
{
tileset.attribution = self.attribution.UTF8String;
}

if (self.scheme == MGLTileSetSchemeTMS) {
tileset.scheme = mbgl::Tileset::Scheme::TMS;
}

return tileset;
}

@end
9 changes: 9 additions & 0 deletions platform/darwin/src/MGLTileSet_Private.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#import "MGLTileSet.h"

#include <mbgl/util/tileset.hpp>

@interface MGLTileSet (Private)

- (mbgl::Tileset)mbglTileset;

@end
8 changes: 3 additions & 5 deletions platform/darwin/src/MGLVectorSource.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#import "MGLSource.h"
#import "MGLTileSet.h"
#import "MGLTypes.h"

NS_ASSUME_NONNULL_BEGIN
Expand All @@ -12,10 +13,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface MGLVectorSource : MGLSource

@property (nonatomic, readonly, copy) NSURL *URL;

@property (nonatomic, readonly, copy) NS_ARRAY_OF(NSString *) *tileURLTemplates;
@property (nonatomic, readonly) uint8_t minimumZoomLevel;
@property (nonatomic, readonly) uint8_t maximumZoomLevel;
@property (nonatomic, readonly, nullable) MGLTileSet *tileSet;

/**
Initializes and returns a vector source from a remote url.
Expand All @@ -27,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier URL:(NSURL *)url;

- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel;
- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileSet:(MGLTileSet *)tileSet;

@end

Expand Down
15 changes: 4 additions & 11 deletions platform/darwin/src/MGLVectorSource.mm
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#import "MGLVectorSource.h"

#import "MGLSource_Private.h"
#import "MGLTileSet_Private.h"

#include <mbgl/style/sources/vector_source.hpp>

Expand All @@ -17,13 +18,11 @@ - (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier URL:(NSURL
return self;
}

- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTemplates:(NS_ARRAY_OF(NSString *) *)tileURLTemplates minimumZoomLevel:(NSUInteger)minimumZoomLevel maximumZoomLevel:(NSUInteger)maximumZoomLevel
- (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileSet:(MGLTileSet *)tileSet
{
if (self = [super initWithSourceIdentifier:sourceIdentifier])
{
_tileURLTemplates = tileURLTemplates;
_minimumZoomLevel = minimumZoomLevel;
_maximumZoomLevel = maximumZoomLevel;
_tileSet = tileSet;
}
return self;
}
Expand All @@ -38,13 +37,7 @@ - (instancetype)initWithSourceIdentifier:(NSString *)sourceIdentifier tileURLTem
}
else
{
mbgl::Tileset tileSource;
tileSource.zoomRange = mbgl::Range<uint8_t>(self.minimumZoomLevel, self.maximumZoomLevel);
for (NSString *tileURLTemplate in self.tileURLTemplates)
{
tileSource.tiles.push_back(tileURLTemplate.UTF8String);
}
source = std::make_unique<mbgl::style::VectorSource>(self.sourceIdentifier.UTF8String, tileSource);
source = std::make_unique<mbgl::style::VectorSource>(self.sourceIdentifier.UTF8String, self.tileSet.mbglTileset);
}

return std::move(source);
Expand Down
4 changes: 3 additions & 1 deletion platform/ios/app/MBXViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -911,7 +911,9 @@ - (void)mapView:(MGLMapView *)mapView tapOnCalloutForAnnotation:(id <MGLAnnotati
- (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView
{
#warning debug code
MGLVectorSource *vectorSource = [[MGLVectorSource alloc] initWithSourceIdentifier:@"mapzen" tileURLTemplates:@[@"https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-LM25tq4"] minimumZoomLevel:0 maximumZoomLevel:18];

MGLTileSet *tileSet = [[MGLTileSet alloc] initWithTileURLTemplates:@[@"https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-LM25tq4"]];
MGLVectorSource *vectorSource = [[MGLVectorSource alloc] initWithSourceIdentifier:@"mapzen" tileSet:tileSet];
[self.mapView.style addSource:vectorSource];

MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithLayerIdentifier:@"filllayer" source:vectorSource sourceLayer:@"buildings"];
Expand Down
20 changes: 19 additions & 1 deletion platform/ios/ios.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,12 @@
4018B1CA1CDC288E00F666AF /* MGLAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; };
4018B1CB1CDC288E00F666AF /* MGLAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; };
404326891D5B9B27007111BD /* MGLAnnotationContainerView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */; };
404C26E21D89B877000AA13D /* MGLTileSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E01D89B877000AA13D /* MGLTileSet.h */; settings = {ATTRIBUTES = (Public, ); }; };
404C26E31D89B877000AA13D /* MGLTileSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E01D89B877000AA13D /* MGLTileSet.h */; settings = {ATTRIBUTES = (Public, ); }; };
404C26E41D89B877000AA13D /* MGLTileSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = 404C26E11D89B877000AA13D /* MGLTileSet.mm */; };
404C26E51D89B877000AA13D /* MGLTileSet.mm in Sources */ = {isa = PBXBuildFile; fileRef = 404C26E11D89B877000AA13D /* MGLTileSet.mm */; };
404C26E71D89C55D000AA13D /* MGLTileSet_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E61D89C515000AA13D /* MGLTileSet_Private.h */; };
404C26E81D89C55D000AA13D /* MGLTileSet_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E61D89C515000AA13D /* MGLTileSet_Private.h */; };
40CFA6511D7875BB008103BD /* MGLGeoJSONSourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 40CFA6501D787579008103BD /* MGLGeoJSONSourceTests.mm */; };
40EDA1C01CFE0E0200D9EA68 /* MGLAnnotationContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */; };
40EDA1C11CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */; };
Expand Down Expand Up @@ -567,6 +573,9 @@
4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationView.h; sourceTree = "<group>"; };
402E9DE01CD2C76200FD4519 /* Mapbox.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Mapbox.playground; sourceTree = "<group>"; };
404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationContainerView_Private.h; sourceTree = "<group>"; };
404C26E01D89B877000AA13D /* MGLTileSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSet.h; sourceTree = "<group>"; };
404C26E11D89B877000AA13D /* MGLTileSet.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSet.mm; sourceTree = "<group>"; };
404C26E61D89C515000AA13D /* MGLTileSet_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLTileSet_Private.h; sourceTree = "<group>"; };
40CFA6501D787579008103BD /* MGLGeoJSONSourceTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLGeoJSONSourceTests.mm; sourceTree = "<group>"; };
40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationContainerView.h; sourceTree = "<group>"; };
40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationContainerView.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -810,6 +819,9 @@
3566C7651D4A77BA008152BC /* MGLGeoJSONSource.mm */,
3566C76A1D4A8DFA008152BC /* MGLRasterSource.h */,
3566C76B1D4A8DFA008152BC /* MGLRasterSource.mm */,
404C26E01D89B877000AA13D /* MGLTileSet.h */,
404C26E61D89C515000AA13D /* MGLTileSet_Private.h */,
404C26E11D89B877000AA13D /* MGLTileSet.mm */,
);
name = Sources;
sourceTree = "<group>";
Expand Down Expand Up @@ -882,7 +894,7 @@
children = (
3575798F1D513EF1000B822E /* Layers */,
35B8E08B1D6C8B5100E768D2 /* MGLFilterTests.mm */,
40CFA64E1D78754A008103BD /* Sources */,
40CFA64E1D78754A008103BD /* Sources */,
);
name = Styling;
sourceTree = "<group>";
Expand Down Expand Up @@ -1450,11 +1462,13 @@
350098CA1D482D9C004B2AF0 /* NSArray+MGLStyleAttributeAdditions.h in Headers */,
350098AF1D47E6F4004B2AF0 /* UIColor+MGLStyleAttributeAdditions.h in Headers */,
3510FFF91D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */,
404C26E71D89C55D000AA13D /* MGLTileSet_Private.h in Headers */,
DA88485C1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h in Headers */,
DA8848871CBB033F00AB86E3 /* Fabric.h in Headers */,
350098D81D4830D5004B2AF0 /* NSString+MGLStyleAttributeAdditions_Private.h in Headers */,
35305D4A1D22AA6A0007D005 /* NSData+MGLAdditions.h in Headers */,
359F57461D2FDDA6005217F1 /* MGLUserLocationAnnotationView_Private.h in Headers */,
404C26E21D89B877000AA13D /* MGLTileSet.h in Headers */,
DA8848841CBB033F00AB86E3 /* FABAttributes.h in Headers */,
DA8847FD1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h in Headers */,
DA88482F1CBAFA6200AB86E3 /* NSProcessInfo+MGLAdditions.h in Headers */,
Expand Down Expand Up @@ -1486,6 +1500,7 @@
3566C7671D4A77BA008152BC /* MGLGeoJSONSource.h in Headers */,
DA35A29F1CC9E94C00E826B2 /* MGLCoordinateFormatter.h in Headers */,
DABFB8711CBE9A0F00D62B32 /* MGLMapView+MGLCustomStyleLayerAdditions.h in Headers */,
404C26E31D89B877000AA13D /* MGLTileSet.h in Headers */,
DABFB8611CBE99E500D62B32 /* MGLMultiPoint.h in Headers */,
3510FFF11D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h in Headers */,
35E0CFE71D3E501500188327 /* MGLStyle_Private.h in Headers */,
Expand All @@ -1512,6 +1527,7 @@
350098B01D47E6F4004B2AF0 /* UIColor+MGLStyleAttributeAdditions.h in Headers */,
DABFB8671CBE99E500D62B32 /* MGLPolygon.h in Headers */,
350098C71D48288B004B2AF0 /* NSNumber+MGLStyleAttributeAdditions_Private.h in Headers */,
404C26E81D89C55D000AA13D /* MGLTileSet_Private.h in Headers */,
3593E5221D529C29006D9365 /* MGLStyleAttribute.h in Headers */,
DABFB8651CBE99E500D62B32 /* MGLOverlay.h in Headers */,
35E79F211D41266300957B9E /* MGLStyleLayer_Private.h in Headers */,
Expand Down Expand Up @@ -1919,6 +1935,7 @@
DA88481F1CBAFA6200AB86E3 /* MGLMultiPoint.mm in Sources */,
DA88482B1CBAFA6200AB86E3 /* MGLTypes.m in Sources */,
4018B1C71CDC287F00F666AF /* MGLAnnotationView.mm in Sources */,
404C26E41D89B877000AA13D /* MGLTileSet.mm in Sources */,
DA88481D1CBAFA6200AB86E3 /* MGLMapCamera.mm in Sources */,
DA8848261CBAFA6200AB86E3 /* MGLPolygon.mm in Sources */,
35B82BFA1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */,
Expand Down Expand Up @@ -1987,6 +2004,7 @@
DAA4E4301CBB730400178DFB /* MGLLocationManager.m in Sources */,
DAA4E4321CBB730400178DFB /* MGLMapView.mm in Sources */,
DAA4E41E1CBB730400178DFB /* MGLMapCamera.mm in Sources */,
404C26E51D89B877000AA13D /* MGLTileSet.mm in Sources */,
4018B1C81CDC287F00F666AF /* MGLAnnotationView.mm in Sources */,
DAA4E4341CBB730400178DFB /* MGLFaux3DUserLocationAnnotationView.m in Sources */,
35B82BFB1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */,
Expand Down
1 change: 1 addition & 0 deletions platform/ios/src/Mapbox.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,4 @@ FOUNDATION_EXPORT const unsigned char MapboxVersionString[];
#import "NSValue+MGLStyleAttributeAdditions.h"
#import "NSString+MGLStyleAttributeAdditions.h"
#import "NSArray+MGLStyleAttributeAdditions.h"
#import "MGLTileSet.h"

0 comments on commit c0fb939

Please sign in to comment.