Suite

Comment faire pivoter un symbole

Comment faire pivoter un symbole


Je travaille en c++/python/QT 4.5 avec l'api qgis 2.8.2

Mon application reçoit des données d'un port de communication qui indiquent le changement de position d'un objet affiché sur la carte et représenté par un svg ( une flèche ) les données reçues contiennent la nouvelle position x et y et la rotation en degré

Je veux faire pivoter le symbole avec la valeur reçue, si la valeur est égale à 0 il n'y a pas de rotation, si la valeur est de 30 alors faites pivoter le symbole de 30 degrés dans le sens des aiguilles d'une montre

Je ne sais pas comment faire, peut être que certains d'entre vous avaient déjà travaillé sur ce genre de point et partagé leur démarche


Dans qgis api 2.8.2, j'ai trouvé un moyen simple de le faire mais cela correspond à mon application peut-être cela vous incite à trouver un autre moyen

en fait pour chaque point ou piste je crée une couche vectorielle et je change la valeur de l'angle de la couche vectorielle

QStringList MyTargetPropertyName; MyTargetPropertyName << "remplir" << "nom" << "contour" << "largeur-contour" << "taille" << "angle" ; QStringList MyTargetPropertyValue1; MyTargetPropertyValue1 << "#f3e54d" << lTargetIcoType1 << "#000000" << "6.8" << "6" << lAngle; for (int i = 0; i < MyTargetPropertyName.size(); i++) MyTargetStyle1.insert(MyTargetPropertyName.at(i),MyTargetPropertyValue1.at(i)); MySymbolLayer1 = QgsSvgMarkerSymbolLayerV2::create(MyTargetStyle1); QListe MaListeCalque; MyLayerList << MySymbolLayer1; QgsSymbolV2* newsymbol = QgsSymbolV2::defaultSymbol( pLayer->geometryType()); nouveausymbole->deleteSymbolLayer(0) ; nouveausymbole->insertSymbolLayer(0, MyLayerList[0]);

ce n'est qu'un extrait mais l'essentiel du code est ici.


Je recherche un extrait de code qui répond à la question décrite ci-dessus, car je dois faire pivoter chaque symbole du champ d'azimut de la valeur fournie dans la table attributaire.

Dans le livre de recettes python de QGIS, il existe une référence qui mentionne la façon d'imprimer l'angle ().

pour i dans xrange(symbol.symbolLayerCount()): lyr = symbol.symbolLayer(i) print "%d: %s" % (i, lyr.layerType())

Cela pourrait être fait pour obtenir l'angle : lyr.angle(), mais cela ne fait pas tourner le symbole.

Dans ce même chapitre, vous pouvez trouver cette section Création de types de couches de symboles personnalisés qui décrit un processus qui, je suis sûr, pourrait être utilisé à cette fin. Quand j'exécuteQgsSymbolLayerV2Registry.instance().addSymbolLayerType(FooSymbolLayerMetadata()), cependant j'obtiens cette erreur : Traceback (appel le plus récent en dernier) : File "", ligne 1, dans File "C:/Users/EGARFEL/Desktop/Optimi Documents/atmMobilis/qgisScript.py", ligne 76, dans QgsSymbolLayerV2Registry. instance().addSymbolLayerType(FooSymbolLayerMetadata())

Fichier "C:/Users/EGARFEL/Desktop/Optimi Documents/atmMobilis/qgisScript.py", ligne 58, dans __init__ QgsSymbolLayerV2AbstractMetadata.__init__(self, "FooMarker", QgsSymbolV2.Marker) TypeError : les arguments ne correspondent à aucune surcharge QgsSymbolLayerV2AbstractMetadata(QString, QString, QgsSymbolV2.SymbolType): l'argument 2 a un type inattendu 'SymbolType' QgsSymbolLayerV2AbstractMetadata(QgsSymbolLayerV2AbstractMetadata): l'argument 1 a un type inattendu 'str'

Voir la vidéo: Comment faire pivoter un fichier PDF sous Windows