Работа с контейнером карт

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описываются некоторые приемы работы с контейнером карт. После запуска примера выполняются следующие операции:

Необходимые файлы

Исходный код

Для выполнения примера необходимо взамен метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») разместить следующий код:

-(void)executeExample {
    // Создаём делегат отчета
    EAReportDelegateImpl *delegate = [[[EAReportDelegateImpl alloc] initWithOlapReport:m_olapReport] autorelease];
    // Создаём карту Apple
    [self createBubbleMap: delegate];
}
// Создаёт карту Apple
-(void)createBubbleMap: (EAReportDelegateImpl *) delegate {
    // Создаем и инициализируем контроллер представления данных в виде карты Apple
    MAMapDataBubbleViewController *mapDataBubble= [[MAMapDataBubbleViewController alloc] initWithDatasource:(MapDataViewDatasource *)delegate.mapDatasource];
    // Создаем контейнер карт
    MAMapDataViewContainerController *container = [MAMapDataViewContainerController new];
    // Задаем делегат карты Apple
    mapDataBubble.delegate = container;
    // Загружаем топооснову карты Apple
    [mapDataBubble setTopobaseWithData:delegate.mapBubbleTopobase];
    // Задаем представление данных в виде карты Apple в контейнере
    container.bubbleViewController = mapDataBubble;
    // Отображаем отчет, содержащий карту Apple
    [self showViewControllerInFullScreen: [container bubbleViewController]];
}
// Создаёт SVG-карту
-(void)createSVGMap: (EAReportDelegateImpl *) delegate {
    // Загружаем файл с топоосновой карты
    NSData *file = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"world.svg" ofType:nil]];
    if (file != nil) {
        // Создаем контроллер представления SVG-карты
        MAMapData2DViewController *map2d = nil;
        // Создаем контейнер карт
        MAMapDataViewContainerController *container = [MAMapDataViewContainerController new];
        // Проверяем совместимость загруженной карты
        if ([MAMapData2DViewController topobaseIsSupported:file]) {
            // Устанавливаем в источнике данных карты признак того, используется ли источник данных для трехмерной карты
            ((MapDataViewDatasource *)delegate.mapDatasource).isFor3dMap = NO;
            // Инициализируем контроллер карты с помощью источника данных
            map2d= [[MAMapData2DViewController alloc] initWithDatasource:(MapDataViewDatasource *)delegate.mapDatasource];
            // Загружаем топооснову карты
            [map2d setTopobaseWithData:file];
            // Задаем делегат карты
            map2d.delegate = container;
            // Задаем первичное представление контейнера
            container.mainViewController = map2d;
            [self showViewControllerInFullScreen: [container mainViewController]];
        }
        } else {
        NSLog(@"Файл с топоосновой карты world.svg не найден");
    }
}

Также необходимо заменить код в файле статичного примера MAExpressAnalysisReportViewControllerDelegateImpl.mm в методе initWithOlapReport: в блоке:

if (self.isMapEnabled)

на следующий код:

// Получаем настройки отчета
SNDictionary mapOlapPlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(MAP_OLAP_KEY);
// Создаем отчет
SPPLOlapReport mapOlapReport = NULL;
if (mapOlapPlist != NULL)
{
    mapOlapReport = PPLOlapReport::olapReport(m_olapReport->descriptor(), mapOlapPlist);
}
// Создаем объект-основу для построения таблицы данных
m_mapPivot = (mapOlapReport != NULL) ? PPLPivot::pivot(mapOlapReport) : PPLPivot::pivot(m_olapReport);
// Создаем источник данных карты
m_mapDatasource = [[MapDataViewDatasource alloc] initWithPivotTable: PPLPivotTable::pivotTable(m_mapPivot) withFullTopoSelection:YES];
// Получаем настройки представления данных в виде карты
SNDictionary mapSettings = m_olapReport->mapSettings();
// Получаем настройки источника данных карты
SNDictionary mapDSSettings = m_olapReport->storageDictionary()->objectForKey<NDictionary>(MAP_DS_KEY);
// Получаем настройки области выделения в экспресс-отчете
SNDictionary selectionSetings = m_olapReport->selectionDictionary();
// Загружаем настройки источника данных карты
[m_mapDatasource loadSettings:mapSettings dataStorageSettings:mapDSSettings indicatorEmptySettings:selectionSetings];

В результате выполнения примера на экране мобильного устройства будет отображена карта Apple:

Далее в методе executeExample  класса ViewController заменим строки:

[self createBubbleMap: delegate];

 на следующий код:

[self createSVGMap: delegate];

В результате выполнения обновленного примера на экране мобильного устройства будет отображена карта, построенная с помощью SVG-карты:

См. также:

Примеры использования компонентов