Suite

Symboliser entièrement un marqueur de champ vectoriel dans PyQGIS


Je conçois un symbole pour une application externe qui doit être un marqueur de champ vectoriel combiné à un simple marqueur de point, affichant une ligne à un certain angle autour du point central. Dans PyQGIS, il est facile d'instancier la classe de champ vectoriel, ainsi que le type de champ (Polar) et les unités d'angle (Degrés). Cependant, comme c'est polaire, je dois définir les attributs de longueur et d'angle à partir du tableau du calque que j'essaie d'afficher. Je vois dans la documentation de l'API pour le QgsVectorFieldSymbolLayer qu'il existe des fonctions pour définir les attributs X et Y, ce qui est nécessaire pour un marqueur de champ vectoriel cartésien, mais non pertinent pour un marqueur de champ vectoriel polaire. J'ai besoin de quelque chose comme "setLengthAttribute()" et "setAngleAttribute()", un peu comme ce qui est possible dans l'interface graphique QGIS :

Mon extrait de code pertinent ressemble actuellement à ceci :

symbol = QgsMarkerSymbolV2.createSimple({}) symbol.deleteSymbolLayer(0) symbol_layer = QgsSimpleMarkerSymbolLayerV2() symbol_layer.setSize(.5) symbol_layer.setColor(QColor("jaune")) symbol_layer.setOutputSymbolUnit(QgsSymbolV2.MapyerLayer symbol_layer) symbol_layer = QgsVectorFieldSymbolLayer() symbol_layer.setColor(QColor("jaune")) symbol_layer.VectorFieldType(QgsVectorFieldSymbolLayer.Polar) symbol_layer.AngleUnits(QgsVectorFieldSymbolLayer.Degrees) # longueurAttribut ? couche_symbole. # Attribut d'angle ? symbol.appendSymbolLayer(symbol_layer) renderer = QgsSingleSymbolRendererV2(symbole) self.mylayer.setRendererV2(renderer)

Une idée de comment définir l'attribut d'angle et de longueur?


Vous avez deux options :

  • en utilisant directement l'API :
symbol_layer.setXAttribute("length_attribute") symbol_layer.setYAttribute("angle_attribute")
  • en utilisant les propriétés définies par les données :
symbol_layer.setDataDefinedProperty("x_attribute", "length_attribute") symbol_layer.setDataDefinedProperty("y_attribute", "angle_attribute")

J'espère que cela t'aides.


Voir la vidéo: QGIS Python PyQGIS - Get vector geometry (Octobre 2021).