在ArcGIS Desktop中使用Python创建距原点不同距离的线?


11

我正在尝试使用ArcGIS和Python(ArcPy)使用设置的距离和角度从单个点创建线要素。

我在这些坐标处有一个点:X = 400460.99,Y = 135836.76

从这一点出发,我想创建一条与该点成15度角的800米长的线。

我不知道最终的端点是什么。

我的数据预计在马里兰州立飞机南-米中。

Answers:


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(θaka 15度)= y / r和y = r * sin(15度),是否应该切换x和y位移的公式?
ziggy

@Ziggy您的公式对于以北为东的角度而言不是正确的公式。您正在尝试将公式应用于东方以北的角度。
ub

您如何辨别位置和角度在北方以东?这可能不在这些注释的范围之内,但是您对于在何处学习和将基本触发概念应用于像这样的GIS问题有任何资源建议吗?
ziggy

1
@Ziggy按照惯例,地理学家会以北向东为单位来测量角度,但是还有许多其他方法。这就是为什么我要小心确定“角度”的含义以及如何进行测量的原因。使用其他约定的人们只需进行通常的调整即可应用此解决方案。我不是学习Trig的资源专家:很久以前,我是从中学代数课本中学到的,这足以解决任何GIS问题。 无论如何你不需要太多的知识
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.