Rotieren von Features in ArcGIS for Desktop mit ArcPy? [geschlossen]

10

Ich habe eine Reihe von Polygonen, die ich drehen möchte.

Jedes Polygon hat einen Drehwinkel und einen Ankerpunkt (xy-Koordinate), die als Feldwerte gespeichert sind.

Zufällig befinden sich alle Ankerpunkte auf einem Scheitelpunkt des Polygons.

Was ist der beste Weg, dies mit ArcGIS für Desktop und ArcPy zu tun?

Ich weiß, dass wir sie im Bearbeitungsmodus drehen können, aber ich möchte sie nicht alle manuell ausführen, da sie alle unterschiedlich sind.

Ich würde eine Python-Antwort bevorzugen, damit ich sie automatisieren und in meinen Arbeitsablauf integrieren kann.

dklassen
quelle
Dies ist nicht etwas, was ich getan habe, aber Sie scheinen mit einem ähnlichen Problem konfrontiert zu sein wie das, das unter gis.stackexchange.com/questions/13383/…
PolyGeo
Sie können dies mit ArcObjects tun. Wäre eine programmatische Lösung akzeptabel?
Jakub Sisak GeoGraphics
Befinden sich Ihre Features in geografischen oder projizierten Koordinaten?
blah238
Jakub - ja, eine programmatische Lösung wäre vorzuziehen. Blah238 - projizierte Koordinaten (NAD 83 UTM Zone 10)
Klassen
1
Im Python-Skript benötigt die Berechnung der gedrehten Y-Koordinate ein Pluszeichen (Addition) anstelle des Minuszeichens (Subtraktion): y_transprime = Sin (t) * x_trans + Cos (t) * y_trans

Antworten:

10

Angenommen, Sie verwenden ein projiziertes Koordinatensystem ... (wird viel komplizierter, wenn Sie es nicht sind)

Bei gegebenem Drehpunkt (X, Y) und Drehwinkel t müssen Sie jeden Punkt im Polygon nacheinander drehen. Angenommen, das Polygon besteht aus Punkten in der Menge, so dass set = [(x0, y0), (x1, y1), (x2, y2) ...]

Sie müssen jeden Punkt in der Menge nacheinander drehen, um die Menge '= [(x0', y0 '), (x1', y1 '), (x2', y2 ') ... zu bilden.]

Um sich zu drehen, müssen Sie zuerst das Koordinatensystem in den Ursprung transformieren, indem Sie den Drehpunkt auf (0,0) verschieben. (x, y) ist der zu drehende Punkt.

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

Dies sollte ziemlich einfach in ein Python-Skript zu übersetzen sein.

Blord-Castillo
quelle
Weitere Ideen dazu finden Sie in einer weiteren hilfreichen Frage und Antwort: Wie drehe ich das Polygon mithilfe eines Python-Skripts um einen Ankerpunkt? .
PolyGeo
Vielen Dank an @ user23492 für das falsche Vorzeichen. Änderung vorgenommen (zwei Jahre später)
Blord-Castillo
1

Hier ist eine Diskussion aus den Esri-Foren, die eine Lösung für Sie sein könnte. Suchen Sie nach der Antwort von Esri. Dazu müssen die Polygone mit dem Raster-Werkzeug Drehen in Raster konvertiert und wieder in Polygone konvertiert werden. Es kann jedoch Bedenken geben, dass die Polygongrenzen beim Konvertieren zwischen Raster / Vektor durcheinander geraten.

Die gute Nachricht ist, dass alles in Python möglich ist, ohne ArcObjects aufzurufen. Und Sie sollten SearchCursor verwenden können, um Ihre Drehwinkel und Ankerpunkte aus der Attributtabelle zu erfassen.

Jedenfalls nur eine mögliche Alternative.

Baltok
quelle