QGIS 3.0 точечный кластерный рендерер, возможно ли управлять порядком рендеринга (z-order)?

19

Я поиграл с новым рендерером точечных кластеров в QGIS 3.0.2, и это здорово - намного проще (и быстрее), чем кластеризация самостоятельно.

Чтобы показать, что я имею в виду, вот пример дорожно-транспортных происшествий в Эдинбурге с использованием данных STATS19 и радиуса 30 метров.

введите описание изображения здесь

Я не могу понять, как настроить z-порядок так, чтобы самые большие кластеры были нарисованы перед меньшими.

Мне известна переменная @cluster_size - это то, что я использую для масштабирования и раскраски символов. Для этого я использую помощников по размеру и цвету. Я удалил маркеры шрифта, чтобы удалить текст из каждого кластера.

Размер маркеров определяется следующим образом:

coalesce(scale_exp(@cluster_size, 0, 50, 1, 200, 0.57), 0)

Цвет маркеров определяется следующим образом:

coalesce(ramp_color('custom ramp',scale_linear( @cluster_size, 0, 50, 0, 1), '#000000')

Что я пробовал до сих пор: -

  • Уровни символов - не повезло; невозможно выбрать имя переменной.
  • Слой рендеринга> Управление порядком рендеринга объектов и выберите @cluster_size в качестве сортировки. Похоже, не имеет эффекта.
  • Градуированный стиль с использованием @cluster_size в качестве выражения не работает.

Кто-нибудь знает, возможно ли это, или это ограничение с этим конкретным средством визуализации?

Я знаю, что есть много других способов сделать это (буфер / пространственное соединение, плагины), но новый рендерер должен быть намного быстрее. Или я упустил что-то очевидное? :)

Стивен Кей
источник
Вероятно, это работает, принимая во внимание порядок в таблице атрибутов. Возможно, вы расположите их в порядке возрастания, чтобы самые большие из них были представлены как самые новые? Если нет функции «Сортировать функции по атрибутам», вы можете попробовать плагин MMQGIS (если он доступен для qgis 3)
Revo
спасибо @Revo. Кажется, что возможно измерить и отсортировать его по атрибуту (в том числе с помощью рендерера Cluster Point), но это работает только в одном масштабе. Я попытался использовать cluster_size, потому что размеры кластеров изменяются динамически, когда я увеличиваю / уменьшаю масштаб с использованием средства визуализации точек кластера. Я посмотрю на MMQGIS (он доступен для QGIS 3)
Стивен Кей,

Ответы:

2

Кажется, что реализация точечного кластера не допускает этого изначально.

Рассмотрим рендерер точечного кластера - он по существу анализирует и кластеризует точечные данные во время рендеринга, создавая новый псевдослой. Этот слой недоступен для пользователя. Нельзя запросить кластерную точку. Нельзя в поле вычислить атрибут @cluster_size .

Средство рендеринга кластера точек наследует порядок рендеринга из источника, используя порядок рендеринга элемента управления ( QgsFeatureRequest :: OrderByClause), оставляя открытой возможность некоторого умного обходного пути с использованием атрибутов и выражений, однако определенные схемы упорядочения не гарантируются согласованными.

В качестве примера рассмотрим точечный слой с рендерингом по возрастанию с помощью атрибута «Широта». Более северные точки оказываются поверх более южных точек. Средство визуализации кластера точек не имеет атрибута «Локатор» для своих новых функций, хотя оно унаследует некоторое подобие этого порядка из источника. Могут быть случаи, когда более южный кластер оказывается поверх более северного кластера из-за порядка исходных точек.

CrystallineEntity
источник
Благодарю. Это очень четкое объяснение, которое также отвечает на мой вопрос, возможно ли вычислить атрибут из кластеризованных точек, скажем, суммы населения, связанной с каждой исходной точкой. Очевидно, нет .... еще? Это была бы очень полезная функция. Любая идея о том, как это может быть достигнуто с помощью некоторого умного обходного пути (который не требует кодирования, хотя, поскольку я не (еще раз?) Хорош в этом), даже в статической манере? Я изо всех сил
пытаюсь
Вообще говоря, вы могли бы подойти к этому, реплицируя то, что делает средство визуализации кластера в сочетании с функцией «Порядок отображения элементов управления», используя атрибуты. Грубым первым проходом может быть буферизация точечного слоя, подсчет точек в буферизованных полигонах как атрибута в слое точек. Управляйте порядком рендеринга по этому атрибуту по возрастанию. Немного громоздко и не обязательно будет работать в разных масштабах.
CrystallineEntity
Я также призываю вас сделать запрос на добавление функции, который предоставит методу @cluster_size функцию «Порядок отображения элементов управления».
CrystallineEntity