Operating system requirements: iOS 5.0 or later.
Mobile device: iPad.
This example describes some methods of working with map container. After starting the example the following operations are executed:
A map data source is created.
Map data source settings are loaded.
A container is created for simultaneous input of SVG map and Apple map.
An SVG map view controller is created.
The map in use is checked for compatibility with SVG map view controller.
It is determined whether a 3D map data source is used.
A map used by SVG map view controller is loaded.
SVG map view controller is set as a primary container view.
An Apple map data view controller is created.
A map used by Apple map data view controller is loaded.
An Apple map data view is set in container.
world.svg. Used map topobase.
Executing the example requires to place the following code instead of the executeExample method of the ViewController class (see the Displaying of Express Report section):
-(void)executeExample {
// Create a report delegate
EAReportDelegateImpl *delegate = [[[EAReportDelegateImpl alloc] initWithOlapReport:m_olapReport] autorelease];
// Create an Apple map
[self createBubbleMap: delegate];
}
// Creates an Apple map
-(void)createBubbleMap: (EAReportDelegateImpl *) delegate {
// Create an initialize Apple map data view controller
MAMapDataBubbleViewController *mapDataBubble= [[MAMapDataBubbleViewController alloc] initWithDatasource:(MapDataViewDatasource *)delegate.mapDatasource];
// Create a map container
MAMapDataViewContainerController *container = [MAMapDataViewContainerController new];
// Set Apple map delegate
mapDataBubble.delegate = container;
// Load Apple map topobase
[mapDataBubble setTopobaseWithData:delegate.mapBubbleTopobase];
// Set Apple map data view in container
container.bubbleViewController = mapDataBubble;
// Display report containing Apple map
[self showViewControllerInFullScreen: [container bubbleViewController]];
}
// Creates an SVG map
-(void)createSVGMap: (EAReportDelegateImpl *) delegate {
// Load file with map topobase
NSData *file = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"world.svg" ofType:nil]];
if (file != nil) {
// Create an SVG map view controller
MAMapData2DViewController *map2d = nil;
// Create a map controller
MAMapDataViewContainerController *container = [MAMapDataViewContainerController new];
// Check compatibility of loaded map
if ([MAMapData2DViewController topobaseIsSupported:file]) {
// Set for map data source whether 3D map data source is used
((MapDataViewDatasource *)delegate.mapDatasource).isFor3dMap = NO;
// Initialize map controller by means of data source
map2d= [[MAMapData2DViewController alloc] initWithDatasource:(MapDataViewDatasource *)delegate.mapDatasource];
// Load map topobase
[map2d setTopobaseWithData:file];
// Set map delegate
map2d.delegate = container;
// Set primary container view
container.mainViewController = map2d;
[self showViewControllerInFullScreen: [container mainViewController]];
}
} else {
NSLog(@"File with world.svg map topobase is not found");
}
}
It is also required to replace the code in the static example file MAExpressAnalysisReportViewControllerDelegateImpl.mm in the initWithOlapReport: method in the block:
if (self.isMapEnabled)
with the following code:
// Get report settings
SNDictionary mapOlapPlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(MAP_OLAP_KEY);
// Create a report
SPPLOlapReport mapOlapReport = NULL;
if (mapOlapPlist != NULL)
{
mapOlapReport = PPLOlapReport::olapReport(m_olapReport->descriptor(), mapOlapPlist);
}
// Create a pivot object for building data table
m_mapPivot = (mapOlapReport != NULL) ? PPLPivot::pivot(mapOlapReport) : PPLPivot::pivot(m_olapReport);
// Create a map data source
m_mapDatasource = [[MapDataViewDatasource alloc] initWithPivotTable: PPLPivotTable::pivotTable(m_mapPivot) withFullTopoSelection:YES];
// Get map data view settings
SNDictionary mapSettings = m_olapReport->mapSettings();
// Get map data sourec settings
SNDictionary mapDSSettings = m_olapReport->storageDictionary()->objectForKey<NDictionary>(MAP_DS_KEY);
// Get express report selection area settings
SNDictionary selectionSetings = m_olapReport->selectionDictionary();
// Load map data source settings
[m_mapDatasource loadSettings:mapSettings dataStorageSettings:mapDSSettings indicatorEmptySettings:selectionSetings];
After executing the example the mobile device screen displays Apple map:

Then replace the strings in the executeExample method of the ViewController class:
[self createBubbleMap: delegate];
with the following code:
[self createSVGMap: delegate];
After executing the updated example the mobile device screen displays a map built by means of SVG map:

See also: