Je voudrais faire pivoter un ensemble de points vectoriels dans QGIS d'un nombre arbitraire de degrés autour d'un point central (ou point arbitraire).
Ceci est similaire à une question récente sur la création d'une grille régulière ; il a été suggéré d'utiliser l'outil "Transformation affine" (qui, je suppose, signifiait le plugin) pour faire pivoter ou déplacer une grille de points d'un angle ou d'une distance arbitraire. Je soupçonne que je ne comprends pas comment cela fonctionne et que je n'ai pas réussi à le faire fonctionner.
Je crée une grille régulière de points dans QGIS et je m'assure que la zone UTM est correctement définie pour la couche et le projet, j'active l'édition pour la couche, puis j'ouvre la boîte de dialogue du plugin (qgsAffine):
Je sélectionne «calque entier», puis, voulant faire pivoter tout le champ de points de 15 °, j'en place 15 dans les deux cases «rotation» (qui peuvent être là où les choses tournent mal). L'opération entraîne la rotation des points quelque part hors de la planète!
Est-ce le bon outil pour le travail? Je voudrais faire pivoter un ensemble de points autour de leur centre commun, idéalement.
Mise à jour : qgsAffine n'est qu'une pensée; si nous pouvons le faire dans n'importe quel outil QGIS, je serai heureux!
Mise à jour 2 : qgsAffine est utilisable SI vous connaissez les bons numéros à brancher (voir réponse ci-dessous, merci Mike!). La feuille de calcul / calculatrice fonctionne bien, ou voici la fonction R pour obtenir les chiffres directement:
## Compute correct affine numbers for qgsAffine plugin
affine <- function(originX, originY, rotAngle) {
A <- rotAngle * pi / 180
scaleX <- scaleY <- cos(A)
rotX <- sin(A)
rotY <- -sin(A)
transX <- originX - cos(A) * originX + sin(A) * originY
transY <- originY - sin(A) * originX - cos(A) * originY
aff <- data.frame(scaleX, scaleY, rotX, rotY, transX, transY)
return(aff)
}
Ainsi, faire pivoter une grille de points dans le nord de l'Ouganda (UTM 36N), affine(578988, 419210, 30)
donne:
scaleX scaleY rotX rotY transX transY
1 0.8660254 0.8660254 0.5 -0.5 287174.7 -233330.5
... qui, entré dans la boîte de dialogue qgsAffine, fait pivoter correctement les points.
la source
Réponses:
Vous pouvez le faire dans PostGIS en utilisant ST_Affine . La fonctionnalité de rotation autour d'un point arbitraire a été ajoutée à ST_Rotate pour PostGIS 2.0.
Si vous avez une version antérieure (comme PostGIS 1.5, ou même antérieure), vous pouvez ajouter ces fonctions:
Voir les exemples à ST_Rotate pour avoir une idée sur la façon de l'utiliser pour faire pivoter une géométrie autour d'un point x , y , y compris le centroïde (centre commun).
Parce que nous aimons tous les mathématiques, la matrice de transformation des fonctions ci-dessus est représentée comme suit:
Où θ est la rotation dans le sens antihoraire autour d'une origine, x0 est l'abscisse / longitude du point d'origine et y0 est l'ordonnée / latitude. Ces mathématiques pourraient éventuellement être adaptées à tout outil de transformation affine.
Pour utiliser l'outil qgsAffine, vous devez comprendre où vont les valeurs de la matrice. Un bon modèle de feuille de calcul est également requis pour effectuer les pré-calculs. La boîte de dialogue qgsAffine ressemble à ceci:
où:
Par exemple, si vous souhaitez faire pivoter un polygone de 30 ° dans le sens des aiguilles d'une montre autour de 42 ° S, 174 ° E, voici vos entrées dans votre feuille de calcul:
Ensuite, copiez / collez les résultats d'une feuille de calcul dans la case de droite. En utilisant l'ordre de tabulation dans la boîte de dialogue:
Le même exemple de PostGIS ressemblerait à ceci:
la source
Je n'ai jamais essayé de faire pivoter les couches vectorielles à l'aide de qgsAffine et je pense que je ne suis pas seul. Cette question a été posée récemment sur le forum QGIS et une solution a été trouvée, en utilisant (gratuitement) OpenJump. Jetez un oeil à ce fil (vers la fin):
http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02
Bien sûr, vous pouvez également utiliser cet outil juste pour faire une simple rotation de vos données.
la source