Rendu de cluster de points QGIS 3.0, est-il possible de contrôler l'ordre de rendu (ordre z)?

19

J'ai joué avec le nouveau rendu de cluster de points dans QGIS 3.0.2 et c'est génial - beaucoup plus facile (et plus rapide) que d'avoir à faire le clustering vous-même.

Pour montrer ce que je veux dire, voici un exemple d'accidents de la route à Édimbourg en utilisant les données STATS19 et un rayon de 30 mètres.

entrez la description de l'image ici

Je ne peux pas déterminer comment configurer l'ordre z de sorte que les plus grands clusters soient dessinés devant les plus petits.

Je connais la variable @cluster_size - c'est ce que j'utilise pour mettre à l'échelle et colorer les symboles. Pour cela, j'utilise les assistants de taille et de couleur. J'ai supprimé les marqueurs de police pour supprimer le texte de chaque cluster.

La taille des marqueurs est définie comme suit: -

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

La couleur des marqueurs est définie comme suit: -

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

Ce que j'ai essayé jusqu'à présent: -

  • Niveaux de symboles - Pas de chance; impossible de sélectionner un nom de variable.
  • Rendu des calques> Contrôler l'ordre de rendu des entités et choisissez @cluster_size comme tri. Ne semble pas avoir d'effet.
  • Style gradué utilisant @cluster_size car l'expression ne fonctionne pas.

Est-ce que quelqu'un sait si c'est possible, ou est-ce une limitation avec ce moteur de rendu particulier?

Je sais qu'il y a beaucoup d'autres façons de le faire (tampon / jointure spatiale, plugins), mais le nouveau rendu devrait être beaucoup plus rapide. Ou ai-je oublié quelque chose d'évident? :)

Steven Kay
la source
Cela fonctionne probablement en tenant compte de l'ordre dans la table attributaire. Peut-être les organisez-vous par ordre croissant pour que les plus grands soient rendus comme les plus récents? S'il n'y a pas de fonction 'Trier les fonctionnalités par attribut', vous pouvez essayer le plugin MMQGIS (s'il est disponible pour qgis 3)
Revo
merci @Revo. Il semble possible de le dimensionner et de le trier sur un attribut (y compris avec le rendu Cluster Point), mais cela ne fonctionne qu'à une seule échelle. J'ai essayé d'utiliser cluster_size car les tailles de cluster changent dynamiquement lorsque je fais un zoom avant / arrière en utilisant le rendu de point de cluster. Je vais jeter un œil à MMQGIS (il est disponible pour QGIS 3)
Steven Kay

Réponses:

2

Il semble que l'implémentation du cluster de points ne le permette pas nativement.

Considérez le rendu de cluster de points - il analyse et clusterise essentiellement les données de points au moment du rendu, créant une nouvelle pseudo-couche. Cette couche n'est pas accessible à l'utilisateur. On ne peut pas interroger un point en cluster. On ne peut pas calculer sur le terrain un attribut @cluster_size .

Le rendu de cluster de points hérite de l'ordre de rendu de la source à l'aide de l'ordre de rendu de la fonctionnalité de contrôle ( QgsFeatureRequest :: OrderByClause), laissant la possibilité d'une solution de contournement intelligente à l'aide d'attributs et d'expressions, mais certains schémas de classement ne sont pas garantis pour être cohérents.

À titre d'exemple, considérons une couche de points avec un rendu ordonné croissant par un attribut "Latitude". Les points les plus au nord sont rendus au sommet des points plus au sud. Le rendu de cluster de points n'a pas d'attribut "Latitude" pour ses nouvelles fonctionnalités, bien qu'il hérite d'un semblant de cet ordre de la source. Il peut y avoir des cas où un cluster plus au sud se rend au sommet d'un cluster plus au nord, en raison de l'ordre des points d'origine.

Entité cristalline
la source
Merci. C'est une explication très claire, qui répond également à ma question de savoir s'il est possible de calculer un attribut à partir des points groupés, c'est-à-dire une somme de la population associée à chaque point d'origine. Clairement pas ... encore? Ce serait une fonctionnalité très utile. Une idée sur la façon dont cela peut être réalisé avec une solution de contournement intelligente (qui ne nécessite pas de codage, car je ne suis pas (encore, encore?) Bon), même de manière statique? J'ai du mal à trouver un outil pour regrouper les points de la même manière que le fait le cluster-
renderer
De manière générale, vous pouvez aborder cela en répliquant ce que fait le rendu de cluster en conjonction avec la fonction «Contrôle de l'ordre de rendu des fonctionnalités» à l'aide d'attributs. Une première passe approximative pourrait consister à mettre en tampon une couche de points, à compter les points dans les polygones tamponnés comme attribut dans la couche de points. Contrôlez l'ordre de rendu par cet attribut croissant. Un peu lourd et ne fonctionnera pas nécessairement à différentes échelles.
CrystallineEntity
Je vous encourage également à faire une demande de fonctionnalité, qui exposerait la méthode @cluster_size à la fonction 'Contrôle de l'ordre de rendu des fonctionnalités'.
CrystallineEntity