Funzionalità rotanti in ArcGIS per desktop usando ArcPy? [chiuso]


10

Ho una serie di poligoni che voglio ruotare.

Ogni poligono ha un angolo di rotazione e un punto di ancoraggio (coordinata xy) memorizzati come valori di campo.

Come succede, tutti i punti di ancoraggio si trovano su un vertice del poligono.

Qual è il modo migliore per farlo usando ArcGIS per Desktop e ArcPy?

So che possiamo ruotarli quando ci si trova in modalità di modifica, ma non voglio eseguirli tutti manualmente poiché sono tutti diversi.

Preferirei una risposta Python in modo da poterla automatizzare e inserirla nel mio flusso di lavoro.


Questo non è qualcosa che ho fatto ma sembra che tu stia affrontando un problema simile a quello discusso su gis.stackexchange.com/questions/13383/…
PolyGeo

Puoi farlo con ArcObjects. La soluzione programmatica sarebbe accettabile?
Jakub Sisak GeoGraphics,

Le tue caratteristiche sono in coordinate geografiche o proiettate?
blah238,

Jakub: sì, sarebbe preferibile una soluzione programmatica. Blah238 - coordinate proiettate (NAD 83 UTM Zone 10)
dklassen

1
Nello script Python il calcolo della coordinata Y ruotata richiede un segno più (addizione) invece del segno meno (sottrazione): y_transprime = Sin (t) * x_trans + Cos (t) * y_trans

Risposte:


10

Supponendo che tu stia utilizzando un sistema di coordinate proiettato ... (diventa molto più complicato se non lo sei)

Dato il punto di rotazione (X, Y) e l'angolo di rotazione t, è necessario ruotare ogni punto nel poligono in sequenza. Supponendo che il poligono sia costituito da punti in set in modo tale che set = [(x0, y0), (x1, y1), (x2, y2) ...]

È necessario ruotare ciascun punto nell'insieme, in sequenza, per formare l'insieme '= [(x0', y0 '), (x1', y1 '), (x2', y2 ') ...]

Per ruotare, devi prima trasformare il sistema di coordinate in origine spostando il punto di rotazione su (0,0). (x, y) è il punto da ruotare.

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

Questo dovrebbe essere piuttosto semplice da tradurre in uno script Python.


Per ulteriori idee su come eseguire questa operazione, è disponibile un'altra Domande e risposte che può essere utile denominata Come ruotare il poligono su un punto di ancoraggio utilizzando lo script Python? .
PolyGeo

Grazie @ user23492 per aver notato il segno errato. Modifica effettuata (due anni dopo)
blord-castillo

1

Ecco una discussione dai forum Esri che potrebbe essere una soluzione per te. Cerca la risposta di Esri. Implica la conversione dei poligoni in raster, l'utilizzo dello strumento Ruota raster e la riconversione in poligoni. Tuttavia, potrebbe esserci qualche preoccupazione in merito al fatto che i confini del poligono vengano incasinati mentre si esegue la conversione avanti e indietro tra raster / vettore.

La buona notizia è che può essere fatto tutto in Python senza chiamare ArcObjects. E dovresti essere in grado di utilizzare SearchCursor per afferrare gli angoli di rotazione e i punti di ancoraggio dalla tabella degli attributi.

Comunque, solo una possibile alternativa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.