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