Работа с источником данных карты

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

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

Описание

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

Исходный код

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

// Выбираем карту в качестве текущего представления
[m_controller setDataViewControllerWithIndex: 2];
// Получаем делегат экспресс-отчета
EAReportDelegateImpl *delegate = [m_controller delegate];
// Получаем источник данных карты
MapDataViewDatasource *mapDatasource = [delegate mapDatasource];
// Получаем массив заголовков временных отметок источника данных карты
NSArray *timeAxisTitles = [mapDatasource timeAxisTitles];
// Выводим в консоль среды разработки заголовки временных отметок
NSLog(@"Заголовки временных отметок:");
for(int i = 0; i < [timeAxisTitles count]; i++) NSLog(@"%@", [timeAxisTitles objectAtIndex:i]);
// Получаем наименование метрики цвета
NSString *colorMetricName = [mapDatasource colorMetricName];
// Получаем ключ метрики цвета
int colorMetricKey = [mapDatasource colorMetricKey];
// Получаем наименование метрики высоты
NSString *heightMetricName = [mapDatasource heightMetricName];
// Получаем ключ метрики высоты
int heightMetricKey = [mapDatasource heightMetricKey];
// Получаем наименование метрики размеров пузырьков
NSString *sizeMetricName = [mapDatasource sizeMetricName];
// Получаем ключ метрики размеров пузырьков
int sizeMetricKey = [mapDatasource sizeMetricKey];
// Выводим в консоль среды разработки полученную информацию
NSLog(@"Метрика цвета: %@; ключ: %d", colorMetricName, colorMetricKey);
NSLog(@"Метрика высоты: %@; ключ: %d", heightMetricName, heightMetricKey);
NSLog(@"Метрика размера пузырьков: %@; ключ: %d", sizeMetricName, sizeMetricKey);
// Получаем справочник с настройками источника данных карты
SNDictionary dump = [mapDatasource dumpSettings];
// Выводим в консоль среды разработки ключи справочника настроек источника данных карты
NSLog(@"Ключи справочника настроек источника данных карты:");
SNArray keys = dump->allKeys();
for(int i = 0; i < keys->count(); i++)
{
    SNString key = keys->objectAtIndex<NString>(i);
    NSLog(@"%@", key->nsString());
}
// Получаем из справочника настроек массив, содержащий измерения источника данных
SNDictionary settingsForMetricsFromDump = dump->objectForKey<NDictionary>(NStr("SETTINGSFORMETRICS"));
// Получаем из массива идентификатор измерения метрик
SNString metricsDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("METRICS_KEY"));
// Получаем из массива идентификатор измерения объектов наблюдения
SNString topoDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("OBSERVATION_KEY"));
// Получаем из массива идентификатор измерения, используемого для построения временной шкалы
SNString calendarDimensionIdFromDump =settingsForMetricsFromDump->objectForKey<NString>(NStr("TIMESCALE_KEY"));
// Выводим в консоль среды разработки полученные идентификаторы
NSLog(@"Идентификатор измерения метрик в справочнике настроек источника данных карты: %@", metricsDimensionIdFromDump->nsString());
NSLog(@"Идентификатор измерения объектов наблюдения в справочнике настроек источника данных карты: %@", topoDimensionIdFromDump->nsString());
NSLog(@"Идентификатор измерения, используемого для построения временной шкалы, в справочнике настроек источника данных карты: %@", calendarDimensionIdFromDump->nsString());
// Проверяем наличие выбранной метрики цвета
if([mapDatasource hasColorData]) {
    int countOfValues = 0;
    // Получаем массив цветовых данных для заданного идентификатора
    NSArray *colorArray = [mapDatasource colorSeriesWithID:@"RU"];
    // Получаем первое значение в массиве цветовых данных
    NSNumber *value = [colorArray objectAtIndex:0];
    
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Получаем диапазон значений для сравнения
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Получаем массив цветовых данных для всех рядов данных
    NSArray *colorValues = [mapDatasource colorValues];
    // Подсчитываем количество элементов в массиве, которые находятся в полученном диапазоне
    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++;
    }
    // Учитываем элемент, по которому производилось сравнение
    countOfValues--;
    // Выводим в консоль среды разработки результат подсчета
    NSLog(@"Количество элементов в массиве цветовых данных, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: %d", countOfValues);
}
// Проверяем наличие выбранной метрики высоты
if([mapDatasource hasHeightData])
{
    int countOfValues = 0;
    // Получаем массив данных для высоты по заданному идентификатору
    NSArray *heightArray = [mapDatasource heightSeriesWithID:@"RU"];
    // Получаем первое значение в массиве данных для высоты
    NSNumber *value = [heightArray objectAtIndex:0];
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Получаем диапазон значений для сравнения
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Получаем массив данных для высоты по всем рядам данных
    NSArray *heightValues = [mapDatasource heightValues];
    // Подсчитываем количество элементов в массиве, которые находятся в полученном диапазоне
    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++;
    }
    // Учитываем элемент, по которому производилось сравнение
    countOfValues--;
    // Выводим в консоль среды разработки результат подсчета
    NSLog(@"Количество элементов в массиве данных для высоты, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: %d", countOfValues);
}
// Проверяем наличие выбранной метрики размеров пузырьков
if([mapDatasource hasSizeData])
{
    int countOfValues = 0;
    // Получаем массив данных для размеров пузырьков по заданному идентификатору
    NSArray *sizeArray = [mapDatasource sizeSeriesWithID:@"RU"];
    // Получаем первое значение в массиве данных для размеров пузырьков
    NSNumber *value = [sizeArray objectAtIndex:0];
    if ([value isEqual: [NSNull new]]) {
        value = [NSNumber numberWithDouble: 0.0];
    }
    // Получаем диапазон значений для сравнения
    double min = [value doubleValue] - 500;
    double max = [value doubleValue] + 500;
    // Получаем массив данных для размеров пузырьков по всем рядам данных
    NSArray *sizeValues = [mapDatasource sizeValues];
    // Подсчитываем количество элементов в массиве, которые находятся в полученном диапазоне
    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++;
    }
    // Учитываем элемент, по которому производилось сравнение
    countOfValues--;
    // Выводим в консоль среды разработки результат подсчета
    NSLog(@"Количество элементов в массиве данных для размеров пузырьков, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: %d", countOfValues);
}
// Получаем измерение метрик
SPPLDimension metricsDimension = [mapDatasource metricsDimension_Map];
// Получаем измерение объектов наблюдения
SPPLDimension topoDimension = [mapDatasource observationDimension_Map];
// Получаем измерение, используемое для построения временной шкалы
SPPLDimension calendarDimension = [mapDatasource timelineDimension_Map];
// Устанавливаем новый идентификатор измерения метрик
[mapDatasource setMetricsDimensionId: topoDimension->id()->nsString()];
// Устанавливаем новый идентификатор измерения объектов наблюдения
[mapDatasource setObservationDimensionId: calendarDimension->id()->nsString()];
// Устанавливаем новый идентификатор измерения, используемого для построения временной шкалы
[mapDatasource setTimelineDimensionId: metricsDimension->id()->nsString()];

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

Заголовки временных отметок:

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

Метрика цвета: GDP per capita, PPP (constant 2005 international $); ключ: 513

Метрика высоты: GDP per capita, PPP (constant 2005 international $); ключ: 513

Метрика размера пузырьков: GDP per capita, PPP (constant 2005 international $); ключ: 513

Ключи справочника настроек источника данных карты:

COLOR_KEY

DIM_KEY

SETTINGSFORMETRICS

SIZE_KEY

HEIGHT_KEY

Идентификатор измерения метрик в справочнике настроек источника данных карты: FACTS_WDI_COPY_1557

Идентификатор измерения объектов наблюдения в справочнике настроек источника данных карты: CUT_REGIONS_68045

Идентификатор измерения, используемого для построения временной шкалы, в справочнике настроек источника данных карты: CALENDAR_Y_ENG_533

Количество элементов в массиве цветовых данных, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: 19

Количество элементов в массиве данных для высоты, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: 19

Количество элементов в массиве данных для размеров пузырьков, разница значения которых со значением для ряда данных с идентификатором «RU» не превышает 500: 19

См. также:

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