# Python: finding angle between 3 points while considering elevation

I have a pandas DataFrame that contains three points's lat/lon and elevation.

I used the Vincenty's formula to calculate the distance between each pair. And now I want to calculate the angle of the triangle considering the elevation factor.

I have all the pair's distances and elevation data.

example: https://ibb.co/FK8FmQw -Get ABC angle

• Distances in geodesy are computed over the ellipsoid. There is a way to compute the initial azimuth of the geodesic from A to B, and the initial azimuth of the geodesic from A to C. Over the ellipsoid, because we need a mathematical surface to do that (we cannot calculate geodesics on the air). Then the ellipsoidal angle can be the subtraction between both initial azimuths. Dec 16, 2019 at 23:23
• In geodesy, if we want to take the elevation into account, we move to Cartesian coordinates and find Cartesian distances and angles. In topography and cartography, we project geodetic coordinates to a plane, we take into acount the geoid and move heigths to orthometric altitudes, and then we calculate Cartesian distances and angles from there. Dec 16, 2019 at 23:23
• Thanks! Are there any distances in which we can say that the elevation factor is irrelevant? for example for hights of lower than 1200 m and distances of up to 30 km Dec 17, 2019 at 6:33
• Nevermind! while converting the lat/lon to x,y I changed the used elevation in the elevation*earth radius calculation. this is because I'm using these coordinates as an aircraft coords, not earth location. Dec 17, 2019 at 7:02

I would use the Geometric Definition of a Dot Product (using the notation from your link): I don't exactly know how your DataFrame is formatted, but in Python:

``````import numpy as np

a = [BAx, BAy, BAz]
b = [cAx, cAy, cAz]
a_mag = np.linalg.norm(a)
b_mag = np.linalg.norm(b)

theta = np.arccos( np.dot(a,b)/(a_mag * b_mag))
``````

Perhaps, put that in a function to apply across all the rows in your DataFrame.

• Seems to me a very good approach if you consider the transformation of geodetic coordinates to Cartesian. Dec 16, 2019 at 23:24
• I didn't quite understand what the z param is? I have the point's Cartesian points but what is z? elevation? Dec 17, 2019 at 14:21
• @yovelcohen , yep. I was using z to represent elevation. so cAz is the difference in elevation between the points c and A. But be careful with units, the elevation and position should all be the same (meter, for example.)
– Ryan
Dec 17, 2019 at 16:27
• I should just add that it's not a good habit to capitalize a variable. Dec 18, 2019 at 11:48
• @Ryan , what do you mean by position should all be the same? the points are in x,y , the measuring unit doesn't matter, right? Dec 18, 2019 at 13:32