Использование атрибутов области карты

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

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

Описание

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

Исходный код

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

// Получаем объект для работы со слоем карты
MapLayer *layer = [[m_view layers] objectAtIndex:0];
// Перебираем в цикле все области полученного слоя карты
for(MapShape *shape in [layer allShapes])
{
    // Сравниваем идентификатор текущей области с заданным
    if([shape.ID isEqual:@"RU"] == YES)
    {
        // Отображаем в заданной области всплывающую подсказку
        [m_view showPopupInShape:shape];
        // Получаем объект для работы со всплывающей подсказкой
        MapTooltip *tooltip = [shape tooltip];
        // Устанавливаем цвет границы всплывающей подсказки
        [tooltip setBorderColor:[UIColor blackColor]];
        NSLog(@"XML-атрибуты SVG-данных");
        // Получаем массив атрибутов области
        NSDictionary *attributes = [shape attributes];
        // Получаем ключи массива атрибутов
        NSArray *attributesKeys = [attributes allKeys];
        // Перебираем в цикле массив ключей
        for(NSString *key in attributesKeys)
        {
            // Получаем значение для текущего ключа
            id value = [attributes valueForKey:key];
            // Выводим в консоль среды разработки информацию об атрибуте
            NSLog(@"Атрибут: \"%@\", значение: \"%@\"", key, value);
        }
        NSLog(@"XML-атрибуты платформы");
        // Получаем массив атрибутов платформы
        NSDictionary *ppatributes = [shape ppattributes];
        // Получаем ключи массива атрибутов платформы
        NSArray *ppatributesKeys = [ppatributes allKeys];
        // Перебираем в цикле массив ключей
        for(NSString *key in ppatributesKeys)
        {
            // Получаем значение для текущего ключа
            id obj = [ppatributes valueForKey:key];
            // Выводим в консоль среды разработки информацию об атрибуте платформы
            NSLog(@"Атрибут: \"%@\", значение: \"%@\"", key, obj);
        }
        NSLog(@"Параметры атрибутов платформы");
        // Получаем массив параметров атрибутов платформы
        NSDictionary *ppatributeParameters = [shape ppattributeParameters];
        // Получаем ключи массива параметров атрибутов платформы
        NSArray *keys = [ppatributeParameters allKeys];
        // Перебираем в цикле массив ключей
        for(NSString *key in keys)
        {
            // Получаем значение для текущего ключа
            id obj = [ppatributeParameters valueForKey:key];
            // Извлекаем из полученного значения имя параметра
            NSString *name = [obj valueForKey:@"Name"];
            // Извлекаем из полученного значения тип параметра
            NSString *type = [obj valueForKey:@"Type"];
            /* Выводим в консоль среды разработки
            информацию о параметрах атрибута платформы */
            NSLog(@"Параметр: \"%@\", тип: \"%@\"",name, type);
        }
    }
}

Также необходимо заменить содержимое метода  mapChart:touchDownInShape: класса ViewController (см. раздел «Создание карты с временной шкалой») на следующий код:

// Сравниваем идентификатор выбранной области с заданным
if([shape.ID isEqual:@"RU"] == YES)
{
    // Запрещаем взаимодействие пользователя с временной осью
    [[m_view timeAxis] setInactiveMode:YES];
    // Получаем массив атрибутов платформы
    NSDictionary *ppatributes = [shape ppattributes];
    // Устанавливаем новое значение атрибуту «Name»
    [ppatributes setValue:@"Российская Федерация" forKey:@"Name"];
    // Скрываем отображенную ранее всплывающую подсказку области
    [m_view showPopupInShape:shape];
    // Отображаем всплывающую подсказку заново
    [m_view showPopupInShape:shape];
}

В результате выполнения примера в консоли среды разработки будет выведена информация об атрибутах области карты и атрибутах платформы:

XML-атрибуты SVG-данных

Атрибут: "id", значение: "RU"

XML-атрибуты платформы

Атрибут: "ISO", значение: "RU"

Атрибут: "IdMapping", значение: "643"

Атрибут: "TextOriginOffset", значение: "0.5,0.5"

Атрибут: "BarOriginOffset", значение: "0.5,0.5"

Атрибут: "PieOriginOffset", значение: "0.5,0.5"

Атрибут: "ImageOriginOffset", значение: "0.5,0.5"

Атрибут: "Name", значение: "Russian Federation"

Атрибут: "Description", значение: "Russian Federation"

Атрибут: "OriginOffset", значение: "0.5,0.5"

Параметры атрибутов платформы

Параметр: "ISO", тип: "string"

Параметр: "IdMapping", тип: "int"

Параметр: "TextOriginOffset", тип: "point"

Параметр: "BarOriginOffset", тип: "point"

Параметр: "PieOriginOffset", тип: "point"

Параметр: "ImageOriginOffset", тип: "point"

Параметр: "Name", тип: "string"

Параметр: "Description", тип: "string"

Параметр: "OriginOffset", тип: "point"

 

 Для области слоя карты с идентификатором «RU» была выведена всплывающая подсказка, содержащая информацию, полученную из атрибутов платформы:

Затем вручную нажмём на область слоя карты с идентификатором «RU». В результате этого действия взаимодействие пользователя с временной осью будет запрещено. Вместо шкалы временной оси на экране будет отображена надпись, соответствующая текущему значению временной оси. Данные атрибута, содержащего название области карты, будут изменены. Всплывающая подсказка области карты будет скрыта и заново отображена с обновленными данными:

См. также:

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