Implementing Protocol for Working with Apple Map Data Source

Description: class implementing a protocol for working with Apple map data source.

The MAMapDataBubbleViewController.h File

#import <Foundation/Foundation.h>
#import <MobileAnalysis/MAMapDataBubbleViewController.h>
#import "MapDataViewDatasource.h"
#import <MobileAnalysis/MobileClientMapDataSource.h>
@interface CustomMapDataBubbleViewController : MAMapDataBubbleViewController {
    MapDataViewDatasource *m_mapDataSource; // Map data source
    NSNumber *m_metricDimension; // Metric dimension
    NSNumber *m_metric; // Data source metric
    NSNumber *m_metricNoPivot; // Metric, to which data table does not correspond
}
// Returns name of the metric, to which data table does not correspond
-(NSString *)metricNoPivotName;
@end

The MAMapDataBubbleViewController.mm File

#import "CustomMapDataBubbleViewController.h"
#import <MobileAnalysis/MapShape.h>
@implementation CustomMapDataBubbleViewController
-(id)init {
    m_mapDataSource = [self mapDatasource];
    return self;
}
// Refreshes source data
- (void)refresh {
    MapDataViewDatasource *dataSource = [self mapDatasource];
    [dataSource updateData];
    NSLog(@"Data is refreshed");
}
// Sets metric, to which data table does not correspond
- (void)setMetricNoPivot:(NSNumber *)metric {
    m_metricNoPivot = metric;
}
// Returns name of the metric, to which data table does not correspond
-(NSString *)metricNoPivotName {
    [self setMetric: m_metricNoPivot];
    NSString *metricName = [self metricsName];
    return metricName;
}
// Sets data source metric key
-(void)setMetric:(NSNumber *)metric {
    m_metric = metric;
}
// Returns data source metric key
-(NSNumber *) metric {
    return m_metric;
}
// Returns metric name
-(NSString *)metricsName {
    // Get data source metric dictionary
    NSDictionary *metrics = [self metrics];
    NSString *metricName = [metrics valueForKey: [[self metric] stringValue]];
    return metricName;
}
// Returns data source metric dictionary
-(NSDictionary *)metrics {
    NSDictionary *metrics;
    MapDataViewDatasource *dataSource = [self mapDatasource];
    NSArray *values = @[[dataSource colorMetricName],
    [dataSource sizeMetricName],
    [dataSource heightMetricName]];
    NSArray *keys = @[[NSString stringWithFormat: @"%lld", [dataSource colorMetricKey]],
    [NSString stringWithFormat: @"%lld", [dataSource sizeMetricKey]],
    [NSString stringWithFormat: @"%lld", [dataSource heightMetricKey]]];
    metrics = [NSDictionary dictionaryWithObjects:values forKeys: keys];
    return metrics;
}
// Returns metric dimension key
-(NSNumber *)metricDimension {
    return m_metricDimension;
}
// Sets metric dimension key
-(void)setMetricDimension:(NSNumber *)metricDimension {
    m_metricDimension = metricDimension;
}
// Returns dictionary of metric dimension keys
-(NSDictionary *)metricDimensions {
    MapDataViewDatasource *dataSource = [self mapDatasource];
    return [dataSource metricsDimensionsKeys];
}
// Returns array of bubble identifiers on map
- (MapShape *)shapeWithID:(NSString *)ID {
    // Create a map layer area
    MapShape *mapShape = [[MapShape new] autorelease];
    [mapShape setID: ID];
    [mapShape setBackground: [self brushWithID: ID]];
    return mapShape;
}
@end

See also:

Working with Apple Map Data Source