Criando uma linha de distância variável do ponto de origem usando Python no ArcGIS Desktop?

11

Estou tentando criar um recurso de linha a partir de um único ponto, usando uma distância e um ângulo definidos usando ArcGIS e Python (ArcPy).

Eu tenho um ponto nessas coordenadas: X = 400460.99, Y = 135836.76

A partir deste ponto, quero criar uma linha longa de 800 metros em um ângulo de 15 graus a partir desse ponto.

Não sei qual será o ponto final resultante.

Meus dados são projetados no Maryland State Plane South - Meters.

J Graham
fonte

Respostas:

13

O ponto final é deslocado da origem por 800 metros, é claro. O deslocamento na direção da coordenada x é proporcional ao seno do ângulo (leste do norte) e o deslocamento na direção da coordenada y é proporcional ao cosseno do ângulo.

Assim, de sin (15 graus) = sin (0,261799) = 0,258819 e cos (15 graus) = 0,965926, obtemos

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

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

Portanto, as coordenadas do terminal são (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).

whuber
fonte
Eu estou um pouco confuso. se sin (teta aka 15 graus) = y / rey = r * sin (15 graus) as fórmulas para os deslocamentos x e y não deveriam ser trocadas?
Ziggy
@Ziggy Suas fórmulas não são as corretas para um ângulo que é medido a leste do norte. Você está tentando aplicar fórmulas para um ângulo ao norte do leste.
whuber
como você conseguiu discernir que a localização e o ângulo estão a leste do norte? isso pode estar fora do escopo desses comentários, mas você tem alguma recomendação de recursos para aprender e aplicar conceitos básicos de trigonométricas a perguntas de GIS como esta?
Ziggy
1
@Ziggy Convencionalmente, os geógrafos medem ângulos em graus a leste do norte, mas existem muitas outras maneiras. Por isso, tomei o cuidado de estabelecer o que quis dizer com "ângulo" e como é medido. As pessoas que usam outras convenções precisam apenas fazer os ajustes habituais para aplicar esta solução. Não sou especialista em recursos para aprender trigonometria: aprendi há muito tempo com um texto de álgebra do ensino médio, que era mais do que adequado para resolver qualquer dúvida de GIS. Você não precisa saber muito trigonometria de qualquer maneira .
whuber
13

Com base na resposta do @ whuber , se você quiser implementar isso no Python, calcule o deslocamento conforme indicado e crie uma saída como uma coleção de pontos como:

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
fonte