Параметры карты

Описание: карта строится по полученным данным, содержит две стрелки и три всплывающие подсказки.

Файл «ViewController.h»

#import <MapCharting/MapChart.h>
#import <MapCharting/MapChart2D.h>
#import "MapDataSource.h"
@interface ViewController : UIViewController<MapChartDelegate>{
    MapChart2D *m_view; // Двумерная карта
    MapDataSource *datasource; // Источник данных
}
@end

Файл «ViewController.m»

#import "ViewController.h"
#import <MapCharting/MapTopobase.h>
#import <MapCharting/MapAreaVisual.h>
#import "SolidColorBrush.h"
#import "DataDependency.h"
#import <MapCharting/MapTooltip.h>
#import <MapCharting/MapLabel.h>
#import <MapCharting/MapLegend.h>
#import <MapCharting/MapShape.h>
#import "UIColor+transition.h"
#import <MapCharting/MapLabel.h>
#import <MapCharting/MapChartSign.h>
#import <MapCharting/MapArrow.h>
#import <MapCharting/MapFilledArrow.h>
#import <MapCharting/MapBarVisual.h>
#import <MapCharting/MapPieVisual.h>
#import "UIColor+hex.h"
@implementation ViewController
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Загружаем данные из источника
    datasource = [[MapDataSource alloc]initWithFileName:@"data.txt"];
    // Определяем минимальное и максимальное значения данных
    [datasource prepare];
    // Создаём карту на основе загруженных данных
    [self dataSourceFinishedLoadData];
}
// Создаёт карту на основе загруженных данных
- (void)dataSourceFinishedLoadData
{
    // Создаём двумерную карту
    m_view = [[MapChart2D alloc] init];
    // Загружаем файл с топоосновой
    NSData *file = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"world.svg" ofType:nil]];
    // Создаём и устанавливаем объект для работы с топоосновой карты
    MapTopobase *topobase = [[MapTopobase alloc] initWithData:file];
    [m_view setTopobase:topobase];
    // Устанавливаем объект, содержащий методы для работы с картой
    [m_view setDelegate:  self];
    // Определяем аффинное преобразование, применяемое ко всем областям карты
    [[m_view topobase] setTransform: CGAffineTransformIdentity];
    
    // Создаём объект для работы с картографическим показателем
    MapAreaVisual *visual = [[MapAreaVisual alloc] init];
    // Устанавливаем источник данных
    [visual setDataSource: datasource];
    /* Устанавливаем признак того, что параметры заливки фона областей карты
    зависят от источника данных */
    [[visual background] setIsDependent:YES];
    
    // Создаём объект для работы со слоем карты
    MapLayer *layer = [[m_view topobase] rootLayer];
    // Создаём всплывающую подсказку для слоя
    layer.tooltip = [MapTooltip new];
    
    // Задаём цвета для заливки фона областей слоя карты
    NSArray *colors = [NSArray arrayWithObjects:@"ff462c", @"ebaf36", @"ffd900", @"b1ca40", @"6a8535", nil];
    // Определяем минимальное значение карты
    double value = [datasource minValue];
    // Определяем шаг для шкалы карты
    double step = (datasource.maxValue - datasource.minValue) / [colors count];
    // Определяем соответствие между интервалами шкалы карты и цветами заливки фона областей слоя
    ValueScale *scale = [[ValueScale new] autorelease];
    for (int i = 1; i <[colors count]; i++) {
        value += step;
        [scale.value addObject:[NSNumber numberWithDouble:value]];
        // Определяем цвета для значения «меньше»
        UIColor *lessColor = [UIColor colorWithHex:[colors objectAtIndex:(i - 1)]];
        [scale.less addObject:[SolidColorBrush solidColorBrushWithColor:lessColor]];
        // Определяем цвета для значения «равно» или «больше»
        UIColor *equalColor = [UIColor colorWithHex:[colors objectAtIndex:(i)]];
        [scale.equal addObject:[SolidColorBrush solidColorBrushWithColor:equalColor]];
        [scale.greater addObject:[SolidColorBrush solidColorBrushWithColor:equalColor]];
    }
    // Устанавливаем шкалу карты
    [[visual background] setScale:scale];
    
    // Устанавливаем кисть для заливки фона карты
    [m_view setBackground:[SolidColorBrush solidColorBrushWithColor:[UIColor whiteColor]]];
    // Устанавливаем цвет заголовка карты
    m_view.caption.textColor = [UIColor blackColor];
    
    // Устанавливаем текст подписи для областей слоя карты, для которых отсутствуют данные
    [m_view setNoDataText: NSLocalizedString(@"NO_DATA", nil)];
    // Создаём кисть для заливки областей слоя карты с отсутствующими данными
    SolidColorBrush *brush = [[[SolidColorBrush alloc] init] autorelease];
    // Установим прозрачность кисти
    [brush setOpacity: 0.2];
    // Установим цвет кисти
    brush.color = [UIColor grayColor];
    // Установим данную кисть
    [[[visual background] scale] setNoData: brush];
    
    // Используем направление письма слева направо
    [m_view setUsingRightToLeft: NO];
    
    // Получаем легенду карты
    MapLegend *legend = [m_view legend];
    // Скрываем легенду карты
    [legend setVisibility:NO];
    
    // Получаем временную шкалу
    MapTimeAxis *timeAxis = [m_view timeAxis];
    // Скрываем временную шкалу
    [timeAxis setHidden: YES];
    
    /* Добавляем объект для работы с картографическим показателем
    в массив визуальных элементов, соответствующих дочерним слоям и областям
    */
    [[layer visuals] addObject: visual];
    // Добавляем слой карты в массив отображаемых слоёв
    [[m_view layers] addObject:layer];
    [self setView: m_view];
    
    // Устанавливаем признак того, что значки отображаются
    [m_view setShowSigns: YES];
    // Создаём изображение
    UIImage *img = [UIImage imageNamed: @"sign.gif"];
    // Создаём значок на карте с использованием изображения
    MapChartSign *mapSign = [[MapChartSign alloc] initWithImage:img];
    // Указываем область слоя карты с идентификатором
    [mapSign setShape:@"RU"];
    // Задаём смещение значка
    [mapSign setPoint: CGPointMake(0.5, 0.7)];
    // Устанавливаем массив значков на карте
    [m_view setSigns: [[NSArray alloc] initWithObjects:mapSign, nil]];
    
    // Создаём подписи для областей слоя карты
    MapLabel *label = [MapLabel new];
    // Устанавливаем признак отображения подписей
    [label setVisibility: YES];
    [label setFont: [UIFont fontWithName:@"Arial" size:16]];
    // Наименование региона будет устанавливаться автоматически
    [label setText: @""];
    [label setMaxWidth: 150.0];
    [label setMinWidth: 100.0];
    [label setTextColor: [UIColor blackColor]];
    [label setTextWrapping: TextWrappingNoWrap];
    // Отображаем для указанных областей слоя карты границу и подписи
    NSArray *countries = [NSArray arrayWithObjects:@"RU", @"AU", @"US", nil];
    for (NSString *Id in countries) {
        MapShape *shape = [layer shapeWithId:Id];
        [shape setStrokeColor: [UIColor colorWithHex:@"#ffa604"]];
        [shape setStrokeThickness: 2.0];
        [shape setLabel: label];
    }
    // Выполняем пользовательский пример
    [self executeExample];
}
// Выполняет пользовательский пример, размещённый в теле данного метода
-(void) executeExample {
    
};
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // Устанавливаем новые размеры компонента
    struct CGRect frame;
    frame = CGRectMake(0, 0, 375, 470);
    [m_view setFrame:frame];
    // Устанавливаем рамку серого цвета
    [[m_view layer] setBorderColor: [[UIColor colorWithRed:0.75 green:0.75 blue:0.75 alpha:1] CGColor]];
    [[m_view layer] setBorderWidth: 1.0f];
}
// Вызывается после касания области слоя карты
- (void) mapChart:(MapChart2D *)mapChart touchDownInShape:(MapShape *)shape
{
    
}
- (void)mapChartDidAppear:(MapChart *)mapChart {
    
}
@end

См. также:

Значки и подписи на карте