Создание линии различного расстояния от исходной точки с использованием Python в ArcGIS Desktop?

11

Я пытаюсь создать линейный объект из одной точки, используя заданное расстояние и угол, используя ArcGIS и Python (ArcPy).

У меня есть точка в этих координатах: X = 400460,99, Y = 135836,76

С этого момента я хочу создать линию длиной 800 метров под углом 15 градусов от этой точки.

Я не знаю, какой будет конечная точка.

Мои данные спроецированы в штате Мэриленд на юг-метров.

Дж Грэм
источник

Ответы:

13

Конечно, конечная точка смещена от начала координат на 800 метров. Смещение в направлении координаты x пропорционально синусу угла (к востоку от севера), а смещение в направлении координаты y пропорционально косинусу угла.

Таким образом, из sin (15 градусов) = sin (0.261799) = 0.258819 и cos (15 градусов) = 0.965926 получаем

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

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

Поэтому координаты конечной точки (400460,99 + 207,055, 135836,76 + 772,741) = (400668,05, 136609,49).

Whuber
источник
Я немного смущен. если грех (тета 15 градусов) = y / r и y = r * sin (15 градусов) не следует ли переключать формулы для смещений x и y?
Зигги
@ Зигги Ваши формулы не верны для угла, который измеряется к востоку от севера. Вы пытаетесь применить формулы для угла к северу от востока.
whuber
как вы смогли заметить, что расположение и угол к востоку от севера? это может выходить за рамки этих комментариев, но есть ли у вас какие-либо рекомендации относительно того, где учиться и применять основные концепции триггеров к таким вопросам ГИС, как этот?
Зигги
1
@ Зигги Традиционно географы измеряют углы в градусах к востоку от севера, но есть много других способов. Вот почему я позаботился, чтобы установить, что я имел в виду под «углом» и как он измеряется. Люди, использующие другие соглашения, должны только сделать обычные корректировки, чтобы применить это решение. Я не эксперт по ресурсам для обучения триггерам: я узнал это давно из текста алгебры средней школы, который был более чем достаточен для решения любых вопросов ГИС. Вам не нужно знать много триггер в любом случае .
whuber
13

Основываясь на ответе @ whuber , если вы хотите реализовать это в Python, вы рассчитаете смещение, как указано, а затем создадите вывод в виде набора точек следующим образом:

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
источник