Erstellen einer Linie mit unterschiedlichem Abstand vom Ursprungspunkt mit Python in ArcGIS Desktop?

11

Ich versuche, ein Linien-Feature aus einem einzelnen Punkt mit einem festgelegten Abstand und Winkel mithilfe von ArcGIS und Python (ArcPy) zu erstellen.

Ich habe einen Punkt bei diesen Koordinaten: X = 400460,99, Y = 135836,76

Ab diesem Punkt möchte ich eine 800 Meter lange Linie in einem Winkel von 15 Grad zu diesem Punkt erstellen.

Ich weiß nicht, wie der resultierende Endpunkt aussehen wird.

Meine Daten werden in Maryland State Plane South - Meters projiziert.

J Graham
quelle

Antworten:

13

Der Endpunkt ist natürlich um 800 Meter vom Ursprung entfernt. Die Verschiebung in Richtung der x-Koordinate ist proportional zum Sinus des Winkels (östlich von Norden) und die Verschiebung in Richtung der y-Koordinate ist proportional zum Cosinus des Winkels.

Somit erhalten wir aus sin (15 Grad) = sin (0,261799) = 0,258819 und cos (15 Grad) = 0,965926

x-displacement = 800 sin(15 degrees) = 800 * 0.258819 = 207.055 

y-displacement = 800 cos(15 degrees) = 800* 0.965926 = 772.741.

Daher sind die Endpunktkoordinaten (400460,99 + 207,055, 135836,76 + 772,741) = (400668,05, 136609,49).

whuber
quelle
Ich bin etwas verwirrt. Wenn sin (Theta alias 15 Grad) = y / r und y = r * sin (15 Grad), sollten die Formeln für die x- und y-Verschiebungen nicht umgeschaltet werden?
Zicky
@Ziggy Ihre Formeln sind nicht die richtigen für einen Winkel, der östlich von Norden gemessen wird. Sie versuchen, Formeln für einen Winkel nördlich von Ost anzuwenden.
whuber
Wie konnten Sie erkennen, dass der Standort und der Winkel östlich von Norden liegen? Dies könnte außerhalb des Rahmens dieser Kommentare liegen. Haben Sie jedoch Ressourcenempfehlungen, wo Sie grundlegende Triggerkonzepte lernen und auf GIS-Fragen wie diese anwenden können?
Zicky
1
@Ziggy Herkömmlicherweise messen Geographen Winkel in Grad östlich von Norden, aber es gibt viele andere Möglichkeiten. Deshalb habe ich darauf geachtet, festzustellen, was ich unter dem "Winkel" verstehe und wie er gemessen wird. Personen, die andere Konventionen verwenden, müssen nur die üblichen Anpassungen vornehmen, um diese Lösung anzuwenden. Ich bin kein Experte für Ressourcen zum Lernen von Trig: Ich habe es vor langer Zeit aus einem Algebra-Text der High School gelernt, der mehr als ausreichend war, um alle GIS-Fragen zu beantworten. Sie müssen sowieso nicht viel Trig wissen .
whuber
13

Aufbauend auf der Antwort von @ whuber würden Sie, wenn Sie dies in Python implementieren möchten , die Verschiebung wie angegeben berechnen und dann eine Ausgabe als Sammlung von Punkten wie folgt erstellen:

import arcpy
from math import radians, sin, cos

origin_x, origin_y = (400460.99, 135836.7)
distance = 800
angle = 15 # in degrees

# calculate offsets with light trig
(disp_x, disp_y) = (distance * sin(radians(angle)),\
                    distance * cos(radians(angle)))
(end_x, end_y) = (origin_x + disp_x, origin_y + disp_y)

output = "offset-line.shp"
arcpy.CreateFeatureClass_management("c:\workspace", output, "Polyline")
cur = arcpy.InsertCursor(output)
lineArray = arcpy.Array()

# start point
start = arcpy.Point()
(start.ID, start.X, start.Y) = (1, origin_x, origin_y)
lineArray.add(start)

# end point
end = arcpy.Point()
(end.ID, end.X, end.Y) = (2, end_x, end_y)
lineArray.add(end)

# write our fancy feature to the shapefile
feat = cur.newRow()
feat.shape = lineArray
cur.insertRow(feat)

# yes, this shouldn't really be necessary...
lineArray.removeAll()
del cur
scw
quelle