Answers:
在ArcGIS 10.1和更高版本中,在编辑器工具栏/更多编辑工具/ COGO中提供了一个名为COGO的工具。工具栏上有一个名为Reporting COGO descriptions的按钮。此报告工具具有称为“ 两条线之间的角度”的功能,该功能报告一条线上3个点之间的角度。
这个Python脚本工具可以解决这个问题。要使用它,请将其添加为脚本工具,将参数设置为Feature Set-并将其架构设置为线要素类。该脚本应与10.0及更高版本一起使用。
# calculate an azimuth angle from a interactively entered
# line (feature set)
#
# Curtis Price, cprice@usgs.gov, 9/18/2013 11:51:10 AM
import math
import arcpy
# read line (This parameter should be a line feature set)
line = arcpy.GetParameterAsText(0)
# to see how this is used, see the help:
# http://resources.arcgis.com/en/help/main/10.1/index.html#//001500000028000000
# http://resources.arcgis.com/en/help/main/10.1/index.html#//002w00000023000000
def get_angle(xy1, xy2):
"""Calculate azimuth angle from two points. (Zero is north.)"""
import math
try:
# ArcPy point objects
x1, y1, x2, y2 = xy1.X, xy1.Y, xy2.X, xy2.Y
except:
# xy strings, e.g. "0 0"
x1, y1 = [float(x) for x in xy1.split()]
x2, y2 = [float(x) for x in xy2.split()]
dx, dy = (x2 - x1, y2 - y1)
return 90 - math.degrees(math.atan2(dy, dx))
try:
# get first and last point of a line
SHAPE = arcpy.Describe(line).shapeFieldName
Rows = arcpy.SearchCursor(line,"","",SHAPE)
feat = Rows.next().getValue(SHAPE)
pt1 = feat.firstPoint
pt2 = feat.lastPoint
angle = get_angle(pt1, pt2)
msg1 = " First point: {0:.1f}, {0:.1f}".format(pt1.X, pt1.Y)
msg2 = " Last point: {0:.1f}, {0:.1f}".format(pt2.X, pt2.Y)
msg3 = " Azimuth angle (in degrees): {0:.1f}".format(angle)
arcpy.AddMessage("{0}\n{1}\n{2}".format(msg1, msg2, msg3))
except:
raise Exception, "Invalid line input"
阐明@TvsGIS的答案。在ArcMap 10.3中,使用COGO工具栏,选择“ COGO报告”(左侧第7个按钮),然后选择“现有要素的COGO描述”(右侧第2个:指向行中间的箭头)。然后单击在线功能。这将以网格(地图)和地面(调查测量)坐标给出角度和长度。从网格到地面的转换是ADD方向偏移,然后除以“编辑选项”>“单位”>“对话框”的距离因子。
如果使用“直线的方向和距离”(左侧的第一个按钮),则以交互方式选择直线的起点和终点。角度是从起点到终点。但是,线段可以沿相反的方向绘制。