ArcGIS JS API: Рендерер больше не работает как раньше

Вопрос или проблема

У меня есть приложение на чистом JS, в котором я позволяю пользователю “настраивать” свое собственное аркадное выражение с помощью интерфейса. Я использую это аркадное выражение, чтобы масштабировать слой по-разному в зависимости от масштаба просмотра.

Рассмотрим следующее аркадное выражение (для тестирования):

var scale = When(
                  $view.scale >= 144447, 1,
                  $view.scale >= 72223 && $view.scale < 144447, 10,
                  $view.scale >= 36111 && $view.scale < 72223, 1,
                  $view.scale >= 18055 && $view.scale < 36111, 10,
                  $view.scale >= 9027 && $view.scale < 18055, 1,
                  $view.scale >= 4513 && $view.scale < 9027, 10,
                  $view.scale >= 2256 && $view.scale < 4513, 1,
                  $view.scale >= 1128 && $view.scale < 2256, 10,
                  10
                   );
return scale;

Для тестирования я просто изменил рендерер слоя, чтобы использовать это выражение:

layer.renderer.visualVariables[0].valueExpression = arcadeExp;

Этот код хорошо работает в версии 4.28, но не в 4.29 или 4.30.

Я пытался использовать методы из createVisualVariables и createContinuousRenderer и многие другие способы, но ни один из них не сработал в 4.29, только в 4.28.

Единственный способ, которым я мог это реализовать, был ручной обновление слоя с использованием layer.refresh(), когда масштаб изменялся.

Ответ или решение

Ваша проблема, связанная с изменениями в работе библиотеки ArcGIS JS API, вероятно, вызвана изменениями, которые были внедрены в версиях 4.29 и 4.30. Давайте рассмотрим несколько шагов для устранения вашей проблемы и получения желаемого результата.

1. Проверка версии API

Первое, что стоит сделать, — это убедиться, что вы используете правильные версии и зависимости ArcGIS JS API в вашем проекте. В возможных обновлениях могли быть внесены изменения в обработку визуальных переменных, которые затрагивают поведение вашего кода.

2. Обновление выражений Arcade

При необходимости обновите ваш Arcade-код, чтобы он следовал последним рекомендациям из документации. ArcGIS часто вносит изменения в поддержку синтаксиса или в поведение When.

Вот пример, как можно создать переменную масштаба более современным способом с использованием CreateContinuousRenderer:

layer.renderer = createContinuousRenderer({
    field: "yourField",
    minValue: 0,
    maxValue: 100,
    visualVariable: [{
        type: "size",
        valueExpression: `var scale = When(
                            $view.scale >= 144447, 1,
                            $view.scale >= 72223 && $view.scale < 144447, 10,
                            $view.scale >= 36111 && $view.scale < 72223, 1,
                            $view.scale >= 18055 && $view.scale < 36111, 10,
                            10);
                          return scale;`,
        stops: [
            {value: 1, size: 5},
            {value: 10, size: 15}
        ]
    }]
});

3. Обновление рендерера при изменении масштаба

Помимо ручного обновления слоя с помощью layer.refresh(), вы можете также попробовать слушать события изменения масштаба и обновлять визуальную переменную напрямую. Это может выглядеть так:

view.watch("scale", function(newScale) {
    layer.renderer.visualVariables[0].valueExpression = arcadeExp; // Переприсваиваем выражение
    layer.renderer.update(); // Принудительное обновление рендерера
});

4. Использование visualVariables

Проверьте и убедитесь, что ваша конфигурация visualVariables коректна. Если вы используете специальные типы visualVariables, убедитесь, что они поддерживаются в версии 4.29/4.30:

layer.renderer.visualVariables = [{
    type: "size",
    valueExpression: arcadeExp,
    stops: [
        { value: 1, size: 5 },
        { value: 10, size: 15 }
    ]
}];

Заключение

Если после всех этих изменений вы все еще сталкиваетесь с проблемами, проверьте журнал консоли на наличие сообщений об ошибках или предупреждений, которые могут указать на конкретные проблемы, связанные с совместимостью. Также полезно просмотреть примеры в документации ArcGIS, которые могут продемонстрировать правильное использование новых обновлений API, поскольку возможны изменения и в самой структуре данных.

Если у вас есть доступ к поддержке Esri, вы также можете обратиться туда за более детальной помощью, так как они могут предоставить информацию о возможных несовместимостях между версиями.

Оцените материал
Добавить комментарий

Капча загружается...