Creare una linea di distanza variabile dal punto di origine usando Python in ArcGIS Desktop?


11

Sto cercando di creare una funzione di linea da un singolo punto, usando una distanza e un angolo impostati usando ArcGIS e Python (ArcPy).

Ho un punto a queste coordinate: X = 400460,99, Y = 135836,76

Da questo punto, voglio creare una linea lunga 800 metri con un angolo di 15 gradi da quel punto.

Non so quale sarà l'endpoint risultante.

I miei dati sono proiettati nell'aereo del Maryland - South Meters.

Risposte:


13

L'endpoint è spostato dall'origine di 800 metri, ovviamente. Lo spostamento nella direzione della coordinata x è proporzionale al seno dell'angolo (est del nord) e lo spostamento nella direzione della coordinata y è proporzionale al coseno dell'angolo.

Quindi, dal peccato (15 gradi) = peccato (0,261799) = 0,258819 e cos (15 gradi) = 0,965926 otteniamo

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

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

Pertanto le coordinate dell'endpoint sono (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).


Sono un po 'confuso. se sin (theta aka 15 gradi) = y / r e y = r * sin (15 gradi) non dovrebbero essere cambiate le formule per gli spostamenti xey?
ziggy,

@Ziggy Le tue formule non sono quelle corrette per un angolo misurato ad est del nord. Stai provando ad applicare le formule per un angolo a nord-est.
whuber

come hai potuto discernere che la posizione e l'angolo sono a est del nord? questo potrebbe essere al di fuori dell'ambito di questi commenti, ma hai qualche consiglio in merito alle risorse su dove apprendere e applicare concetti di base per le domande GIS come questo?
ziggy,

1
@Ziggy Convenzionalmente, i geografi misurano gli angoli in gradi est del nord, ma ci sono molti altri modi. Ecco perché mi sono preso cura di stabilire cosa intendevo per "angolo" e come viene misurato. Le persone che utilizzano altre convenzioni devono solo apportare le solite modifiche per applicare questa soluzione. Non sono un esperto di risorse per l'apprendimento dei trigoni: l'ho imparato molto tempo fa da un testo di algebra delle superiori, che era più che adeguato per rispondere a qualsiasi domanda GIS. Non hai bisogno di conoscere molti trigoni comunque .
whuber

13

Sulla base di @ whuber risposta , se si voleva implementare questo in Python, devi calcolare lo spostamento come si è detto, quindi creare un output come un insieme di punti in questo modo:

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
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.