¿Funciones rotativas en ArcGIS for Desktop con ArcPy? [cerrado]

10

Tengo una serie de polígonos que quiero rotar.

Cada polígono tiene un ángulo de rotación y un punto de anclaje (coordenada xy) almacenados como valores de campo.

Como sucede, todos los puntos de anclaje están en un vértice del polígono.

¿Cuál es la mejor manera de hacer esto usando ArcGIS for Desktop y ArcPy?

Sé que podemos rotarlos en el modo de edición, pero no quiero hacerlos todos manualmente, ya que son diferentes.

Preferiría una respuesta de Python para poder automatizarla e incorporarla a mi flujo de trabajo.

dklassen
fuente
Esto no es algo que haya hecho, pero parece que se enfrenta a un problema similar al discutido en gis.stackexchange.com/questions/13383/…
PolyGeo
Puede hacer esto con ArcObjects. ¿Sería aceptable la solución programática?
Jakub Sisak GeoGraphics
¿Sus características están en coordenadas geográficas o proyectadas?
blah238
Jakub: sí, se preferiría una solución programática. Blah238 - coordenadas proyectadas (NAD 83 UTM Zona 10)
dklassen
1
En el script de Python, el cálculo de la coordenada Y rotada necesita un signo más (suma) en lugar del signo menos (resta): y_transprime = Sin (t) * x_trans + Cos (t) * y_trans

Respuestas:

10

Asumiendo que está utilizando un sistema de coordenadas proyectadas ... (se vuelve mucho más complicado si no lo está)

Dado el punto de rotación (X, Y) y el ángulo de rotación t, debe rotar cada punto en el polígono en secuencia. Suponiendo que el polígono está formado por puntos en el conjunto, de modo que el conjunto = [(x0, y0), (x1, y1), (x2, y2) ...]

Debe rotar cada punto del conjunto, en secuencia, para formar el conjunto '= [(x0', y0 '), (x1', y1 '), (x2', y2 ') ...]

Para rotar, primero debe transformar el sistema de coordenadas en origen moviendo el punto de rotación a (0,0). (x, y) es el punto a rotar.

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

Esto debería ser bastante sencillo de traducir a un script de Python.

castillo-blord
fuente
Para obtener más ideas sobre cómo hacer esto, hay otras preguntas y respuestas que pueden ser útiles llamadas ¿Cómo giro el polígono sobre un punto de anclaje usando el script de Python? .
PolyGeo
Gracias @ user23492 por notar el signo incorrecto. Cambio realizado (dos años después)
blord-castillo
1

Aquí hay una discusión de los foros de Esri que puede ser una solución para usted. Busque la respuesta de Esri. Implica convertir los polígonos en rásteres, usar la herramienta Rotar ráster y volver a convertirlos en polígonos. Sin embargo, puede haber cierta preocupación acerca de que los límites del polígono se desordenen al convertir de un lado a otro entre ráster / vector.

La buena noticia es que todo se puede hacer en Python sin llamar a ArcObjects. Y debería poder usar SearchCursor para tomar sus ángulos de rotación y puntos de anclaje de la tabla de atributos.

De todos modos, solo una posible alternativa.

Baltok
fuente