Rotation des entités dans ArcGIS for Desktop à l'aide d'ArcPy? [fermé]

10

J'ai une série de polygones que je veux faire pivoter.

Chaque polygone a un angle de rotation et un point d'ancrage (coordonnée xy) stockés en tant que valeurs de champ.

En l'occurrence, tous les points d'ancrage se trouvent sur un sommet du polygone.

Quelle est la meilleure façon de procéder à l'aide d'ArcGIS for Desktop et d'ArcPy?

Je sais que nous pouvons les faire pivoter en mode édition, mais je ne veux pas les faire tous manuellement car ils sont tous différents.

Je préférerais une réponse Python pour pouvoir l'automatiser et l'intégrer à mon flux de travail.

dklassen
la source
Ce n'est pas quelque chose que j'ai fait, mais vous semblez être confronté à un problème similaire à celui discuté sur gis.stackexchange.com/questions/13383/…
PolyGeo
Vous pouvez le faire avec ArcObjects. Une solution programmatique serait-elle acceptable?
Jakub Sisak GeoGraphics
Vos entités sont-elles en coordonnées géographiques ou projetées?
blah238
Jakub - oui, une solution programmatique serait préférable. Blah238 - coordonnées projetées (NAD 83 UTM Zone 10)
dklassen
1
Dans le script Python, le calcul de la coordonnée Y pivotée nécessite un signe plus (addition) au lieu du signe moins (soustraction): y_transprime = Sin (t) * x_trans + Cos (t) * y_trans

Réponses:

10

En supposant que vous utilisez un système de coordonnées projeté ... (devient beaucoup plus compliqué si vous ne l'êtes pas)

Étant donné le point de rotation (X, Y) et l'angle de rotation t, vous devez faire pivoter chaque point du polygone en séquence. En supposant que le polygone est construit à partir de points dans l'ensemble tels que ensemble = [(x0, y0), (x1, y1), (x2, y2) ...]

Vous devez faire pivoter chaque point de l'ensemble, en séquence, pour former l'ensemble '= [(x0', y0 '), (x1', y1 '), (x2', y2 ') ...]

Pour faire pivoter, vous devez d'abord transformer le système de coordonnées à l'origine en déplaçant le point de rotation sur (0,0). (x, y) est le point à faire pivoter.

x_trans = x - X
y_trans = y - Y
x_transprime = Cos(t) * x_trans - Sin(t) * y_trans
y_transprime = Sin(t) * x_trans + Cos(t) * y_trans
x_prime = x_transprime + X
y_prime = y_transprime + Y

Cela devrait être assez simple à traduire en un script python.

blord-castillo
la source
Pour plus d'idées sur la façon de procéder, il existe un autre Q&R qui peut être utile appelé Comment faire pivoter le polygone autour d'un point d'ancrage en utilisant un script python? .
PolyGeo
Merci @ user23492 d'avoir noté le signe incorrect. Changement effectué (deux ans plus tard)
blord-castillo
1

Voici une discussion sur les forums Esri qui peut être une solution pour vous. Recherchez la réponse d'Esri. Cela implique la conversion des polygones en rasters, à l'aide de l'outil Rotation du raster et la reconversion en polygones. Cependant, il peut y avoir une certaine inquiétude quant aux limites des polygones qui sont gâchées lors de la conversion entre raster / vecteur.

La bonne nouvelle est que tout cela peut être fait en Python sans appeler ArcObjects. Et vous devriez pouvoir utiliser SearchCursor pour saisir vos angles de rotation et points d'ancrage dans la table attributaire.

Quoi qu'il en soit, juste une alternative possible.

Baltok
la source