Требования к операционной системе: 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
См. также: