9 votos

¿Crear línea de distancia variable del punto de origen utilizando Python en ArcGIS Desktop?

Estoy intentando crear una función de línea desde un único punto, usando un ajuste de la distancia y un ángulo. Usando ArcGIS y Python (espero).

Tengo un punto en estas coordenadas: X = 400460.99, Y = 135836.76

Desde este punto, quiero crear una línea de 800 metros de largo en un ángulo de 15 grados desde ese punto.

No sé lo que el extremo resultante será, que es frustrante. (Mis datos son proyectados en Maryland estado plano sur - metros)

14voto

cjstehno Puntos 131

El extremo se desplaza desde el origen por parte de los 800 metros, por supuesto. El desplazamiento en la dirección de la coordenada x es proporcional al seno del ángulo (de este a norte) y el desplazamiento en la dirección de la coordenada y es proporcional al coseno del ángulo.

Así, a partir de pecado(15°) = sen(0.261799) = 0.258819 y cos(15 grados) = 0.965926 obtenemos

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

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

Por lo tanto, el extremo de coordenadas son (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).

14voto

Robert Höglund Puntos 5572

Basándose en la respuesta de whuber, si quieres implementar esto en Python, que sería calcular el desplazamiento como se indica, y luego crear una salida como una colección de puntos así:

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X