Створення лінії різної відстані від точки початку за допомогою 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).


Я трохи розгублений. якщо sin (theta aka 15 градусів) = y / r і y = r * sin (15 градусів) не повинен перемикати формули для переміщень x і y?
зиггі

@ Ziggy Ваші формули не є правильними для кута, який вимірюється на схід від півночі. Ви намагаєтесь застосувати формули для кута на північ від сходу.
whuber

як вам вдалося зрозуміти, що розташування та кут на схід від півночі? це може бути поза межами цих коментарів, але чи є у вас якісь рекомендації щодо ресурсів, де вивчити та застосувати основні триггерні поняття до питань ГІС, як цей?
зиггі

1
@ Ziggy Зазвичай географи вимірюють кути в градусах на схід від півночі, але існує багато інших способів. Ось чому я подбав про те, щоб встановити, що я мав на увазі під «кутом» і як це вимірюється. Людям, які використовують інші конвенції, потрібно лише внести звичайні корективи для застосування цього рішення. Я не знаю, що стосується ресурсів для вивчення триггеру: я дізнався його давно з тексту алгебри середньої школи, який був більш ніж адекватним для вирішення будь-яких питань ГІС. Вам все одно не потрібно знати багато триггерів .
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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.