¿Crear una línea de distancia variable desde el punto de origen usando Python en ArcGIS Desktop?


11

Estoy tratando de crear una entidad de línea desde un único punto, usando una distancia y ángulo establecidos usando ArcGIS y Python (ArcPy).

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

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

No sé cuál será el punto final resultante.

Mis datos se proyectan en Maryland State Plane South - Meters.

Respuestas:


13

El punto final está desplazado desde el origen por 800 metros, por supuesto. El desplazamiento en la dirección de la coordenada x es proporcional al seno del ángulo (este del norte) y el desplazamiento en la dirección de la coordenada y es proporcional al coseno del ángulo.

Por lo tanto, de sin (15 grados) = sin (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, las coordenadas del punto final son (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).


Estoy un poco confundido. si sin (theta aka 15 grados) = y / ry y = r * sin (15 grados) ¿no deberían cambiarse las fórmulas para los desplazamientos xey?
ziggy

@Ziggy Sus fórmulas no son las correctas para un ángulo que se mide al este del norte. Estás tratando de aplicar fórmulas para un ángulo al norte del este.
whuber

¿Cómo pudiste discernir que la ubicación y el ángulo están al este del norte? esto puede estar fuera del alcance de estos comentarios, pero ¿tiene alguna recomendación de recursos sobre dónde aprender y aplicar conceptos básicos de trigonometría a preguntas SIG como esta?
ziggy

1
@Ziggy Convencionalmente, los geógrafos miden ángulos en grados al este del norte, pero hay muchas otras formas. Es por eso que me ocupé de establecer lo que quería decir con el "ángulo" y cómo se mide. Las personas que usan otras convenciones solo necesitan hacer los ajustes habituales para aplicar esta solución. No soy un experto en recursos para aprender trigonometría: lo aprendí hace mucho tiempo de un texto de álgebra de la escuela secundaria, que era más que adecuado para responder cualquier pregunta de SIG. No necesita saber mucho trig de todos modos .
whuber

13

Sobre la base de la respuesta de @ whuber , si desea implementar esto en Python, calcularía el desplazamiento como se indica, y luego crearía una salida como una colección de puntos de esta manera:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.