Lorsque les points se chevauchent, il existe cette propriété qui permet d'afficher automatiquement le lot d'entre eux séparément autour de l'endroit où ils se trouvent, appelé «déplacement de point». Mais cela ne fonctionne pas pour les lignes, même si cela me semble tout à fait conceptuellement réalisable afin de réaliser quelque chose comme ça:
J'ai absolument besoin de voir les différentes lignes qui sont en réalité toutes au même endroit (je travaille dans les réseaux de télécommunications). La seule façon que je vois pour l'instant est de créer vraiment des lignes différentes comme dans l'image ci-dessus, créant ainsi des erreurs spatiales.
J'utilise QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
la source
la source
Réponses:
Je propose une approche qui ne revient qu'à un générateur de géométrie et une fonction personnalisée.
Avant de commencer, je tiens à souligner que je concentrerai l'attention sur l'explication des choses minimales à faire pour reproduire le résultat souhaité: cela signifie que certains autres paramètres mineurs (comme les tailles, les largeurs, etc.) devraient être facilement ajustés par vous pour mieux répondre à vos besoins.
Par conséquent, cette solution fonctionne à la fois pour les systèmes de référence géographiques et projetés: dans ce qui suit, j'ai supposé utiliser un CRS projeté (c'est-à-dire que les unités de mesure sont des mètres), mais vous pouvez les modifier en fonction de votre CRS.
Le contexte
Supposons que nous partions de cette couche de vecteur de ligne linéaire représentant les fils (les étiquettes représentent le nombre de fils qui se chevauchent (coïncidents)):
Solution
Tout d'abord, accédez à
Layer Properties | Style
, puis choisissez leSingle symbol
moteur de rendu.Dans la
Symbol selector
boîte de dialogue, choisissez unGeometry generator
type de calque de symbole et un typeLinestring / MultiLinestring
de géométrie. Cliquez ensuite sur l'Function Editor
onglet:Ensuite, cliquez sur
New file
et tapezdraw_wires
comme nom de la nouvelle fonction:Vous verrez qu'une nouvelle fonction a été créée et elle est répertoriée sur le côté gauche de la boîte de dialogue. Maintenant, cliquez sur le nom de la fonction et remplacez la valeur
@qgsfunction
par défaut par le code suivant (n'oubliez pas d'ajouter toutes les bibliothèques attachées ici):Une fois que vous avez fait cela, cliquez sur le
Load
bouton et vous pourrez voir la fonction dans leCustom
menu de laExpression
boîte de dialogue.Maintenant, tapez cette expression (voir l'image ci-dessous comme référence):
Vous venez d'exécuter une fonction qui dit, de manière imaginaire:
La seule chose que vous devez changer est la valeur des deux premiers paramètres comme vous le souhaitez, mais évidemment de manière raisonnable (laissez les autres paramètres de fonction tels qu'ils sont fournis).
Enfin, cliquez sur le
Apply
bouton pour appliquer les modifications.Vous verrez quelque chose comme ceci:
comme prévu.
ÉDITER
Selon une demande spécifique soulevée par le PO dans un commentaire:
J'ai légèrement modifié le code. La fonction suivante doit retourner le résultat attendu:
la source
layer=iface.activeLayer()
et ensuiteprint layer.wkbType()
. CliquezRun
: quelle est la valeur du numéro imprimé?