Working with Map Data Source

Operating system requirements: iOS 5.0 or later.

Mobile device: iPad.

Description

This example describes some methods of working with map data source. After starting the example the following operations are executed:

Source Code

Executing the example requires to place the following code in the body of the executeExample method of the ViewController class (see the Displaying of Express Report section):

// Select map as the current view
[m_controller setDataViewControllerWithIndex: 2];
// Get express report delegate
EAReportDelegateImpl *delegate = [m_controller delegate];
// Get map data source
MapDataViewDatasource *mapDatasource = [delegate mapDatasource];
// Get array of timestamp titles of map data source
NSArray *timeAxisTitles = [mapDatasource timeAxisTitles];
// Display timestamp titles to the development environment console
NSLog(@"Timestamp titles:");
for(int i = 0; i < [timeAxisTitles count]; i++) NSLog(@"%@", [timeAxisTitles objectAtIndex:i]);
// Get color metric name
NSString *colorMetricName = [mapDatasource colorMetricName];
// Get color metric key
int colorMetricKey = [mapDatasource colorMetricKey];
// Get height metric name
NSString *heightMetricName = [mapDatasource heightMetricName];
// Get height metric key
int heightMetricKey = [mapDatasource heightMetricKey];
// Get bubble size metric name
NSString *sizeMetricName = [mapDatasource sizeMetricName];
// Get bubble size metric size
int sizeMetricKey = [mapDatasource sizeMetricKey];
// Display obtained information in the development environment console
NSLog(@"Color metric: %@; key: %d", colorMetricName, colorMetricKey);
NSLog(@"Height metric: %@; key: %d", heightMetricName, heightMetricKey);
NSLog(@"Bubble size metric: %@; key: %d", sizeMetricName, sizeMetricKey);
// Get dictionary with map data source settings
SNDictionary dump = [mapDatasource dumpSettings];
// Display map data source settings dictionary keys in the development environment console
NSLog(@"Map data source settings dictionary keys:");
SNArray keys = dump->allKeys();
for(int i = 0; i < keys->count(); i++)
{
    SNString key = keys->objectAtIndex<NString>(i);
    NSLog(@"%@", key->nsString());
}
// Get array with data source dimensions from settings dictionary
SNDictionary settingsForMetricsFromDump = dump->objectForKey<NDictionary>(NStr("SETTINGSFORMETRICS"));
// Get metric dimension identifier from array
SNString metricsDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("METRICS_KEY"));
// Get observation object dimension identifier from array
SNString topoDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("OBSERVATION_KEY"));
// Get identifier of dimension used to build timeline from array
SNString calendarDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("TIMESCALE_KEY"));
// Display obtained identifiers in the development environment console
NSLog(@"Metric dimension identifier in map data source settings dictionary: %@", metricsDimensionIdFromDump->nsString());
NSLog(@"Observation object dimension identifier in kap data source settings dictionary: %@", topoDimensionIdFromDump->nsString());
NSLog(@"Identifier of dimension used to build timeline in map data source settings dictionary: %@", calendarDimensionIdFromDump->nsString());
// Check if selected color metric exists
if([mapDatasource hasColorData]) {
    int countOfValues = 0;
    // Get array of color data for specified identifier
    NSArray *colorArray = [mapDatasource colorSeriesWithID:@"RU"];
    // Get first value in array of color data
    NSNumber *value = [colorArray objectAtIndex:0];
    
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Get range of comparison values
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Get array of color data for all data series
    NSArray *colorValues = [mapDatasource colorValues];
    // Calculate number of array elements, which are in the obtained range
    for(int i = 0; i < [colorValues count]; i++)
    {
        NSNumber *currentValue = [colorValues objectAtIndex:i];
        if ([currentValue isEqual: [NSNull new]]) {
            currentValue = [NSNumber numberWithDouble: 0.0];
        }
        if([currentValue doubleValue] >= min && [currentValue doubleValue] <= max) countOfValues++;
    }
    // Consider element, by which comparison is executed
    countOfValues--;
    // Display calculation result in the development environment console
    NSLog(@"Number of color data array elements, difference of which values with value for a data series with the "RU" identifier does not exceed 500: %d", countOfValues);
}
// Check if selected height metric exists
if([mapDatasource hasHeightData])
{
    int countOfValues = 0;
    // Get height data array by specified identifier
    NSArray *heightArray = [mapDatasource heightSeriesWithID:@"RU"];
    // Get first value in height data array
    NSNumber *value = [heightArray objectAtIndex:0];
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Get range of comparison values
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Get height data array by all data series
    NSArray *heightValues = [mapDatasource heightValues];
    // Calculate number of array elements that are located in obtained array
    for(int i = 0; i < [heightValues count]; i++)
    {
        NSNumber *currentValue = [heightValues objectAtIndex:i];
        if ([currentValue isEqual: [NSNull new]]) {
            currentValue = [NSNumber numberWithDouble: 0.0];
        }
        if([currentValue doubleValue] >= min && [currentValue doubleValue] <= max) countOfValues++;
    }
    // Take intro account the element, by which comparison is executed
    countOfValues--;
    // Display calculation result in the development environment console
    NSLog(@"Number of height data array elements, difference of which values with value of a data series with the ''RU" identifier does not exceed 500: %d", countOfValues);
}
// Check if selected bubble size metric exists
if([mapDatasource hasSizeData])
{
    int countOfValues = 0;
    // Get array of bubble size data  by specified identifier
    NSArray *sizeArray = [mapDatasource sizeSeriesWithID:@"RU"];
    // Get first value in bubble size data array
    NSNumber *value = [sizeArray objectAtIndex:0];
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Get rang of comparison values
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Get array of bubble size data by all data series
    NSArray *sizeValues = [mapDatasource sizeValues];
    // Calculate number of array elements that are located in obtained array
    for(int i = 0; i < [sizeValues count]; i++)
    {
        NSNumber *currentValue = [sizeValues objectAtIndex:i];
        if ([currentValue isEqual: [NSNull new]]) {
            currentValue = [NSNumber numberWithDouble: 0.0];
        }
        if([currentValue doubleValue] >= min && [currentValue doubleValue] <= max) countOfValues++;
    }
    // Take into account the elements, by which comparison is executed
    countOfValues--;
    // Display calculation result in the development environment console
    NSLog(@"Number of data array elements for bubble size, difference of which values with the value of a data series with the "RU" identifier does not exceed 500: %d", countOfValues);
}
// Get dimension metric
SPPLDimension metricsDimension = [mapDatasource metricsDimension_Map];
// Get observation object dimension
SPPLDimension topoDimension = [mapDatasource observationDimension_Map];
// Get dimension used to build timeline
SPPLDimension calendarDimension = [mapDatasource timelineDimension_Map];
// Set new identifier of metric dimension
[mapDatasource setMetricsDimensionId: topoDimension->id()->nsString()];
// Set new identifier of observation object dimension
[mapDatasource setObservationDimensionId: calendarDimension->id()->nsString()];
// Set new identifier of dimension used to build timeline
[mapDatasource setTimelineDimensionId: metricsDimension->id()->nsString()];

 After executing the example the mobile device screen displays the express report containing the map, for which dimensions are changed in the data source. The development environment console displays information about map data source, and also calculation results for the number of elements included in the specified range of values in the color data array, height data array, and bubble size data array:

Timestamp titles:

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

Color metric: GDP per capita, PPP (constant 2005 international $); key: 513

Height metric: GDP per capita, PPP (constant 2005 international $); key: 513

Bubble size metric: GDP per capita, PPP (constant 2005 international $); key: 513

Map data source settings dictionary keys:

COLOR_KEY

DIM_KEY

SETTINGSFORMETRICS

SIZE_KEY

HEIGHT_KEY

Metric dimension identifier in map data source settings dictionary: FACTS_WDI_COPY_1557

Observation object dimension identifier in map data source settings dictionary: CUT_REGIONS_68045

Identifier of the dimension used to build timeline in map data source settings dictionary: CALENDAR_Y_ENG_533

Number of color data array elements, difference of which values with the value of a data series with the RU identifier does not exceed 500: 19

Number of height data array elements, difference of which values with the value of a data series with the RU identifier does not exceed 500: 19

Number of bubble size data array elements, difference of which values with the value of a data series with the RU identifier does not exceed 500: 19

See also:

Examples of Component Use