I'm trying to write a script that will find angles between polyline features. the polyline features always contain only two points (start and end).
A few sources indicates that the declination of a line can be calculated as so:
rads = math.atan2 (-dY, dX)
where dY is the difference in Y values and dX is the differece in X values of the start and end points. This seems to be where I'm failing.
Here's my code with comments:
import arcpy import math def GetAngle (p1, p2): x1, y1 = p1 x2, y2 = p2 dX = x2 = x1 dY = y2 - y1 rads = math.atan2 (-dY, dX) #wrong for finding angle/declination? return math.degrees (rads) def LineToXYs (line): #return first and last coordinates firstX, firstY = (line.firstPoint.X, line.firstPoint.Y) lastX, lastY = (line.lastPoint.X, line.lastPoint.Y) return [(firstX, firstY), (lastX, lastY)] def AngleFromLines (lines): #lines is a python list of line geometries that share a vertex for line1 in lines: for line2 in lines: if line1 == line2: continue line1StPnt, line1EndPnt = LineToXYs (line1) #get start and end xys for first line line2StPnt, line2EndPnt = LineToXYs (line2) #get start and end xys for second line angle1 = GetAngle (line1StPnt, line1EndPnt) #calc angle - Doesn't work angle2 = GetAngle (line2StPnt, line2EndPnt) #calc angle - Doesn't work print "first line start and end coordinates:", line1StPnt, line1EndPnt print "second line start and end coordinates:", line2StPnt, line2EndPnt print "angle 1:", angle1 print "angle 2:", angle2 print "length 1:", line1.length print "length 2:", line2.length angle = abs (angle1 - angle2) print "angle between lines:", angle AngleFromLines ([lineGeom1, lineGeom2]) #lineGeom* = arcpy polyline geometry object
For example, these two polyline geometries should return something around 270 degrees (or 90, also fine):
Instead I run the script and get:
first line start and end coordinates: (1974143.8040161133, 13562128.28540039) (1974120.358215332, 13562109.576782227) second line start and end coordinates: (1974141.000427246, 13562131.794433594) (1974143.8040161133, 13562128.28540039) angle 1: -0.000542988605953 angle 2: -0.000101843033066 length 1: 29.9952990964 length 2: 4.49148355856 angle between lines: 0.000441145572887
Any help would be great.