Настройка стиля слоя с помощью Arcade
Вы создадите выражение Arcade и используете его для оформления стиля слоя на карте. Выражение Arcade будет вычислять ежегодное потребление электроэнергии на душу населения. Сначала вы рассчитаете ежегодное потребление электроэнергии в каждой стране, и поделите полученное значение на общую численность населения. Этот расчет важен для соизмеримого сопоставления потребления электроэнергии, принимая во внимание широкий диапазон численности населения по странам мира. Затем вы оформите стиль слоя со странами мира, используя итоговое значение потребления энергии на душу населения в год.
Прежде всего, вы добавите нужные слои на карту и выберете другую базовую карту.
Добавление слоев и изменение базовой карты
Сначала вы создадите новую карту в Map Viewer. Затем вы добавите на новую карту два слоя - Global Power Plants и World Countries Electricity Consumption - и поменяете базовую карту.
Примечание:
Map Viewer является инструментом следующего поколения для создания карт в ArcGIS Online. Он призван вдохновлять на эксперименты и творчество, предлагая при этом дополнительные возможности для основных рабочих процессов картографирования.
- Войдите под учётной записью организации ArcGIS.
Примечание:
Если у вас нет учетной записи организации, см. варианты доступа к программному обеспечению.
- На ленте щелкните Карта.
Примечание:
В зависимости от настроек организации и пользователя при открытии Map Viewer Classic. ArcGIS Online может предложить два вьюера для просмотра, использования и создания карт. Дополнительные сведения о доступных вьюерах карт и возможности их использования см. в этом FAQ.
В этом руководстве используется Map Viewer.
- Если необходимо, во всплывающем окне щелкните Открыть в Map Viewer или щелкните на ленте Открыть в Map Viewer.
Откроется Map Viewer.
Теперь вы добавите первый слой Global Power Plant на карту.
- На панели Слои щёлкните Добавить.
- Щёлкните Мои ресурсы и выберите ArcGIS Online.
- В поле поиска введите global power plants owner:Learn_ArcGIS.
Слой Global Power Plants появится в результатах поиска.
- Для результата поиска слоя Global Power Plants щелкните кнопку Добавить.
Слой появится на карте.
Слой является развернутой подборкой мировых электростанций, отображенных по типу вырабатываемой электроэнергии. Сейчас вы добавите второй слой, который будет использоваться в этом упражнении.
- В окне поиска скопируйте и вставьте следующий текст: electricity consumption owner:Learn_ArcGIS.
- На слое World Countries Electricity Consumption в результатах поиска нажмите Добавить.
Слой появится на карте.
Слой содержит данные о численности населения и потреблении электроэнергии по всем странам мира.
Этот слой размещен выше слоя Global Power Plants и частично перекрывает его, поэтому вы поменяете порядок расположения слоев.
- На панели Добавить слой нажмите кнопку Назад, чтобы вернуться в панель Слои.
- На панели Слои перетащите слой World Countries Electricity Consumption под слой Global Power Plants.
Символы электростанций теперь отображаются поверх слоя со странами.
В некоторых странах мира довольно много электростанций расположено близко друг к другу. Для наилучшего отображения распределения электростанций вы включите кластеризацию для данного слоя.
- На панели Слои убедитесь, что выбран слой Global Power Plants.
- На панели инструментов Настройки (светлая), щелкните Агрегирование.
- На панели Агрегирование щелкните кнопку Включить агрегирование.
Кластеризация включена по умолчанию.
- Для Кластеризации щелкните Опции.
Появляется панель Кластеризация.
- На панели Кластеризация для Радиуса кластеризации перетащите бегунок ближе к Низкий. Для Диапазона размера переместите бегунок влево.
Слой с электростанциями теперь отображен с кластерами. При приближении и отдалении карты кластеры меняют конфигурацию, приспосабливаясь к текущему масштабу. Каждый кластер маркирован цифрой, представляющей количество входящих в него электростанций.
Далее вы выберете другую базовую карту, чтобы символы электростанций лучше выделялись на карте. Так как точки в слое представлены символами яркого цвета, вы можете создать контраст, отобразив их на темной или нейтральной базовой карте.
- Щелкните Назад и закройте панель Агрегирование.
- На панели Содержание (темной) щелкните Базовая карта. На панели Базовая карта выберите Тёмно-серое полотно.
Базовая карта обновится на карте.
- Закройте панель Базовая карта.
Теперь вы свернете панель инструментов Содержание, чтобы оставить больше пространства для карты.
- Нажмите на кнопку Свернуть на панели инструментов Содержание.
Далее вы сохраните карту.
- На свернутой панели инструментов Содержание щелкните Сохранить и открыть и выберите Сохранить как.
- В окне Сохранить карту введите следующую информацию:
- Для Заголовка введите Производство и потребление электроэнергии в мире и добавьте свои инициалы.
- Укажите Теги: потребление электроэнергии, электростанции, нажимайте Enter после каждого тега.
- В Описании укажите: Карта ведущих электростанций мира, отображенных по типу вырабатываемой электроэнергии.
- Щелкните Сохранить.
Изучение данных и редактор выражения Arcade
Далее, вы изучите редактор выражений Arcade и используете его для оформления слоя World Countries Electricity Consumption. Ваша цель - легко сравнить ежегодное потребление электроэнергии в каждой стране. Для ее выполнения вы построите выражение Arcade, которое рассчитывает ежегодное потребление электроэнергии на душу населения путем деления показателя ежегодного потребления электроэнергии (в киловатт-часах) на общую численность населения. Это сделает возможным провести соизмеримое сопоставление потребления электроэнергии по странам, принимая во внимание широкий диапазон численности населения.
Примечание:
Этот тип расчета называется нормализацией: для каждой страны вы нормализуете потребление электроэнергии по общей численности населения.
Перед началом создания выражения Arcade вы посмотрите атрибутивную таблицу слоя.
- На панели инструментов Содержание щелкните кнопку Слои.
- На панели Слои для слоя World Countries Electricity Consumption нажмите кнопку Опции и кликните Показать таблицу.
Появится таблица атрибутов.
Примечание:
Для освобождения места на экране, вы можете свернуть панель Свойства.
Таблица включает поле COUNTRY, в котором указаны названия стран, поле Annual Electricity Consumption, со значениями в киловатт-часах (кВт-ч) и поле Pop, в котором указана численность населения каждой страны. Эти атрибуты вы будете использовать в выражении Arcade.
Примечание:
Киловатт-часы это общепринятая единица измерения потребления электроэнергии за определенное время. Если вы внимательно посмотрите на свой ежемесячный счет за электроэнергию, ваше ежемесячное потребление, вероятно, будет отображаться в киловатт-часах.
Теперь вы узнаете, как использовать Arcade. Это портативный, легкий и защищенный язык выражений, написанный для использования в ArcGIS. Как и другие языки создания выражений, он может выполнять математические операции, обращаться с текстом и оценивать логические утверждения. Arcade был специально разработан для создания пользовательского оформления и надписывания объектов на лету в ArcGIS. Он позволяет пользователям оперировать существующими данными и получать новые идеи посредством разработки, совместного использования и выполнения настраиваемых выражений в ArcGIS Pro, ArcGIS Runtime, ArcGIS Online, ArcGIS Enterprise и ArcGIS API for JavaScript.
В Map Viewer, Arcade полезен при настройке всплывающих окон и надписей, и при оформлении слоя. Вы можете создать и применить выражение Arcade с помощью редактора выражений Arcade. Теперь вы откроете и изучите редактор выражений. Поскольку ваша цель - настроить оформление слоя World Countries Electricity Consumption, вы откроете редактор выражения на панели Стили этого слоя.
- На панели Слои убедитесь, что выбран слой World Countries Electricity Consumption, а на панели инструментов Настройки щелкните Стили.
- На панели Стили в разделе Выбрать атрибуты щелкните Выражение.
Появится окно редактора выражений Arcade.
- Щелкните значок Развернуть, чтобы увидеть боковые закладки.
Посмотрите разные разделы окна редактора. Окно выражения - это то место, где вы создаете выражение. На вкладках Переменные профиля и Функции вы найдете элементы, которые будете использовать в выражении. Вкладка Справка открывает страницу справки Arcade.
- Просмотрите вкладку Переменные профиля.
На вкладке представлен список преднастроенных переменных, включая поля атрибутов и геометрию для объектов слоя.
- Перейдите на вкладку Функции.
На этой вкладке перечислены все функции Arcade. Вы можете кликнуть на значок информации справа от каждой функции для доступа к встроенной справке функции по параметрам, синтаксису и использованию.
- Щелкните вкладку Справка.
Эта вкладка связана с документацией Arcade.
- Нажмите кнопку Запустить.
Вкладки Выходных данные, Консоль и Журнал откроются с результатом null. Как только вы создали выражение, можно нажать кнопку Запустить, чтобы протестировать выходное значение выражения. На данный момент вы не написали никакого кода Arcade, поэтому вкладки Выходные данные и Журнал ничего не содержат.
Создание выражения Arcade для вычисления потребление электроэнергии на душу населения
Сейчас вы создадите выражение Arcade и используете его для оформления слоя World Countries Electricity Consumption. Сначала вы определите переменную для доступа к атрибуту поля Annual Electricity Consumption (KwH).
- В окне выражения, в строке 1, введите (или скопируйте и вставьте) следующий текст: var annualConsumptionKwh = .
AnnualConsumptionKwh - имя новой переменной. Использование var <variableName> активирует переменные в памяти для последующего использования в выражении. Вы укажете значение переменной в следующем шаге.
- Щелкните вкладку Переменные профиля. На панели Переменные профиля щелкните стрелку рядом с $feature.
- В разделе Значения щелкните переменную $feature.Annual_Electricity_Consumption_.
Строка копируется в окно выражения, завершая вашу первую строку кода.
Примечание:
Annual_Electricity_Consumption_ - это имя атрибута, а Annual Electricity Consumption - это псевдоним, более удобный для пользователя способ обозначения атрибута.
- В окне выражения нажмите Enter, чтобы перейти на следующую строку выражения.
Любая дальнейшая ссылка на переменную annualConsumptionKwh приведет к доступу к значению атрибута Annual Electricity Consumption (KwH) для каждого объекта в слое (в данном случае это все страны мира).
Теперь вы протестируете первую строку вашего выражения. Удобный способ протестировать переменную - попросить Arcade вернуть её значение. Вы можете сделать это, используя оператор return.
- В окне Выражение введите return annualConsumptionKwh и нажмите клавишу Enter.
- Нажмите кнопку Запустить.
На вкладке Выходные данные появится значение 157200000, а типом данных является Номер.
Примечание:
Чтобы упростить тестирование выражений, редактор выражения Arcade использует первый объект слоя (упорядоченного по ID объекта) для заполнения атрибутов примерами значений. Первым объектом слоя World Countries Electricity Consumption является Американское Самоа с годовым потреблением электроэнергии 157 200 000 кВт-ч и населением 46366 человек.
Результатом, возвращенным для вашего выражения, является годовое потребление электроэнергии для Американского Самоа: 157 200 00 кВт-ч. Это то самое значение, которое вы ожидали, таким образом, ваш код работает правильно.
Затем вы введете переменную для доступа к полю население.
- В окне выражения в конце первой строки кода нажмите Enter, чтобы добавить новую строку. Введите var population =.
- При необходимости на вкладке Переменные профиля щелкните стрелку рядом с вкладкой $feature. В Значениях выберите $feature.POP, чтобы добавить в выражение значение атрибута населения.
Теперь вы используете оператор return, чтобы протестировать новую переменную.
- В строке return замените annualConsumptionKwh на population.
Примечание:
В предыдущем атрибуте использовалось обозначение ["field"], потому что он содержал символы подчеркивания. Поле POP не содержит символы подчеркивания, поэтому Arcade использует более простое обозначение. Преимущество при добавлении атрибута через вкладку Переменные профиля вместо ручного ввода в том, что для вас подбирается корректный формат. Также это предотвращает возможность появления орфографической ошибки.
- Щелкните Запустить.
В Выходных данных находится значение 46366, что действительно соответствует численности населения Американского Самоа. Поведение кода продолжает соответствовать ожидаемому.
Следующий шаг - вычислить потребление электроэнергии на душу населения. Для этого вы воспользуетесь значениями, хранящимися в двух переменных, и разделите годовое потребление электроэнергии на численность населения. Вы сохраните результат в третьей переменной, которая называется consumptionPerCapita.
- В окне выражения нажмите Enter, чтобы добавить новую строку перед строкой return population. Введите var consumptionPerCapita = annualConsumptionKwh / population.
- В строке return замените population на consumptionPerCapita.
- Щелкните Запустить.
В Выходных данных указано 3390.415390587931, что действительно является результатом деления 157200000 на 46,366.
Чтобы протестировать большее разнообразие случаев, вы можете переназначить переменную population номером литерала.
- В окне выражения нажмите Enter, чтобы добавить новую строку после строки var population = $feature.POP. Введите population = 40000.
- Щелкните Запустить.
Результат обновился на 3930, что является результатом деления 157200000 на 40000.
- Точно так же вы можете проверить свое выражение с разными значениями для полей годового потребления электроэнергии и численности населения.
- Удалите строку кода population = 40000.
Примечание:
Оператор return используется не только для тестирования - он показывает, как конечный результат выражения будет доступен для использования на карте. Например, теперь, когда в выражении выдается окончательный результат, вы сможете использовать его для оформления слоя стран.
Готовое выражение показано ниже.
// Set variables var annualConsumptionKwh = $feature["Annual_Electricity_Consumption_"] var population = $feature.POP // Calculate the electricity consumption per capita var consumptionPerCapita = annualConsumptionKwh / population // Return the consumption per capita return consumptionPerCapita
Чтобы сделать ваш код более читабельным, добавлены комментарии.
Примечание:
Чтобы сделать ваш код более читабельным и легким в поддержке в будущем, рекомендуется добавлять комментарии, обозначенные значком // в начале строки. Комментарии игнорируются Arcade и предназначены только для людей, которые будут читать код.
Теперь вы зададите имя для этого выражения. Крайне важно дать понятное имя для выражения, т.к., по сути, оно будет применяться как имя нового поля в слое. Оно будет использоваться в легенде карты, а также поможет идентифицировать выражение позже, когда вы на него ссылаетесь или если его нужно отредактировать.
- Щелкните кнопку Редактирование рядом с Новое выражение.
Примечание:
Вы также можете щелкнуть непосредственно выражение, чтобы отредактировать заголовок.
- В текстовом поле Новое выражение введите Потребление электроэнергии на душу населения (кВт-ч) и щелкните вне текстового поля.
- Щелкните Готово.
Редактор Arcade закроется, и выражение будет добавлено в список атрибутов, которые можно использовать для оформления стиля слоя World Countries Electricity Consumption.
- На панели инструментов Содержание щелкните Сохранить и открыть и выберите Сохранить.
При сохранении карты будет сохранено все, что вы сделали на карте, включая любые созданные вами выражения.
Настройка стиля слоя
Теперь вы готовы оформить слой World Countries Electricity Consumption, используя только что созданное выражение Arcade.
- На панели Стиль посмотрите текущие настройки.
На панели Стили новое выражение Потребление электроэнергии на душу населения (кВт-ч) было автоматически применено к символам слоя World Countries Electricity Consumption. По умолчанию стиль отображения — Числа и количества (цвет), и именно так вы в конечном итоге будете стилизовать слой. Однако вы измените стиль на Числа и количества (размер), чтобы увидеть разницу.
- В разделе Выбор стиля щелкните Числа и количества (размер)
Поскольку слой плохо виден, вы временно отключите слой Global Power Plants.
- На панели Слои нажмите на кнопку для отключения видимости слоя Global Power Plants.
Потребление электроэнергии на душу населения в каждой стране представлено точечными символами разного размера.
Примечание:
Поскольку в каждой стране разные значения общего потребления электроэнергии и численности населения, результат на душу населения для каждой страны разный, даже если выражение Arcade одинаковое. Это то, что делает Arcade таким мощным - он может брать значения полей конкретных объектов, чтобы "на лету" возвращать новые значения для каждого из них. Еще одна особенность Arcade, которая здесь продемонстрирована, состоит в том, что вам не нужно быть владельцем исходных слоев с данными для генерации новой производной информации.
Чтобы лучше видеть слой стран одновременно со слоем электростанций, вы используете другую символику оформления.
- На панели Стили выберите стиль отображения Числа и количества (цвет).
Интуитивно понятная, удобная для дальтоников цветовая шкала, подходящая для темного фона, автоматически выбирается для стиля Числа и количества. Страны с низким потреблением электроэнергии на душу населения отображаются темно-синим цветом, а страны с высоким уровнем потребления электроэнергии на душу населения - ярко-бирюзовым.
Примечание:
Когда фон вашей карты темный, самые низкие значения показателей отображаются более темным цветом, а самые высокие значения отображаются более светлым или ярким цветом. Это помогает выделить самые высокие значения.
- Щёлкните Готово, чтобы закрыть панель Стили.
- На панели Слои снова включите слой Global Power Plants.
С новым стилем оформления теперь можно отображать оба слоя одновременно.
Вы отключите информационные всплывающие окна для слоя стран, чтобы пользователи могли легко выбирать объекты электростанций.
- На панели Слои убедитесь, что выбран слой World Countries Electricity Consumption, и на панели инструментов Настройки щелкните Всплывающие окна.
- На панели Всплывающие окна отключите Включить всплывающие окна и закройте панель Всплывающие окна.
- Сохраните карту.
Теперь ваша карта имеет визуально интуитивно понятный стиль, который показывает модели потребления электроэнергии на душу населения и производства электроэнергии по всему миру.
- Просмотрите содержимое карты.
Вы можете бегло сравнить свою страну с другими. Уровень потребления электроэнергии на душу населения выше в промышленно-развитых странах Западной Европы и Северной Америки, а также в большинстве странах Персидского залива, производящих электроэнергию. Вы можете увидеть, что страны с более высоким потреблением электроэнергии на душу населения, как правило, имеют более высокую концентрацию электростанций, что логично. В развивающихся странах меньше электростанций и меньше потребление электроэнергии на душу населения.
Вы создали карту и отобразили электростанции с помощью эффекта кластеризации. Затем вы использовали выражение Arcade для отображения показателя годового потребления электроэнергии на душу населения во всем мире.
Настройка всплывающего окна с помощью Arcade
Ранее вы познакомились с Arcade и использовали выражение Arcade для обозначения слоя стран мира. Теперь вы будете использовать выражение Arcade для отображения данных слоя электростанций в информационном всплывающем окне. Это позволит вам лучше разобраться в производстве электроэнергии на электростанциях.
Изучение атрибутов ведущих мировых электростанций и всплывающих окон
Сначала вы изучите атрибуты ведущих мировых электростанций и посмотрите всплывающие окна этого слоя.
В слое Ведущие мировые электростанции есть атрибут, который дает расчетную годовую выработку электроэнергии для каждой электростанции, выраженную в гигаватт-часах (ГВт-ч). Имя этого атрибута - estimated_generation_gwh. Это полезно, но вы хотели бы выразить величину выработки электроэнергии как нечто более понятное для широкой публики: количество 60-ваттных лампочек, которые электростанция может снабжать энергией в течение года. Для того, чтобы выполнить такое преобразование, вы будете использовать выражение Arcade, и новая величина будет отображаться в предложении во всплывающем окне слоя. Поскольку на некоторых электростанциях отсутствует значение атрибута estimated_generation_gwh, вам также потребуется обработать эти отсутствующие значения в выражении Arcade.
Во-первых, вы изучите таблицу атрибутов для слоя электростанций.
- При необходимости войдите в ArcGIS Online. На панели инструментов щелкните Ресурсы и перейдите к карте Мировое производство и потребление электроэнергии, которую вы создали в модуле 1.
- Щелкните меню опций рядом с Мировое производство и потребление электроэнергии и выберите Открыть во вьюере карт.
- На панели Слои для слоя электростанций Global Power Plants щелкните кнопку Опции и выберите Показать таблицу.
- Ознакомьтесь с полями таблицы атрибутов Ведущие мировые электростанции. Используйте горизонтальную полосу прокрутки, чтобы видеть все поля.
Среди атрибутов этого слоя обратите внимание на следующие:
- В поле country_long указывается название страны, в которой расположена электростанция.
- Поле name содержит имя электростанции.
- В поле fuel указывается тип электростанции.
Примечание:
Возможно, вам потребуется расширить столбец, чтобы увидеть псевдоним всего поля атрибута.
- Прокрутите до последнего столбца таблицы, estimated_generation_gwh.
Как уже упоминалось, это поле содержит расчетную годовую выработку электроэнергии для электростанции, выраженную в гигаватт-часах (ГВт-ч). Гигаватт-час - это электроэнергия, которая в миллион раз больше, чем киловатт-час.
- Закройте таблицу атрибутов Ведущие мировые электростанции.
Затем вы исследуете всплывающие окна для этого слоя.
- На карте приблизьтесь к интересующей вас области.
Примечание:
Поскольку в слое Ведущие мировые электростанции вы включили кластеризацию, вам нужно будет изменять масштаб карты до тех пор, пока кластеры не распадутся на отдельные объекты, чтобы можно было увидеть всплывающие окна этих отдельных объектов.
- На карте выберите объект Ведущие мировые электростанции, чтобы просмотреть исходное всплывающее окно для данного слоя.
Уже в этом всплывающем окне отображается некоторая полезная информация, в которой упоминается тип электростанции и ее мощность. Вы дополните всплывающее окно дополнительной информацией: годовая выработка электроэнергии электростанцией.
Преобразование единиц выработки электроэнергии с помощью Arcade.
Теперь вы откроете редактор выражений Arcade, чтобы создать новое выражение. Поскольку ваша цель - настроить всплывающее окно, вы откроете редактор выражений на панели настройки Всплывающие окна.
- На панели Слои убедитесь, что выбран слой Global Power Plants.
- Если необходимо, на панели инструментов Настройки (светлая) щелкните Всплывающие окна. На панели Всплывающие окна нажмите Атрибутивные выражения.
Сейчас вы создадите новое выражение Arcade.
- Щёлкните Добавить выражение, чтобы открыть редактор выражений Arcade.
Появится окно редактора.
Примечание:
Слой Ведущие мировые электростанции уже содержит существующее выражение, Цвет всплывающего окна. Оно используется для формирования символов разного цвета в зависимости от типа используемого топлива.
Вы зададите имя для этого выражения.
- Измените заголовок выражения на Расчетная годовая выработка в лампочках.
Сейчас вы начнете создание выражения Arcade. Во-первых, вы создадите переменную,yearLightbulbPower, которая содержит количество киловатт-часов электроэнергии, необходимой для питания 60-ваттной лампочки в течение одного года.
60-ваттная лампа накаливания потребляет 60 ватт-часов или 0,06 киловатт-часов электроэнергии за каждый час ее работы. Чтобы найти количество киловатт-часов электроэнергии, необходимое для питания 60-ваттной лампочки в течение года, вы умножите 0,06 киловатт-часа на 24 часа, а затем на 365 дней.
- В первой строке окна выражения введите (или скопируйте и вставьте) var yearLightbulbPower = 0.06 * 24 * 365.
Далеее вы добавите оператор return, чтобы протестировать переменную.
- Нажмите Enter и добавьте return yearLightbulbPower.
Далее вы запустите свой код.
- Нажмите кнопку Запустить.
На вкладке Выходные данные выводится значение 525,6. Это действительно является результатом произведения 0.06 на 24 на 365 и, таким образом, ваш код работает правильно.
Затем вы создадите переменную, содержащую имя электростанции, используя поле имя из слоя Ведущие мировые электростанции.
- В окне выражения добавьте новую строку перед выражением return и введите var plantName =.
- На панели Переменные профиля щелкните стрелку рядом с $feature.
Появится список атрибутов для слоя электростанции.
Примечание:
Вкладка Переменные профиля выглядит немного иначе, чем при настройке символов для слоя стран мира в предыдущем модуле. Это связано с тем, что всплывающие окна позволяют использовать дополнительные переменные профиля, такие как FeatureSets.
- Под списком Значения прокрутите вниз и щелкните $feature.name, чтобы завершить свою строку кода.
- В выражении return замените yearLightbulbPower на plantName, чтобы проверить вторую переменную.
- Нажмите кнопку Запустить.
В таблице Выходные данные находится значение Kajaki Hydroelectric Power Plant Afghanistan. Это - имя первой электростанции, указанной в таблице атрибутов, которая по умолчанию была назначена в качестве образца данных.
На следующем шаге вы создадите переменную, annualGenerationGwh, содержащую значение атрибута годовой выработки электроэнергии.
- В окне выражения добавьте новую строку перед выражением return и введите var annualGenerationGwh =.
- На панели Переменные профиля щелкните $feature.estimated_generation_gwh.
- В выражении return замените plantName на annualGenerationGwh, чтобы проверить самую последнюю переменную.
- Нажмите кнопку Запустить.
На вкладке Выходные данные значение отсутствует, оно указано как Null. Этот результат не является ожидаемым, поэтому вы далее его изучите.
Вы проверите, действительно ли текущее значение для этого атрибута пустое. Функция Arcade для проверки, является ли переменная "is empty" переменной IsEmpty. Функция IsEmtpy возвращает true, если заданное значение null или пустой текст (т.е. ''). Она возвращает false во всех других случаях, включая пустые массивы и словари.
- В окне выражения, для var annualGenerationGwh = $feature["estimated_generation_gwh"], замените $feature["estimated_generation_gwh"] на IsEmpty($feature["estimated_generation_gwh"]).
- Щелкните Запустить.
На вкладке Выходные данные значение отображается как Булево и имеет значение True.
Это означает, что гидроэлектростанция Каяки в Афганистане не имеет значения для атрибута estimated_generation_gwh. Поэтому проверка ранее дала пустой или нулевой результат.
Примечание:
Вам нужно будет позаботиться об этих особых случаях, когда в выражении Arcade пропущены данные. Однако вы сделаете это позднее. А пока вы выполните код для обычного случая, когда значение атрибута указано.
Чтобы продолжить создание выражения Arcade, вы вручную установите в качестве примера значение 10 ГВт-ч.
- В окне выражения для var annualGenerationGwh = IsEmpty($feature["estimated_generation_gwh"]) удалите функцию IsEmpty, а также начальную и конечную скобки.
Выражение вернется к предыдущему формату.
- Нажмите Enter, чтобы добавить новую строку после строки var annualGenerationGwh = $feature["estimated_generation_gwh"]. Введите annualGenerationGwh = 10.
- Снова щелкните кнопку Запустить.
На вкладке Выходные данные значение теперь равно 10, как и ожидалось, а тип данных является Числовым.
Затем, в коде Arcade вам будет нужно рассчитать годовую выработку электроэнергии в 60-ваттных лампочках на основе значения переменной annualGenerationGwh. Первый шаг состоит в том, чтобы преобразовать это значение из киловатт-часов (кВт*ч) в гигаватт-часы (ГВт*ч) и поместить полученный результат в новую переменную. В одном ГВт*ч. содержится один миллион кВт*ч., поэтому, чтобы перевести ГВт*ч. в кВт*ч. переменную annualGenerationGwh надо умножить на один миллион.
- Добавьте новую строку над выражением return введите var annualGenerationKwh = annualGenerationGwh * 1000000.
- В выражении return замените annualGenerationGwh на annualGenerationKwh.
- Щелкните Запустить для проверки выражения.
Результат составляет 10 000 000, что является ожидаемым результатом, так как в примере было выбрано значение, равное 10.
В этом разделе вы приступили к созданию второго выражения Arcade. Вы определили несколько переменных и перевели годовое значение выработки электроэнергии из ГВт*ч. в кВт*ч.
Выполнение вычислений и форматирование текста с помощью Arcade
Сейчас вы выполните основные вычисления в выражении Arcade. Затем вы отобразите результат в формате текста.
Во-первых, вы рассчитаете количество 60-ваттных лампочек, которые данная электростанция может питать энергией в течение года, разделив годовую выработку электроэнергии в кВтч (annualGenerationGwh) на количество кВтч, необходимое для питания одной 60-ваттной лампочки в течение года (yearLightbulbPower).
Примечание:
Не забывайте, что переменная yearLightbulbPower содержит результат произведения 0,06 * 24 * 365, который равен 525,6.
- Добавьте новую строку над выражением return введите var annualGenInLightbulbs = annualGenerationKwh / yearLightbulbPower.
- В выражении return замените annualGenerationKwh на annualGenInLightbulbs.
- Щелкните Запустить для проверки выражения.
Значение Результата равно 19025.87519025875, что действительно является результатом деления 10000000 на 525.6. А это около 19025,87 лампочек.
Однако, более разумно представлять количество лампочек в виде целого числа, а не десятичного. В Arcade это можно выполнить с помощью функции Округления
- Добавьте новую строку над выражением return введите var annualGenInLightbulbsRounded = .
Теперь надо найти функцию Округления на вкладке Функции.
- Перейдите на вкладку Функции. В поле поиска введите округление.
Появится функция Округление.
- Щелкните функцию Округление, чтобы вставить ее в окно выражения.
Функция Округление добавляется к выражению с параметром, помеченными скобками.
Вы просмотрите информацию об этой функции в справке, встроенной в приложение, чтобы лучше понять, какие параметры следует ожидать.
- На вкладке Функции щелкните стрелку рядом с функцией Округление.
- Просмотрите информацию для функции Округление.
Первый параметр - это округляемое число, в нашем случае это - переменная annualGenInLightbulbs. Второй параметр указывает количество десятичных знаков, до которого необходимо округлить это число. Вы сохраните значение по умолчанию 0, и таким образом 19025,87519025875 следует округлить до 19026, оставив после запятой 0 десятичных знаков.
- Когда вы закончите просматривать информацию о функции Округление, щелкните стрелку рядом с Функции, чтобы выйти из встроенной в приложение справки.
- Измените текст строки annualGenInLightbulbsRounded на следующий:
var annualGenInLightbulbsRounded = Round(annualGenInLightbulbs, 0)
Примечание:
Параметры функции всегда должны быть заключены в круглые скобки и разделены запятой.
- В выражении return замените annualGenInLightbulbs на annualGenInLightbulbsRounded.
- Щелкните Запустить для проверки выражения.
Полученный результат 19026 соответствует ожидаемому. Он равен 19026 лампочек.
Вы успешно подсчитали количество 60-ваттных лампочек, которое любая электростанция могла бы обеспечивать электроэнергией в течение года. Но это еще не все. Еще надо представить эту величину в читаемом формате и создать предложение, чтобы поместить это число в контекст.
Как и в других языках программирования, в Arcade есть метод для преобразования числа в текст. Эта функция называется Текст. Вы создадите новую переменную для отображения количества лампочек в текстовой форме.
- Добавьте новую строку над выражением return введите var annualGenInLightbulbsText = .
Теперь вы найдете функцию Текст на вкладке Функции.
- На вкладке Функции найдите text. Под списком Текстовые функции щелкните функцию Текст, чтобы вставить ее в окно выражения.
Новая строка будет выглядеть так:
var annualGenInLightbulbsText = Text(value)
Вы просмотрите информацию об этой функции в справке, встроенной в приложение, чтобы лучше понять, какие параметры следует ожидать.
- На вкладке Функции щелкните стрелку рядом с функцией Текст.
Первым параметром будет число, которое надо преобразовать в текст; в нашем случае это будет переменная annualGenInLightbulbsRounded. Вторым параметром будет шаблон, выражающий желаемый формат. Например, шаблон по умолчанию '#,###' добавляет запятые - разделители тысячных долей. Это означает, что число, написанное как 9563, станет числом 9,563.
- Когда вы закончите просмотр информации, щелкните стрелку назад, чтобы выйти из встроенной справки.
- Измените текст строки annualGenInLightbulbsText на следующий:
var annualGenInLightbulbsText = Text(annualGenInLightbulbsRounded, '###,###,###,###')
Примечание:
Шаблон '###,###,###,###' добавляет разделители для больших чисел, чем шаблон по умолчанию '#,###'. Поскольку вы ожидаете значения в миллион и более, вам нужна более длинная маска. Например, число, записанное как 735790325, станет 735 790 325.
- В выражении return замените annualGenInLightbulbsRounded на annualGenInLightbulbsText.
- Щелкните Запустить для проверки выражения.
Выходные данные - "19,026", со вставленной запятой, как и ожидалось. Тип данных теперь текст.
Следующий шаг - создать полное предложение, содержащее это число в текстовом формате и объясняющее, что оно означает. Для этого вы будете использовать шаблонный литерал.
Примечание:
Шаблонный литерал - это в Arcade способ вставки в строку значений переменных и выражений. Шаблонные литералы заключаются в "обратные кавычки" (`) и используют синтаксис ${variableName} для вставки в строку переменных, выражений или любого другого не строкового значения. Более подробно о шаблонных литералах см. в разделе справки ArcGIS Arcade Структура и логика.
- В окне Выражение добавьте новую строку перед выражением return и скопируйте и вставьте следующее:
var popupSentence = `It's estimated that ${ plantName } generates enough electricity to power ${ annualGenInLightbulbsText } 60-watt incandescent light bulbs for a year.`
Примечание:
Шаблонный литерал должен находиться в отдельной строке в редакторе Arcade, так как переход к следующей строке приведет к созданию многострочного результата.
- В строке выражения return замените annualGenInLightbulbsText на popupSentence, чтобы проверить самую последнюю переменную.
- Нажмите кнопку Запустить.
На вкладке Выходные данные значением результата является все предложение, в котором переменные ${plantName} и ${annualGenInLightbulbsText} были заменены их текущими значениями.
- В окне выражения удалите код annualGenerationGwh = 10.
- Щелкните Готово, чтобы сохранить выражение и закрыть редактор выражений Arcade.
- На свернутой панели инструментов Содержание щелкните кнопку Сохранить и открыть и нажмите Сохранить, чтобы сохранить все изменения на карте.
В этом разделе вы вычислили количество 60-ваттных лампочек, которые каждая электростанция могла бы обеспечивать электроэнергией в течение года, представили это количество в доступном для чтения формате и создали предложение, поместив это число в контекст.
Добавление выражения Arcade во всплывающее окно
Теперь вы добавите сохраненное выражение Arcade во всплывающее окно и проверите его на слое Global Power Plants на карте.
- На панели Атрибутивные выражения нажмите кнопку назад.
- На панели Всплывающие окна щелкните Текст и щелкните Редактировать текст.
Откроется редактор текстов всплывающих окон с текстом, который в данный момент отображается во всплывающих окнах для слоя Global Power Plants. Вы добавите результат выражения Arcade в существующий текст.
- В редакторе текстов всплывающих окон поместите курсор на следующую строку под существующим текстом. Введите одну скобку: {.
Появится список доступных полей и выражений Arcade.
- Найдите и выберите только что созданное вами выражение Расчетная годовая выработка в лампочках.
Примечание:
Вы увидите, что созданное вами выражение Arcade указано в списке наряду с другими доступными полями атрибутов. Вы сможете легко распознать его благодаря содержательному имени, которое вы дали ему ранее.
- Выражение будет добавлено с уникальным идентификатором {expression/expr1}.
- Нажмите OK.
Всплывающее окно предварительного просмотра обновляется с настроенным выражением Arcade.
Теперь на карте вы откроете всплывающее окно для определенной электростанции, чтобы увидеть, как отображается выражение Arcade.
- На карте щелкните кнопку Поиск на вертикальной панели инструментов.
- В окне поиска введите Kitzingen, Bayern, Germany и нажмите Enter.
Карта приблизится к городу Китцинген в Германии.
- Щелкните по электростанции к западу от надписи Kitzingen. Она обозначена светло-зеленым цветом, потому что это источник солнечной энергии.
Всплывающее окно откроется, и появится созданное вами сообщение. Предложение содержит количество 60-ваттных лампочек, которые электростанция могла бы питать в течение года: 146 258.
- Закройте всплывающее окно.
Вы успешно создали выражение Arcade и отобразили его во всплывающем окне для слоя Global Power Plants. Но вам еще надо позаботиться об особом случае, когда в поле estimated_generation_gwh нет значения электростанции. Вы это сделаете в следующем разделе.
Проверка особого случая, когда данные отсутствуют
Теперь рассмотрим случай, когда данные атрибутов отсутствуют. Сначала вы изучите, как выглядит всплывающее окно в таком случае.
- Нажмите кнопку Поиск. В поисковом окне введите Antananarivo, Analamanga, Madagascar и нажмите Enter.
Карта приблизится к городу Антананариву на Мадагаскаре.
- Щелкните на электростанции к северо - западу от надписи Антананариву. Она обозначена красным цветом, потому что это - нефтяная энергетическая установка.
Всплывающее окно откроется, и появится созданное вами сообщение. Но упомянутое в нем количество 60-ваттных лампочек равно 0.
Это вводит в заблуждение: по оценкам, электростанция вырабатывает не 0 ГВт-ч в год; скорее, нет данных о годовой выработке электроэнергии. В таких случаях было бы лучше иметь другое сообщение, ясно говорящее о том, что данных нет. Вы вернетесь к выражению Arcade, чтобы выполнить это более правильное действие.
- Закройте всплывающее окно.
- На панели Слои убедитесь, что выбран слой Global Power Plants.
- На панели инструментов Настройки щелкните Всплывающие окна. На панели конфигурации Всплывающие окна щелкните Выражения атрибутов.
- Щелкните выражение Расчетная годовая выработка в лампочках, чтобы открыть его в редакторе.
- В окне редактора щелкните кнопку Запустить, чтобы убедиться, что получено то же поведение, что и во всплывающем окне.
На вкладке Выходные данные значение содержит то же предложение, что и во всплывающем окне с неверным количеством лампочек 0.
Примечание:
Помните, что по умолчанию редактор Arcade использует первую электростанцию в слое, гидроэлектростанцию Каяки в Афганистане, и ранее вы видели, что у этой электростанции нет значения для поля estimated_generation_gwh.
Добавление кода для обработки недостающих данных
Теперь вы добавите код в свое выражение, чтобы лучше выполнить работу, когда отсутствуют данные.
Чтобы лучше выполнить работу, когда отсутствуют данные, выражению Arcade требуется проверить, пусто ли значение поля estimated_generation_gwh или нет.
- Если это поле пусто, вы возвратите сообщение об отсутствии данных.
- Если это поле не пусто, вы продолжите создание сообщения о 60-ваттных лампочках.
Вы снова воспользуетесь функцией IsEmpty. Вы сохраните результаты этой проверки в новой переменной - generationCheck. Вам нужно выполнить эту проверку как можно скорее, поэтому вы добавите новый код сразу после того, как прочитаете значение поля estimated_generation_gwh.
- В окне Выражение добавьте строку сразу после строки, которая начинается с var annualGenerationGwh.
- Введите var generationCheck = .
- Щелкните вкладку Функции и найдите IsEmpty.
- Щелкните функцию IsEmpty, чтобы добавить ее в строку кода.
- На вкладке Функции нажмите стрелку рядом с функцией IsEmpty, чтобы узнать, как она работает.
isEmpty принимает только один параметр (в вашем случае он будет оценивать поле estimated_generation_gwh). Если это значение будет нулевым или пустой строкой, функция возвратит значение true; во всех других случаях возвращаемое функцией значение будет false. Вы сохраните результат функции IsEmpty в переменной, а затем определите, является ли эта переменная истинной или ложной.
- Когда вы закончите просмотр информации о функции IsEmpty, нажмите стрелку назад рядом с Функции.
- В окне Выражение замените текст заполнителя value на annualGenerationGwh. Теперь строка должна выглядеть так:
var generationCheck = isEmpty(annualGenerationGwh)
Затем вы добавите код, чтобы принять решение о том, что делать, исходя из значения переменной generationCheck. Для этого вы будете использовать выражение if (иначе называемое условным выражением или оператором). Синтаксис этого выражения - if (условие истинно) {что-то сделать}. Дополнительные сведения об условных утверждениях вы можете узнать в Структуре и логике ArcGIS Arcade.
- Добавьте новую строку после строки, которая начинается с var generationCheck.
- В новой строке введите if (generationCheck) {. Нажмите Enter. Пропустите строку и добавьте закрывающуюся скобку } без отступа.
Примечание:
Поскольку переменная generationCheck содержит true или false, вы, по сути, спрашиваете Arcade if(true) или if(false). Инструкции в скобках будут выполняться только в том случае, если generationCheck является true.
Теперь вы напишете код для выполнения желаемого действия, когда estimated_generation_gwh будет пустым. В скобках вы создадите сообщение, которое должно отображаться. Как и раньше, вы будете использовать шаблонный литерал, который сохраните в новой переменной.
- В скобках введите или скопируйте и вставьте следующий текст (все в одной строке):
var noGenerationTL = `${ plantName } does not have estimated annual generation data. Unable to return electricity generation in 60w incandescent light bulbs.`
В этом выражении используется переменная plantName, заданная ранее в вашем коде.
И, наконец, вы добавите утверждение return для возврата этого сообщения.
- Добавьте новую строку над закрывающей скобкой и введите return noGenerationTL.
- Щелкните Запустить для проверки скрипта.
На этот раз в сообщении нет вводящего в заблуждение текста о 0 лампочках. Вместо этого в нем объясняется, что для гидроэлектростанции Каяки в Афганистане отсутствуют данные.
Примечание:
Важно понимать, что когда Arcade выполняет оператор return, он считает, что это - конец выполнения кода, и любой оставшийся код ниже этого оператора будет игнорироваться. Это именно то поведение, которое вам нужно, поскольку оставшийся код применяется только к объектам, для которых имеются данные по расчетной годовой выработке электроэнергии.
Выполнение других проверок с помощью выражений консоли
В качестве заключительной задачи в редакторе выражений Arcade теперь вы узнаете другой метод проверки выражения Arcade. До этого вы использовали выражения return для просмотра результатов скриптов. Однако бывают случаи, когда вам необходимо визуализировать значения переменных по всему коду. Чтобы их увидеть, можно использовать выражения console, которые будут записывать значение интересующих вас переменных на вкладке Консоль. Например, вы пожелаете увидеть значение переменной generationCheck.
- В окне Выражение добавьте строку сразу после строки, которая начинается с var generationCheck.
- В новой строке введите console("generationCheck value:", generationCheck).
Первый параметр дает некоторое объяснение объекта, который вы заносите в консоль. Второй параметр - это сам объект.
- Нажмите кнопку Запустить.
Вкладка Выходные данные будет выглядеть так же, как и раньше, показывая конечный результат выражения Arcade.
- Перейдите на вкладку Консоль, чтобы просмотреть значение переменной, записанное в консоль.
Значение, содержащееся в переменной generationCheck равно true, потому что значение для estimated_generation_gwh является пустым.
- Попробуйте другие примеры значений для $feature["estimated_generation_gwh"] и проверьте это выражение для каждого из них, наблюдая за вкладками Выходные данные и Консоль. Добавьте примеры, которые дают либо значение true, либо значение false для generationCheck.
Примечание:
Вы можете добавить столько операторов console, сколько пожелаете, чтобы создать и настроить выражение Arcade. Однако рекомендуется удалить или закомментировать эти операторы после окончания работы над этим выражением.
Поскольку эта строка кода использовалась в целях тестирования, вы закомментируете выражение консоли.
- В начале выражения консоли введите //.
Выражение консоли теперь закомментировано и не будет запускать команду.
В приведенном ниже примере показано, как выглядит конечное выражение. Для описания каждого шага были добавлены комментарии.
// Calculate the kilowatt-hours (kWh) required to power a // 60w light bulb for a year var yearLightbulbPower = 0.06 * 24 * 365 // Save the power plant name and annual generation to a variable // for later use var plantName = $feature.name var annualGenerationGwh = $feature["estimated_generation_gwh"] // Check if there is a value in the estimated annual generation // attribute field. isEmpty(fieldOrValue) returns true if empty var generationCheck = isEmpty(annualGenerationGwh) // Write to the generationCheck value to the Message tab for // testing purposes (commented out) // console("generationCheck value:", generationCheck) // If there is not annual generation data, return a sentence for use // in the pop-up that informs the user about this. if (generationCheck) { var noGenerationTL = `${ plantName } does not have estimated annual generation data. Unable to return electricity generation in 60w incandescent light bulbs.` return noGenerationTL } // If the annual generation data is present, continue with the remainder of the script. // Convert the annual generation attribute from // gigawatt-hours to kilowatt-hours var annualGenerationKwh = annualGenerationGwh * 1000000 // Compute the annual electricity generation in light bulbs var annualGenInLightbulbs = annualGenerationKwh / yearLightbulbPower // Round the number var annualGenInLightbulbsRounded = Round(annualGenInLightbulbs, 0) // Format the number to add thousand separators var annualGenInLightbulbsText = Text( annualGenInLightbulbsRounded, '###,###,###,###') // Build the sentence for use in the pop-up // (Create a string using a template literal) var popupSentence = `It's estimated that ${ plantName } generates enough electricity to power ${ annualGenInLightbulbsText } 60-watt incandescent light bulbs for a year.` // Return the value return popupSentence
Примечание:
Поскольку предложение, обрабатывающее недостающие данные, находится внутри оператора if, вы можете при необходимости вложить остальную часть выражения else {<rest of expression>} в Arcade. Но, если однозначно не написать else {}, как вы видели, остальная часть выражения будет продолжать выполняться, если это условие в операторе if не будет соблюдено.
Теперь вы закроете редактор выражений Arcade и проверите всплывающие окна на карте.
- Щелкните Готово, чтобы сохранить свое выражение и закрыть редактор.
Теперь во всплывающем окне для Mandroseza показано корректное выражение.
- На панели Выражения всплывающего окна нажмите кнопку назад. Закройте панель Всплывающие окна.
- Сохраните карту.
- Щелкните по нескольким электростанциям на карте, чтобы убедиться, что ваше выражение Arcade работает правильно.
Примечание:
Вы можете искать те же два места, что и раньше ( Китцинген, Бавария, Германия и Антананариву, Аналаманга, Мадагаскар). Кроме того, можете попробовать и новые места.
Вы рассчитали количество электроэнергии, необходимое для питания 60-ваттной лампочки в течение года, а также количество 60-ваттных лампочек, которые каждая электростанция может питать в течение года. Вы округлили значение до целого числа и добавили разделители тысячных. Вы создали два разных предложения, которые могут быть возвращены во всплывающее окно – одно для сценариев, когда присутствуют данные о годовой выработке электроэнергии для электростанции, и другое - для случаев, когда эти данные присутствуют. Затем вы обеспечили, чтобы объекты электростанции на карте отображали соответствующее предложение, используя оператор if.
В этом руководстве вы познакомились с редактором выражений Arcade. Вы использовали Arcade для обозначения стран мира по потреблению электроэнергии на душу населения. Вы использовали Arcade, чтобы определить количество 60-ваттных лампочек, которые каждая электростанция может питать в течение года, и отобразили результат во всплывающем окне. Весь код Arcade был выполнен на лету, не оказывая влияния на базовые данные.
В этом руководстве была затронута лишь часть из того, что вы можете сделать с помощью Arcade. Более подробно о выражениях надписей и вычислении полей в Arcade, см.уроки Pump up Your Pop-ups With Arcade FeatureSets and the Living Atlas и Bring Colors From Your Map Into Your Pop-up Using Arcade.
Вы можете найти больше учебных пособий в галерее учебных пособий.