N Vector Documentation
N Vector Documentation
Release 0.6.0rc2.post001+g1a5f192
1 Contents 3
1.1 Introduction to Nvector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Documentation and code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Unit tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7.1 Example 1: “A and B to delta” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7.2 Example 2: “B and delta to C” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7.3 Example 3: “ECEF-vector to geodetic latitude” . . . . . . . . . . . . . . . . . . . . 7
1.7.4 Example 4: “Geodetic latitude to ECEF-vector” . . . . . . . . . . . . . . . . . . . . 7
1.7.5 Example 5: “Surface distance” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7.6 Example 6 “Interpolated position” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7.7 Example 7: “Mean position” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7.8 Example 8: “A and azimuth/distance to B” . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.9 Example 9: “Intersection of two paths” . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.10 Example 10: “Cross track distance” . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9 Functional examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9.1 Example 1: “A and B to delta” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9.2 Example 2: “B and delta to C” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.9.3 Example 3: “ECEF-vector to geodetic latitude” . . . . . . . . . . . . . . . . . . . . 14
1.9.4 Example 4: “Geodetic latitude to ECEF-vector” . . . . . . . . . . . . . . . . . . . . 15
1.9.5 Example 5: “Surface distance” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.9.6 Example 6 “Interpolated position” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9.7 Example 7: “Mean position” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9.8 Example 8: “A and azimuth/distance to B” . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.9 Example 9: “Intersection of two paths” . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.10 Example 10: “Cross track distance” . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.11 Developers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.12 Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.12.1 Version 0.6.0, December 09, 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.12.2 Version 0.5.2, Mars 7, 2017 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.12.3 Version 0.5.1, Mars 5, 2017 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.12.4 Version 0.4.1, Januar 19, 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.12.5 Version 0.1.3, Januar 1, 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.12.6 Version 0.1.1, Januar 1, 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.13 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
i
1.13.1 nvector package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.13.1.1 Geodesic functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.13.1.1.1 nvector._core.lat_lon2n_E . . . . . . . . . . . . . . . . . . . . . . . . 26
1.13.1.1.2 nvector._core.n_E2lat_lon . . . . . . . . . . . . . . . . . . . . . . . . 26
1.13.1.1.3 nvector._core.n_EB_E2p_EB_E . . . . . . . . . . . . . . . . . . . . 26
1.13.1.1.4 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.13.1.1.5 nvector._core.p_EB_E2n_EB_E . . . . . . . . . . . . . . . . . . . . 27
1.13.1.1.6 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.13.1.1.7 nvector._core.n_EA_E_and_n_EB_E2p_AB_E . . . . . . . . . . . . 27
1.13.1.1.8 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.13.1.1.9 nvector._core.n_EA_E_and_p_AB_E2n_EB_E . . . . . . . . . . . . 28
1.13.1.1.10 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.13.1.1.11 nvector._core.n_EA_E_and_n_EB_E2azimuth . . . . . . . . . . . . . 29
1.13.1.1.12 nvector._core.n_EA_E_distance_and_azimuth2n_EB_E . . . . . . . . 29
1.13.1.1.13 nvector._core.great_circle_distance . . . . . . . . . . . . . . . . . . . 29
1.13.1.1.14 nvector._core.euclidean_distance . . . . . . . . . . . . . . . . . . . . 30
1.13.1.1.15 nvector._core.cross_track_distance . . . . . . . . . . . . . . . . . . . 30
1.13.1.1.16 nvector._core.closest_point_on_great_circle . . . . . . . . . . . . . . 30
1.13.1.1.17 nvector._core.intersect . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.13.1.1.18 nvector._core.mean_horizontal_position . . . . . . . . . . . . . . . . 31
1.13.1.1.19 nvector._core.on_great_circle . . . . . . . . . . . . . . . . . . . . . . 31
1.13.1.1.20 nvector._core.on_great_circle_path . . . . . . . . . . . . . . . . . . . 31
1.13.1.2 Rotation matrices and angles . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.13.1.2.1 nvector._core.E_rotation . . . . . . . . . . . . . . . . . . . . . . . . 32
1.13.1.2.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.13.1.2.3 nvector._core.n_E2R_EN . . . . . . . . . . . . . . . . . . . . . . . . 33
1.13.1.2.4 nvector._core.n_E_and_wa2R_EL . . . . . . . . . . . . . . . . . . . 33
1.13.1.2.5 nvector._core.R_EL2n_E . . . . . . . . . . . . . . . . . . . . . . . . 33
1.13.1.2.6 nvector._core.R_EN2n_E . . . . . . . . . . . . . . . . . . . . . . . . 34
1.13.1.2.7 nvector._core.R2xyz . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.13.1.2.8 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.13.1.2.9 nvector._core.R2zyx . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.13.1.2.10 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.1.2.11 nvector._core.xyz2R . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.1.2.12 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.1.2.13 nvector._core.zyx2R . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.13.1.2.14 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.1.3 Misc functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.1.3.1 nvector._core.nthroot . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.1.3.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.1.3.3 nvector._core.deg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.13.1.3.4 nvector._core.rad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.13.1.3.5 nvector._core.select_ellipsoid . . . . . . . . . . . . . . . . . . . . . . 37
1.13.1.3.6 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.13.1.3.7 nvector._core.unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.13.1.3.8 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.13.1.3.9 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.13.1.4 OO interface to Geodesic functions . . . . . . . . . . . . . . . . . . . . . . . . 38
1.13.1.4.1 nvector.objects.FrameE . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.13.1.4.2 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.13.1.4.3 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.13.1.4.4 nvector.objects.FrameN . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.13.1.4.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.13.1.4.6 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.13.1.4.7 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.13.1.4.8 nvector.objects.FrameL . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.13.1.4.9 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.13.1.4.10 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
ii
1.13.1.4.11 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.13.1.4.12 nvector.objects.FrameB . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.13.1.4.13 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.14 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.15 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.16 nvector.objects.ECEFvector . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.17 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.18 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.13.1.4.19 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.13.1.4.20 nvector.objects.GeoPoint . . . . . . . . . . . . . . . . . . . . . . . . 42
1.13.1.4.21 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.13.1.4.22 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.13.1.4.23 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.13.1.4.24 nvector.objects.Nvector . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.13.1.4.25 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.13.1.4.26 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.13.1.4.27 nvector.objects.GeoPath . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.13.1.4.28 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.13.1.4.29 nvector.objects.Pvector . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.13.1.4.30 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.13.1.4.31 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.13.1.4.32 nvector.objects.diff_positions . . . . . . . . . . . . . . . . . . . . . . 45
iii
iv
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Contents 1
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
2 Contents
CHAPTER 1
Contents
Nvector is a suite of tools written in Python to solve geographical position calculations like:
• Calculate the surface distance between two geographical positions.
• Convert positions given in one reference frame into another reference frame.
• Find the destination point given start point, azimuth/bearing and distance.
• Find the mean position (center/midpoint) of several geographical positions.
• Find the intersection between two paths.
• Find the cross track distance between a path and a position.
1.2 Description
In this library, we represent position with an “n-vector”, which is the normal vector to the Earth model (the same
reference ellipsoid that is used for latitude and longitude). When using n-vector, all Earth-positions are treated
equally, and there is no need to worry about singularities or discontinuities. An additional benefit with using
n-vector is that many position calculations can be solved with simple vector algebra (e.g. dot product and cross
product).
Converting between n-vector and latitude/longitude is unambiguous and easy using the provided functions.
n_E is n-vector in the program code, while in documents we use nE. E denotes an Earth-fixed coordinate frame,
and it indicates that the three components of n-vector are along the three axes of E. More details about the notation
and reference frames can be found here:
Official documentation:
3
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
http://www.navlab.net/nvector/
http://nvector.readthedocs.io/en/latest/
Kenneth Gade (2010): A Nonsingular Horizontal Position Representation, The Journal of Navigation, Volume
63, Issue 03, pp 395-417, July 2010.
Bleeding edge: https://github.com/pbrod/nvector.
Official releases available at: http://pypi.python.org/pypi/nvector.
1.4 Installation
If you have pip installed and are online, then simply type:
$ pip install nvector
to get the lastest stable version. Using pip also has the advantage that all requirements are automatically installed.
You can download nvector and all dependencies to a folder “pkg”, by the following:
$ pip install –download=pkg nvector
To install the downloaded nvector, just type:
$ pip install –no-index –find-links=pkg nvector
To test if the toolbox is working paste the following in an interactive python session:
import nvector as nv
nv.test('--doctest-modules')
or
$ py.test –pyargs nvector –doctest-modules
at the command prompt.
1.6 Acknowledgement
The nvector package for Python was written by Per A. Brodtkorb at FFI (The Norwegian Defence Research
Establishment) based on the nvector toolbox for Matlab written by the navigation group at FFI.
Most of the content is based on the following article:
Kenneth Gade (2010): A Nonsingular Horizontal Position Representation, The Journal of Navigation, Volume
63, Issue 03, pp 395-417, July 2010.
Thus this article should be cited in publications using this page or the downloaded program code.
Below the object-oriented solution to some common geodesic problems are given. In the first example the func-
tional solution is also given. The functional solutions to the remaining problems can be found here.
4 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Given two positions, A and B as latitudes, longitudes and depths relative to Earth, E.
Find the exact vector between the two positions, given in meters north, east, and down, and find the direction
(azimuth) to B, relative to north. Assume WGS-84 ellipsoid. The given depths are from the ellipsoid surface. Use
position A to define north, east, and down directions. (Due to the curvature of Earth and different directions to
the North Pole, the north, east, and down directions will change (relative to Earth) for different places. A must be
outside the poles for the north and east directions to be defined.)
Solution:
Functional Solution:
A radar or sonar attached to a vehicle B (Body coordinate frame) measures the distance and direction to an object
C. We assume that the distance and two angles (typically bearing and elevation relative to B) are already combined
to the vector p_BC_B (i.e. the vector from B to C, decomposed in B). The position of B is given as n_EB_E and
z_EB, and the orientation (attitude) of B is given as R_NB (this rotation matrix can be found from roll/pitch/yaw
by using zyx2R).
Find the exact position of object C as n-vector and depth ( n_EC_E and z_EC ), assuming Earth ellipsoid with
semi-major axis a and flattening f. For WGS-72, use a = 6 378 135 m and f = 1/298.26.
Solution:
6 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Position B is given as an “ECEF-vector” p_EB_E (i.e. a vector from E, the center of the Earth, to B, decomposed
in E). Find the geodetic latitude, longitude and height (latEB, lonEB and hEB), assuming WGS-84 ellipsoid.
Solution:
Geodetic latitude, longitude and height are given for position B as latEB, lonEB and hEB, find the ECEF-vector
for this position, p_EB_E.
Solution:
Find the surface distance sAB (i.e. great circle distance) between two positions A and B. The heights of A and B
are ignored, i.e. if they don’t have zero height, we seek the distance between the points that are at the surface of
the Earth, directly above/below A and B. The Euclidean distance (chord length) dAB should also be found. Use
Earth radius 6371e3 m. Compare the results with exact calculations for the WGS-84 ellipsoid.
Solution for a sphere:
8 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
>>> t0 = 10.
>>> t1 = 20.
>>> ti = 16. # time of interpolation
>>> ti_n = (ti - t0) / (t1 - t0) # normalized time of interpolation
Three positions A, B, and C are given as n-vectors n_EA_E, n_EB_E, and n_EC_E. Find the mean position, M,
given as n_EM_E. Note that the calculation is independent of the depths of the positions.
Solution:
We have an initial position A, direction of travel given as an azimuth (bearing) relative to north (clockwise), and
finally the distance to travel along a great circle given as sAB. Use Earth radius 6371e3 m to find the destination
point B.
In geodesy this is known as “The first geodetic problem” or “The direct geodetic problem” for a sphere, and we
see that this is similar to Example 2, but now the delta is given as an azimuth and a great circle distance. (“The
second/inverse geodetic problem” for a sphere is already solved in Examples 1 and 5.)
Solution:
>>> msg = 'Ex8, Destination: lat, lon = {:4.2f} deg, {:4.2f} deg'
>>> msg.format(lat, lon)
'Ex8, Destination: lat, lon = 79.99 deg, -90.02 deg'
10 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Define a path from two given positions (at the surface of a spherical Earth), as the great circle that goes through
the two points.
Path A is given by A1 and A2, while path B is given by B1 and B2.
Find the position C where the two great circles intersect.
Solution:
Path A is given by the two positions A1 and A2 (similar to the previous example).
Find the cross track distance sxt between the path A (i.e. the great circle through A1 and A2) and the position B
(i.e. the shortest distance at the surface, between the great circle and B).
Also find the Euclidean distance dxt between B and the plane defined by the great circle. Use Earth radius 6371e3.
Finally, find the intersection point on the great circle and determine if it is between position A1 and A2.
Solution:
geographiclib
Below the functional solution to some common geodesic problems are given. In the first example the object-
oriented solution is also given. The object-oriented solutions to the remaining problems can be found here.
Given two positions, A and B as latitudes, longitudes and depths relative to Earth, E.
Find the exact vector between the two positions, given in meters north, east, and down, and find the direction
(azimuth) to B, relative to north. Assume WGS-84 ellipsoid. The given depths are from the ellipsoid surface. Use
position A to define north, east, and down directions. (Due to the curvature of Earth and different directions to
the North Pole, the north, east, and down directions will change (relative to Earth) for different places. A must be
outside the poles for the north and east directions to be defined.)
Solution:
12 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
OO-Solution:
A radar or sonar attached to a vehicle B (Body coordinate frame) measures the distance and direction to an object
C. We assume that the distance and two angles (typically bearing and elevation relative to B) are already combined
to the vector p_BC_B (i.e. the vector from B to C, decomposed in B). The position of B is given as n_EB_E and
z_EB, and the orientation (attitude) of B is given as R_NB (this rotation matrix can be found from roll/pitch/yaw
by using zyx2R).
Find the exact position of object C as n-vector and depth ( n_EC_E and z_EC ), assuming Earth ellipsoid with
semi-major axis a and flattening f. For WGS-72, use a = 6 378 135 m and f = 1/298.26.
Solution:
>>> n_EB_E = nv.unit([[1], [2], [3]]) # unit to get unit length of vector
>>> z_EB = -400
>>> yaw, pitch, roll = rad(10), rad(20), rad(30)
>>> R_NB = nv.zyx2R(yaw, pitch, roll)
Step 6: Find the position of C, using the functions that goes from one
Position B is given as an “ECEF-vector” p_EB_E (i.e. a vector from E, the center of the Earth, to B, decomposed
in E). Find the geodetic latitude, longitude and height (latEB, lonEB and hEB), assuming WGS-84 ellipsoid.
Solution:
14 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
>>> msg = 'Ex3: Pos B: lat, lon = {:4.2f}, {:4.2f} deg, height = {:9.2f} m'
>>> msg.format(lat[0], lon[0], h[0])
'Ex3: Pos B: lat, lon = 39.38, -48.01 deg, height = 4702059.83 m'
Geodetic latitude, longitude and height are given for position B as latEB, lonEB and hEB, find the ECEF-vector
for this position, p_EB_E.
Solution:
Find the surface distance sAB (i.e. great circle distance) between two positions A and B. The heights of A and B
are ignored, i.e. if they don’t have zero height, we seek the distance between the points that are at the surface of
the Earth, directly above/below A and B. The Euclidean distance (chord length) dAB should also be found. Use
Earth radius 6371e3 m. Compare the results with exact calculations for the WGS-84 ellipsoid.
Solution for a sphere:
16 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
>>> t0 = 10.
>>> t1 = 20.
>>> ti = 16. # time of interpolation
>>> ti_n = (ti - t0) / (t1 - t0) # normalized time of interpolation
Three positions A, B, and C are given as n-vectors n_EA_E, n_EB_E, and n_EC_E. Find the mean position, M,
given as n_EM_E. Note that the calculation is independent of the depths of the positions.
Solution:
or
We have an initial position A, direction of travel given as an azimuth (bearing) relative to north (clockwise), and
finally the distance to travel along a great circle given as sAB. Use Earth radius 6371e3 m to find the destination
point B.
In geodesy this is known as “The first geodetic problem” or “The direct geodetic problem” for a sphere, and we
see that this is similar to Example 2, but now the delta is given as an azimuth and a great circle distance. (“The
second/inverse geodetic problem” for a sphere is already solved in Examples 1 and 5.)
Solution:
Define a path from two given positions (at the surface of a spherical Earth), as the great circle that goes through
the two points.
Path A is given by A1 and A2, while path B is given by B1 and B2.
Find the position C where the two great circles intersect.
Solution:
18 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
or alternatively
>>> path_a, path_b = (n_EA1_E, n_EA2_E), (n_EB1_E, n_EB2_E)
>>> n_EC_E = nv.intersect(path_a, path_b)
True
Path A is given by the two positions A1 and A2 (similar to the previous example).
Find the cross track distance sxt between the path A (i.e. the great circle through A1 and A2) and the position B
(i.e. the shortest distance at the surface, between the great circle and B).
Also find the Euclidean distance dxt between B and the plane defined by the great circle. Use Earth radius 6371e3.
Finally, find the intersection point on the great circle and determine if it is between position A1 and A2.
Solution:
>>> import numpy as np
>>> import nvector as nv
>>> n_EA1_E = nv.lat_lon2n_E(rad(0), rad(0))
(continues on next page)
Alternative solution 2:
>>> s_xt2 = nv.great_circle_distance(n_EB_E, n_EC_E, radius)
>>> d_xt2 = nv.euclidean_distance(n_EB_E, n_EC_E, radius)
>>> np.allclose(s_xt, s_xt2), np.allclose(d_xt, d_xt2)
(True, True)
Alternative solution 3:
>>> c_E = nv.great_circle_normal(n_EA1_E, n_EA2_E)
>>> sin_theta = -np.dot(c_E.T, n_EB_E).ravel()
>>> s_xt3 = np.arcsin(sin_theta) * radius
>>> d_xt3 = sin_theta * radius
>>> np.allclose(s_xt, s_xt3), np.allclose(d_xt, d_xt3)
(True, True)
1.10 License
20 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.11 Developers
1.12 Changelog
1.11. Developers 21
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Cody (4):
• Explicitely numbered replacement fields
• Migrated % string formating
Per A Brodtkorb (29):
22 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
• pep8
• Updated failing examples
• Updated README.rst
• Removed obsolete pass statement
• Documented functions
• added .checkignore for quantifycode
• moved test_docstrings and use_docstring_from into _common.py
• Added .codeclimate.yml
• Updated installation information in _info.py
• Added GeoPath.on_path method. Clearified intersection example
• Added great_circle_normal, cross_track_distance Renamed intersection to intersect (Intersection is
deprecated.)
• Simplified R2zyx with a call to R2xyz Improved accuracy for great circle cross track distance for small
distances.
• Added on_great_circle, _on_great_circle_path, _on_ellipsoid_path, closest_point_on_great_circle
and closest_point_on_path to GeoPath
• made __eq__ more robust for frames
• Removed duplicated code
• Updated tests
• Removed fishy test
• replaced zero n-vector with nan
• Commented out failing test.
• Added example 10 image
• Added ‘closest_point_on_great_circle’, ‘on_great_circle’,’on_great_circle_path’.
• Updated examples + documentation
• Updated index depth
• Updated README.rst and classifier in setup.cfg
pbrod (46):
• Cosmetic updates
• Updated README.rst
• updated docs and removed unused code
• updated README.rst and .coveragerc
• Refactored out _check_frames
• Refactored out _default_frame
• Updated .coveragerc
• Added link to geographiclib
• Updated external link
• Updated documentation
1.12. Changelog 23
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
pbrod (31):
• Refactored
• Updated tests
• Updated docs
• Moved tests to nvector/tests
• Updated .coverage Added travis.yml, .landscape.yml
• Deleted obsolete LICENSE
• Updated README.rst
• Removed ngs version
• Fixed bug in .travis.yml
• Updated .travis.yml
• Removed dependence on navigator.py
• Updated README.rst
• Updated examples
• Deleted skeleton.py and added tox.ini
• Small refactoring Renamed distance_rad_bearing_rad2point to n_EA_E_distance_and_azimuth2n_EB_E
updated tests
• Renamed azimuth to n_EA_E_and_n_EB_E2azimuth Added tests for R2xyz as well as R2zyx
• Removed backward compatibility Added test_n_E_and_wa2R_EL
• Refactored tests
• Commented out failing tests on python 3+
• updated CHANGES.rst
24 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
pbrod (31):
• Initial commit: Translated code from Matlab to Python.
• Added object oriented interface to nvector library
• Added tests for object oriented interface
• Added geodesic tests.
1.13 Modules
Release 0.6rc2.post001+g1a5f192
Date Dec 09, 2018
This reference manual details functions, modules, and objects included in nvector, describing what they are and
what they do.
1.13. Modules 25
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.1.1 nvector._core.lat_lon2n_E
1.13.1.1.2 nvector._core.n_E2lat_lon
n_E2lat_lon(n_E, R_Ee=None)
Converts n-vector to latitude and longitude.
Parameters
n_E: 3 x n array n-vector [no unit] decomposed in E.
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E.
Returns
latitude, longitude: real scalars or vectors of length n. Geodetic latitude and longitude
given in [rad]
See also:
lat_lon2n_E
1.13.1.1.3 nvector._core.n_EB_E2p_EB_E
Parameters
n_EB_E: 3 x n array
n-vector(s) [no unit] of position B, decomposed in E.
depth: 1 x n array Depth(s) [m] of system B, relative to the ellipsoid (depth = -height)
a: real scalar, default WGS-84 ellipsoid. Semi-major axis of the Earth ellipsoid given
in [m].
f: real scalar, default WGS-84 ellipsoid. Flattening [no unit] of the Earth ellipsoid. If
f==0 then spherical Earth with radius a is used in stead of WGS-84.
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E.
Returns
p_EB_E: 3 x n array Cartesian position vector(s) from E to B, decomposed in E.
26 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.1.4 Notes
The position of B (typically body) relative to E (typically Earth) is given into this function as n-vector,
n_EB_E. The function converts to cartesian position vector (“ECEF-vector”), p_EB_E, in meters. The
calculation is excact, taking the ellipsity of the Earth into account. It is also non-singular as both n-vector
and p-vector are non-singular (except for the center of the Earth). The default ellipsoid model used is
WGS-84, but other ellipsoids/spheres might be specified.
1.13.1.1.5 nvector._core.p_EB_E2n_EB_E
Parameters
p_EB_E: 3 x n array
Cartesian position vector(s) from E to B, decomposed in E.
a: real scalar, default WGS-84 ellipsoid. Semi-major axis of the Earth ellipsoid given
in [m].
f: real scalar, default WGS-84 ellipsoid. Flattening [no unit] of the Earth ellipsoid. If
f==0 then spherical Earth with radius a is used in stead of WGS-84.
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E.
Returns
n_EB_E: 3 x n array
n-vector(s) [no unit] of position B, decomposed in E.
depth: 1 x n array Depth(s) [m] of system B, relative to the ellipsoid (depth = -height)
1.13.1.1.6 Notes
The position of B (typically body) relative to E (typically Earth) is given into this function as cartesian
position vector p_EB_E, in meters. (“ECEF-vector”). The function converts to n-vector, n_EB_E and its
depth, depth. The calculation is excact, taking the ellipsity of the Earth into account. It is also non-singular
as both n-vector and p-vector are non-singular (except for the center of the Earth). The default ellipsoid
model used is WGS-84, but other ellipsoids/spheres might be specified.
1.13.1.1.7 nvector._core.n_EA_E_and_n_EB_E2p_AB_E
Parameters
n_EA_E, n_EB_E: 3 x n array
n-vector(s) [no unit] of position A and B, decomposed in E.
z_EA, z_EB: 1 x n array Depth(s) [m] of system A and B, relative to the ellipsoid.
(z_EA = -height, z_EB = -height)
1.13. Modules 27
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
a: real scalar, default WGS-84 ellipsoid. Semi-major axis of the Earth ellipsoid given
in [m].
f: real scalar, default WGS-84 ellipsoid. Flattening [no unit] of the Earth ellipsoid. If
f==0 then spherical Earth with radius a is used in stead of WGS-84.
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E.
Returns
p_AB_E: 3 x n array Cartesian position vector(s) from A to B, decomposed in E.
1.13.1.1.8 Notes
The n-vectors for positions A (n_EA_E) and B (n_EB_E) are given. The output is the delta vector from A to
B (p_AB_E). The calculation is excact, taking the ellipsity of the Earth into account. It is also non-singular
as both n-vector and p-vector are non-singular (except for the center of the Earth). The default ellipsoid
model used is WGS-84, but other ellipsoids/spheres might be specified.
1.13.1.1.9 nvector._core.n_EA_E_and_p_AB_E2n_EB_E
1.13.1.1.10 Notes
The n-vector for position A (n_EA_E) and the position-vector from position A to position B (p_AB_E)
are given. The output is the n-vector of position B (n_EB_E) and depth of B (z_EB). The calculation is
excact, taking the ellipsity of the Earth into account. It is also non-singular as both n-vector and p-vector
are non-singular (except for the center of the Earth). The default ellipsoid model used is WGS-84, but other
ellipsoids/spheres might be specified.
28 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.1.11 nvector._core.n_EA_E_and_n_EB_E2azimuth
1.13.1.1.12 nvector._core.n_EA_E_distance_and_azimuth2n_EB_E
Parameters
n_EA_E: 3 x n array
n-vector(s) [no unit] of position A decomposed in E.
Returns
n_EB_E: 3 x n array n-vector(s) [no unit] of position B decomposed in E.
1.13.1.1.13 nvector._core.great_circle_distance
Formulae is given by equation (16) in Gade (2010) and is well conditioned for all angles.
1.13. Modules 29
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.1.14 nvector._core.euclidean_distance
1.13.1.1.15 nvector._core.cross_track_distance
n_EB_E: 3 x m array n-vector(s) of position B to measure the cross track distance to.
method: string defining distance calculated. Options are: ‘greatcircle’ or ‘euclidean’
radius: real scalar radius of sphere. (default 6371009.0)
Returns
distance [array of length max(n, m)] cross track distance(s)
1.13.1.1.16 nvector._core.closest_point_on_great_circle
closest_point_on_great_circle(path, n_EB_E)
Return closest point C on great circle path A to position B.
Parameters
path: tuple of 2 n-vectors of 3 x n arrays
2 n-vectors of positions defining path A, decomposed in E.
Returns
n_EC_E: 3 x max(m, n) array n-vector(s) of closest position C on great circle path A
1.13.1.1.17 nvector._core.intersect
intersect(path_a, path_b)
Return the intersection(s) between the great circles of the two paths
Parameters
path_a, path_b: tuple of 2 n-vectors defining path A and path B, respectively. Path A and
B has shape 2 x 3 x n and 2 x 3 x m, respectively.
Returns
30 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
n_EC_E [array of shape 3 x max(n, m)] n-vector(s) [no unit] of position C decomposed in
E. point(s) of intersection between paths.
1.13.1.1.18 nvector._core.mean_horizontal_position
mean_horizontal_position(n_EB_E)
Return the n-vector of the horizontal mean position.
Parameters
n_EB_E: 3 x n array n-vectors [no unit] of positions Bi, decomposed in E.
Returns
p_EM_E: 3 x 1 array n-vector [no unit] of the mean positions of all Bi, decomposed in E.
1.13.1.1.19 nvector._core.on_great_circle
Returns
on [bool array of length max(n, m)] True if position B is on great circle through path A.
1.13.1.1.20 nvector._core.on_great_circle_path
n_EB_E: 3 x m array n-vector(s) of position B to measure the cross track distance to.
radius: real scalar radius of sphere. (default 6371009.0)
rtol, atol: real scalars defining relative and absolute tolerance
Returns
on [bool array of length max(n, m)] True if position B is on great circle and between end-
points of path A.
1.13. Modules 31
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.2.1 nvector._core.E_rotation
E_rotation(axes=’e’)
Return rotation matrix R_Ee defining the axes of the coordinate frame E.
Parameters
axes [‘e’ or ‘E’] defines orientation of the axes of the coordinate frame E. Options are: ‘e’:
z-axis points to the North Pole along the Earth’s rotation axis,
x-axis points towards the point where latitude = longitude = 0. This choice is very
common in many fields.
‘E’: x-axis points to the North Pole along the Earth’s rotation axis, y-axis points
towards longitude +90deg (east) and latitude = 0. (the yz-plane coincides with the
equatorial plane). This choice of axis ensures that at zero latitude and longitude,
frame N (North-East-Down) has the same orientation as frame E. If roll/pitch/yaw
are zero, also frame B (forward-starboard-down) has this orientation. In this manner,
the axes of frame E is chosen to correspond with the axes of frame N and B. The
functions in this library originally used this option.
Returns
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E as described
in Table 2 in Gade (2010)
R_Ee controls the axes of the coordinate frame E (Earth-Centred,
Earth-Fixed, ECEF) used by the other functions in this library
1.13.1.2.2 Examples
32 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.2.3 nvector._core.n_E2R_EN
n_E2R_EN(n_E, R_Ee=None)
Returns the rotation matrix R_EN from n-vector.
Parameters
n_E: 3 x n array n-vector [no unit] decomposed in E
R_Ee [3 x 3 array] rotation matrix defining the axes of the coordinate frame E.
Returns
R_EN: 3 x 3 x n array The resulting rotation matrix [no unit] (direction cosine matrix).
See also:
R_EN2n_E, n_E_and_wa2R_EL, R_EL2n_E
1.13.1.2.4 nvector._core.n_E_and_wa2R_EL
1.13.1.2.5 nvector._core.R_EL2n_E
R_EL2n_E(R_EL)
Returns n-vector from the rotation matrix R_EL.
Parameters
R_EL: 3 x 3 x n array Rotation matrix (direction cosine matrix) [no unit]
Returns
n_E: 3 x n array n-vector(s) [no unit] decomposed in E.
See also:
R_EN2n_E, n_E_and_wa2R_EL, n_E2R_EN
1.13. Modules 33
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.2.6 nvector._core.R_EN2n_E
R_EN2n_E(R_EN)
Returns n-vector from the rotation matrix R_EN.
Parameters
R_EN: 3 x 3 x n array Rotation matrix (direction cosine matrix) [no unit]
Returns
n_E: 3 x n array n-vector [no unit] decomposed in E.
See also:
n_E2R_EN , R_EL2n_E, n_E_and_wa2R_EL
1.13.1.2.7 nvector._core.R2xyz
R2xyz(R_AB)
Returns the angles about new axes in the xyz-order from a rotation matrix.
Parameters
R_AB: 3 x 3 x n array rotation matrix [no unit] (direction cosine matrix) such that the re-
lation between a vector v decomposed in A and B is given by: v_A = mdot(R_AB,
v_B)
Returns
x, y, z: real scalars or array of length n. Angles [rad] of rotation about new axes.
See also:
xyz2R, R2zyx, xyz2R
1.13.1.2.8 Notes
The x, y, z angles are called Euler angles or Tait-Bryan angles and are defined by the following procedure
of successive rotations: Given two arbitrary coordinate frames A and B. Consider a temporary frame T that
initially coincides with A. In order to make T align with B, we first rotate T an angle x about its x-axis
(common axis for both A and T). Secondly, T is rotated an angle y about the NEW y-axis of T. Finally, T is
rotated an angle z about its NEWEST z-axis. The final orientation of T now coincides with the orientation
of B.
The signs of the angles are given by the directions of the axes and the right hand rule.
1.13.1.2.9 nvector._core.R2zyx
R2zyx(R_AB)
Returns the angles about new axes in the zxy-order from a rotation matrix.
Parameters
R_AB: 3x3 array rotation matrix [no unit] (direction cosine matrix) such that the relation
between a vector v decomposed in A and B is given by: v_A = np.dot(R_AB, v_B)
Returns
z, y, x: real scalars Angles [rad] of rotation about new axes.
See also:
zyx2R, xyz2R, R2xyz
34 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.2.10 Notes
The z, x, y angles are called Euler angles or Tait-Bryan angles and are defined by the following procedure
of successive rotations: Given two arbitrary coordinate frames A and B. Consider a temporary frame T that
initially coincides with A. In order to make T align with B, we first rotate T an angle z about its z-axis
(common axis for both A and T). Secondly, T is rotated an angle y about the NEW y-axis of T. Finally, T is
rotated an angle x about its NEWEST x-axis. The final orientation of T now coincides with the orientation
of B.
The signs of the angles are given by the directions of the axes and the right hand rule.
Note that if A is a north-east-down frame and B is a body frame, we have that z=yaw, y=pitch and x=roll.
1.13.1.2.11 nvector._core.xyz2R
xyz2R(x, y, z)
Returns rotation matrix from 3 angles about new axes in the xyz-order.
Parameters
x,y,z: real scalars or array of lengths n Angles [rad] of rotation about new axes.
Returns
R_AB: 3 x 3 x n array rotation matrix [no unit] (direction cosine matrix) such that the re-
lation between a vector v decomposed in A and B is given by: v_A = mdot(R_AB,
v_B)
See also:
R2xyz, zyx2R, R2zyx
1.13.1.2.12 Notes
The rotation matrix R_AB is created based on 3 angles x,y,z about new axes (intrinsic) in the order x-y-
z. The angles are called Euler angles or Tait-Bryan angles and are defined by the following procedure of
successive rotations: Given two arbitrary coordinate frames A and B. Consider a temporary frame T that
initially coincides with A. In order to make T align with B, we first rotate T an angle x about its x-axis
(common axis for both A and T). Secondly, T is rotated an angle y about the NEW y-axis of T. Finally, T is
rotated an angle z about its NEWEST z-axis. The final orientation of T now coincides with the orientation
of B.
The signs of the angles are given by the directions of the axes and the right hand rule.
1.13.1.2.13 nvector._core.zyx2R
zyx2R(z, y, x)
Returns rotation matrix from 3 angles about new axes in the zyx-order.
Parameters
z, y, x: real scalars or arrays of lenths n Angles [rad] of rotation about new axes.
Returns
R_AB: 3 x 3 x n array rotation matrix [no unit] (direction cosine matrix) such that the re-
lation between a vector v decomposed in A and B is given by: v_A = mdot(R_AB,
v_B)
See also:
R2zyx, xyz2R, R2xyz
1.13. Modules 35
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.2.14 Notes
The rotation matrix R_AB is created based on 3 angles z,y,x about new axes (intrinsic) in the order z-y-
x. The angles are called Euler angles or Tait-Bryan angles and are defined by the following procedure of
successive rotations: Given two arbitrary coordinate frames A and B. Consider a temporary frame T that
initially coincides with A. In order to make T align with B, we first rotate T an angle z about its z-axis
(common axis for both A and T). Secondly, T is rotated an angle y about the NEW y-axis of T. Finally, T is
rotated an angle x about its NEWEST x-axis. The final orientation of T now coincides with the orientation
of B.
The signs of the angles are given by the directions of the axes and the right hand rule.
Note that if A is a north-east-down frame and B is a body frame, we have that z=yaw, y=pitch and x=roll.
1.13.1.3.1 nvector._core.nthroot
nthroot(x, n)
Return the n’th root of x to machine precision
Parameters x, n
1.13.1.3.2 Examples
1.13.1.3.3 nvector._core.deg
deg(rad_angle)
Converts angle in radians to degrees.
Parameters
rad_angle: angle in radians
Returns
deg_angle: angle in degrees
See also:
rad
36 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.3.4 nvector._core.rad
rad(deg_angle)
Converts angle in degrees to radians.
Parameters
deg_angle: angle in degrees
Returns
rad_angle: angle in radians
See also:
deg
1.13.1.3.5 nvector._core.select_ellipsoid
select_ellipsoid(name)
Return semi-major axis (a), flattening (f) and name of ellipsoid
Parameters
name [string] name of ellipsoid. Valid options are: 1) Airy 1858 2) Airy Modified 3) Aus-
tralian National 4) Bessel 1841 5) Clarke 1880 6) Everest 1830 7) Everest Modified 8)
Fisher 1960 9) Fisher 1968 10) Hough 1956 11) International (Hayford) 12) Krassovsky
1938 13) NWL-9D (WGS 66) 14) South American 1969 15) Soviet Geod. System 1985
16) WGS 72 17) Clarke 1866 (NAD27) 18) GRS80 / WGS84 (NAD83)
1.13.1.3.6 Examples
1.13.1.3.7 nvector._core.unit
unit(vector, norm_zero_vector=1)
Convert input vector to a vector of unit length.
Parameters
vector [3 x m array] m column vectors
Returns
unitvector [3 x m array] normalized unitvector(s) along axis==0.
1.13.1.3.8 Notes
The column vector(s) that have zero length will be returned as unit vector(s) pointing in the x-direction, i.e,
[[1], [0], [0]]
1.13. Modules 37
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.3.9 Examples
1.13.1.4.1 nvector.objects.FrameE
1.13.1.4.2 Notes
The frame is Earth-fixed (rotates and moves with the Earth) where the origin coincides with Earth’s centre
(geometrical centre of ellipsoid model).
__init__(a=None, f=None, name=’WGS84’, axes=’e’)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
38 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.3 Methods
1.13.1.4.4 nvector.objects.FrameN
class FrameN(position)
North-East-Down frame
Parameters
position: ECEFvector, GeoPoint or Nvector object position of the vehicle (B) which
also defines the origin of the local frame N. The origin is directly beneath or above
the vehicle (B), at Earth’s surface (surface of ellipsoid model).
1.13.1.4.5 Notes
The Cartesian frame is local and oriented North-East-Down, i.e., the x-axis points towards north, the y-axis
points towards east (both are horizontal), and the z-axis is pointing down.
When moving relative to the Earth, the frame rotates about its z-axis to allow the x-axis to always point
towards north. When getting close to the poles this rotation rate will increase, being infinite at the poles.
The poles are thus singularities and the direction of the x- and y-axes are not defined here. Hence, this
coordinate frame is NOT SUITABLE for general calculations.
__init__(position)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.6 Methods
Pvector(pvector)
__init__(position) x.__init__(. . . ) initializes x; see help(type(x)) for
signature
1.13.1.4.7 Attributes
R_EN
1.13. Modules 39
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.8 nvector.objects.FrameL
1.13.1.4.9 Notes
The Cartesian frame is local and oriented Wander-azimuth-Down. This means that the z-axis is pointing
down. Initially, the x-axis points towards north, and the y-axis points towards east, but as the vehicle moves
they are not rotating about the z-axis (their angular velocity relative to the Earth has zero component along
the z-axis).
(Note: Any initial horizontal direction of the x- and y-axes is valid for L, but if the initial position is outside
the poles, north and east are usually chosen for convenience.)
The L-frame is equal to the N-frame except for the rotation about the z-axis, which is always zero for this
frame (relative to E). Hence, at a given time, the only difference between the frames is an angle between
the x-axis of L and the north direction; this angle is called the wander azimuth angle. The L-frame is well
suited for general calculations, as it is non-singular.
__init__(position, wander_azimuth=0)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.10 Methods
Pvector(pvector)
__init__(position[, wander_azimuth]) x.__init__(. . . ) initializes x; see help(type(x)) for
signature
1.13.1.4.11 Attributes
R_EN
1.13.1.4.12 nvector.objects.FrameB
Parameters
position: ECEFvector, GeoPoint or Nvector object
position of the vehicle’s reference point which also coincides with the origin of the
frame B.
40 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
yaw, pitch, roll: real scalars defining the orientation of frame B in [deg] or [rad].
degrees [bool] if True yaw, pitch, roll are given in degrees otherwise in radians
1.13.1.4.13 Notes
The frame is fixed to the vehicle where the x-axis points forward, the y-axis to the right (starboard) and the
z-axis in the vehicle’s down direction.
__init__(position, yaw=0, pitch=0, roll=0, degrees=False)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.14 Methods
Pvector(pvector)
__init__(position[, yaw, pitch, roll, degrees]) x.__init__(. . . ) initializes x; see help(type(x)) for
signature
1.13.1.4.15 Attributes
R_EN
1.13.1.4.16 nvector.objects.ECEFvector
Parameters
pvector: 3 x n array
Cartesian position vector(s) [m] from E to B, decomposed in E.
frame: FrameE object reference ellipsoid. The default ellipsoid model used is
WGS84, but other ellipsoids/spheres might be specified.
1.13.1.4.17 Notes
The position of B (typically body) relative to E (typically Earth) is given into this function as p-vector,
p_EB_E relative to the center of the frame.
__init__(pvector, frame=None)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.18 Methods
1.13. Modules 41
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.19 Attributes
azimuth
azimuth_deg
elevation
elevation_deg
length
1.13.1.4.20 nvector.objects.GeoPoint
1.13.1.4.21 Examples
42 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.22 Methods
1.13.1.4.23 Attributes
latitude_deg
latlon
latlon_deg
longitude_deg
1.13.1.4.24 nvector.objects.Nvector
1.13.1.4.25 Notes
The position of B (typically body) relative to E (typically Earth) is given into this function as n-vector,
n_EB_E and a depth, z relative to the ellipsiod.
__init__(normal, z=0, frame=None)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.26 Methods
1.13. Modules 43
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.27 nvector.objects.GeoPath
Parameters
positionA, positionB: Nvector, GeoPoint or ECEFvector objects The path is defined by
the line between position A and B, decomposed in E.
__init__(positionA, positionB)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.28 Methods
1.13.1.4.29 nvector.objects.Pvector
__init__(pvector, frame)
x.__init__(. . . ) initializes x; see help(type(x)) for signature
1.13.1.4.30 Methods
44 Chapter 1. Contents
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
1.13.1.4.31 Attributes
azimuth
azimuth_deg
elevation
elevation_deg
length
1.13.1.4.32 nvector.objects.diff_positions
diff_positions(*args, **kwds)
diff_positions is deprecated!
Deprecated use delta_E instead.
1.13. Modules 45
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
46 Chapter 1. Contents
CHAPTER 2
• genindex
• modindex
• search
47
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
n
nvector, 25
nvector._info, 3
nvector._info_functional, 12
49
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
Symbols M
__init__() (ECEFvector method), 41 mean_horizontal_position() (in module nvector._core),
__init__() (FrameB method), 41 31
__init__() (FrameE method), 38
__init__() (FrameL method), 40 N
__init__() (FrameN method), 39 n_E2lat_lon() (in module nvector._core), 26
__init__() (GeoPath method), 44 n_E2R_EN() (in module nvector._core), 33
__init__() (GeoPoint method), 42 n_E_and_wa2R_EL() (in module nvector._core), 33
__init__() (Nvector method), 43 n_EA_E_and_n_EB_E2azimuth() (in module nvec-
__init__() (Pvector method), 44 tor._core), 29
n_EA_E_and_n_EB_E2p_AB_E() (in module nvec-
C tor._core), 27
closest_point_on_great_circle() (in module nvec- n_EA_E_and_p_AB_E2n_EB_E() (in module nvec-
tor._core), 30 tor._core), 28
cross_track_distance() (in module nvector._core), 30 n_EA_E_distance_and_azimuth2n_EB_E() (in module
nvector._core), 29
D n_EB_E2p_EB_E() (in module nvector._core), 26
deg() (in module nvector._core), 36 nthroot() (in module nvector._core), 36
diff_positions() (in module nvector.objects), 45 Nvector (class in nvector.objects), 43
nvector (module), 25
E nvector._info (module), 3
nvector._info_functional (module), 12
E_rotation() (in module nvector._core), 32
ECEFvector (class in nvector.objects), 41
euclidean_distance() (in module nvector._core), 30
O
on_great_circle() (in module nvector._core), 31
F on_great_circle_path() (in module nvector._core), 31
FrameB (class in nvector.objects), 40
FrameE (class in nvector.objects), 38
P
FrameL (class in nvector.objects), 40 p_EB_E2n_EB_E() (in module nvector._core), 27
FrameN (class in nvector.objects), 39 Pvector (class in nvector.objects), 44
G R
GeoPath (class in nvector.objects), 44 R2xyz() (in module nvector._core), 34
GeoPoint (class in nvector.objects), 42 R2zyx() (in module nvector._core), 34
great_circle_distance() (in module nvector._core), 29 R_EL2n_E() (in module nvector._core), 33
R_EN2n_E() (in module nvector._core), 34
I rad() (in module nvector._core), 37
intersect() (in module nvector._core), 30
S
L select_ellipsoid() (in module nvector._core), 37
lat_lon2n_E() (in module nvector._core), 26
U
unit() (in module nvector._core), 37
51
nvector Documentation, Release 0.6.0rc2.post001+g1a5f192
X
xyz2R() (in module nvector._core), 35
Z
zyx2R() (in module nvector._core), 35
52 Index