Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с контейнером карт. После запуска примера выполняются следующие операции:
создается источник данных карты;
загружаются настройки источника данных карты;
создается контейнер для одновременного вывода SVG-карты и карты Apple;
создается контроллер представления SVG-карты;
проверяется совместимость используемой карты с контроллером представления SVG-карты;
устанавливается признак того, используется ли источник данных для трехмерной карты;
загружается карта, используемая контроллером представления SVG-карты;
контроллер представления SVG-карты устанавливается в качестве первичного представления контейнера;
создается контроллер представления данных в виде карты Apple;
загружается карта, используемая контроллером представления карты Apple;
задается представление данных в виде карты Apple в контейнере.
world.svg. Используемая топооснова карты.
Для выполнения примера необходимо взамен метода 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-карты:

См. также: