Suite

Rotation des fonctionnalités de Qgis 2.7 (Dev) ?

Rotation des fonctionnalités de Qgis 2.7 (Dev) ?


Curieux de savoir si le code suivant contient une erreur flagrante qui a été négligée en ce qui concerne la rotation d'une seule entité surfacique.

Le*.geometry().rotate(… ) renvoie un '0', indiquant qu'il a réussi - pourtant l'affichage et la source de données ne représentent aucune rotation ; même après rechargement / actualisation du calque, de la légende et du canevas.

Soit le problème est de syntaxe, soit (car il s'agit d'une version Dev) une fonction pas encore pleinement opérationnelle ?

inputShapeRef.startEditing() featureSearch = QgsFeatureRequest().setFilterFid(int(inputShapeID)) featureRef = inputShapeRef.getFeatures(featureSearch) pour la fonctionnalité dans featureRef : feature.geometry().rotate(self.MaxRotation,self.baseCentroid) inputShapeRef.commit ()

METTRE À JOUR: Une seule ligne de code manquait et voici le script mis à jour. Fait pivoter avec succès la forme jusqu'à l'angle souhaité ; assez rapidement !

inputShapeRef.startEditing() featureSearch = QgsFeatureRequest().setFilterFid(int(inputShapeID)) featureRef = inputShapeRef.getFeatures(featureSearch) pour la fonctionnalité dans featureRef : feature.geometry().rotate(self.MaxRotation,self.baseCentroid) inputShapeRef.changeGeometry (feature.id(),feature.geometry()) # <=== + = succès inputShapeRef.commitChanges()

RÉFLEXIONS FINALES / QUESTIONS :

Est-ce que quelqu'un sait si cette fonctionnalité s'applique à une couche entière, à l'étendue des couches ou à la sélection de plusieurs entités ? La fonction de traitement de traduction de SAGA répond à ce besoin - mais a soif de données. La faible surcharge de données et le retour rapide de cette nouvelle rotation d'entité unique seraient très bénéfiques pour une couche entière ou une sélection de plusieurs entités à l'intérieur.

Par exemple, disons qu'un tableau de points doit être pivoté en synchronisation avec un polygone de délimitation associé - plutôt que de faire pivoter chaque point individuellement, existe-t-il un moyen de faire pivoter l'ensemble du tableau simultanément sans créer un nouveau jeu de données ?


Vous ne modifiez pas le vecteur, mais les "copies" des fonctionnalités sont obtenues avec getFeatures. Vous devez obtenir le feature.id() et updateGeometry en utilisant dataProvider du vecteur ou directement en utilisant les méthodes de la couche vectorielle (dans une session d'édition)

vous pouvez trouver la référence des méthodes dans: pour QgsVectorDataProvider: virtual bool changeGeometryValues ​​(QgsGeometryMap &geometry_map) (vous avez des références comment faire dans le livre de recettes pyqgis) Après avoir à triggerRepaint

pour QgsVectorLayer : bool changeGeometry (QgsFeatureId fid, QgsGeometry *geom) après commitChanges, pas besoin de triggerRepaint

Cordialement, Luigi Pirelli


Voir la vidéo: QGIS Basics #39: Rotating Features