aboutsummaryrefslogtreecommitdiff
path: root/geodesic.html
diff options
context:
space:
mode:
Diffstat (limited to 'geodesic.html')
-rw-r--r--geodesic.html290
1 files changed, 290 insertions, 0 deletions
diff --git a/geodesic.html b/geodesic.html
new file mode 100644
index 00000000..da07cf49
--- /dev/null
+++ b/geodesic.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+ <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Geodesic calculations &mdash; PROJ 9.0.0 documentation</title>
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+ <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+ <link rel="shortcut icon" href="_static/favicon.png"/>
+ <link rel="canonical" href="https://proj.orggeodesic.html"/>
+ <!--[if lt IE 9]>
+ <script src="_static/js/html5shiv.min.js"></script>
+ <![endif]-->
+
+ <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+ <script src="_static/jquery.js"></script>
+ <script src="_static/underscore.js"></script>
+ <script src="_static/doctools.js"></script>
+ <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+ <script src="_static/js/theme.js"></script>
+ <link rel="author" title="About these documents" href="about.html" />
+ <link rel="index" title="Index" href="genindex.html" />
+ <link rel="search" title="Search" href="search.html" />
+ <link rel="next" title="Development" href="development/index.html" />
+ <link rel="prev" title="Resource files" href="resource_files.html" />
+</head>
+
+<body class="wy-body-for-nav">
+ <div class="wy-grid-for-nav">
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+ <div class="wy-side-scroll">
+ <div class="wy-side-nav-search" style="background: #353130" >
+ <a href="index.html">
+ <img src="_static/logo.png" class="logo" alt="Logo"/>
+ </a>
+ <div class="version">
+ 9.0.0
+ </div>
+<div role="search">
+ <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search docs" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="about.html">About</a></li>
+<li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
+<li class="toctree-l1"><a class="reference internal" href="download.html">Download</a></li>
+<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Using PROJ</a></li>
+<li class="toctree-l1"><a class="reference internal" href="apps/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="operations/index.html">Coordinate operations</a></li>
+<li class="toctree-l1"><a class="reference internal" href="resource_files.html">Resource files</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Geodesic calculations</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#solution-of-geodesic-problems">Solution of geodesic problems</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#additional-properties">Additional properties</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#multiple-shortest-geodesics">Multiple shortest geodesics</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#background">Background</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="development/index.html">Development</a></li>
+<li class="toctree-l1"><a class="reference internal" href="specifications/index.html">Specifications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="community/index.html">Community</a></li>
+<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
+<li class="toctree-l1"><a class="reference internal" href="glossary.html">Glossary</a></li>
+<li class="toctree-l1"><a class="reference internal" href="zreferences.html">References</a></li>
+</ul>
+
+ </div>
+ </div>
+ </nav>
+
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #353130" >
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+ <a href="index.html">PROJ</a>
+ </nav>
+
+ <div class="wy-nav-content">
+ <div class="rst-content">
+ <div role="navigation" aria-label="Page navigation">
+ <ul class="wy-breadcrumbs">
+ <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+ <li>Geodesic calculations</li>
+ <li class="wy-breadcrumbs-aside">
+ <a href="https://github.com/OSGeo/PROJ/edit/8.2/docs/source/geodesic.rst" class="fa fa-github"> Edit on GitHub</a>
+ </li>
+ </ul><div class="rst-breadcrumbs-buttons" role="navigation" aria-label="Sequential page navigation">
+ <a href="resource_files.html" class="btn btn-neutral float-left" title="Resource files" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+ <a href="development/index.html" class="btn btn-neutral float-right" title="Development" accesskey="n">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+ </div>
+ <hr/>
+</div>
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+ <div itemprop="articleBody">
+
+ <section id="geodesic-calculations">
+<span id="geodesic"></span><h1>Geodesic calculations<a class="headerlink" href="#geodesic-calculations" title="Permalink to this headline">¶</a></h1>
+<section id="introduction">
+<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
+<p>Consider an ellipsoid of revolution with equatorial radius <span class="math notranslate nohighlight">\(a\)</span>, polar
+semi-axis <span class="math notranslate nohighlight">\(b\)</span>, and flattening <span class="math notranslate nohighlight">\(f=(a-b)/a\)</span>. Points on
+the surface of the ellipsoid are characterized by their latitude <span class="math notranslate nohighlight">\(\phi\)</span>
+and longitude <span class="math notranslate nohighlight">\(\lambda\)</span>. (Note that latitude here means the
+<em>geographical latitude</em>, the angle between the normal to the ellipsoid
+and the equatorial plane).</p>
+<p>The shortest path between two points on the ellipsoid at
+<span class="math notranslate nohighlight">\((\phi_1,\lambda_1)\)</span> and <span class="math notranslate nohighlight">\((\phi_2,\lambda_2)\)</span>
+is called the geodesic. Its length is
+<span class="math notranslate nohighlight">\(s_{12}\)</span> and the geodesic from point 1 to point 2 has forward
+azimuths <span class="math notranslate nohighlight">\(\alpha_1\)</span> and <span class="math notranslate nohighlight">\(\alpha_2\)</span> at the two end
+points. In this figure, we have <span class="math notranslate nohighlight">\(\lambda_{12}=\lambda_2-\lambda_1\)</span>.</p>
+<blockquote>
+<div><center>
+ <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Geodesic_problem_on_an_ellipsoid.svg/320px-Geodesic_problem_on_an_ellipsoid.svg.png"
+ alt="Figure from wikipedia"
+ width="320">
+</center></div></blockquote>
+<p>A geodesic can be extended indefinitely by requiring that any
+sufficiently small segment is a shortest path; geodesics are also the
+straightest curves on the surface.</p>
+</section>
+<section id="solution-of-geodesic-problems">
+<h2>Solution of geodesic problems<a class="headerlink" href="#solution-of-geodesic-problems" title="Permalink to this headline">¶</a></h2>
+<p>Traditionally two geodesic problems are considered:</p>
+<ul class="simple">
+<li><p>the direct problem — given <span class="math notranslate nohighlight">\(\phi_1\)</span>,
+<span class="math notranslate nohighlight">\(\lambda_1\)</span>, <span class="math notranslate nohighlight">\(\alpha_1\)</span>, <span class="math notranslate nohighlight">\(s_{12}\)</span>,
+determine <span class="math notranslate nohighlight">\(\phi_2\)</span>, <span class="math notranslate nohighlight">\(\lambda_2\)</span>, <span class="math notranslate nohighlight">\(\alpha_2\)</span>.</p></li>
+<li><p>the inverse problem — given <span class="math notranslate nohighlight">\(\phi_1\)</span>,
+<span class="math notranslate nohighlight">\(\lambda_1\)</span>, <span class="math notranslate nohighlight">\(\phi_2\)</span>, <span class="math notranslate nohighlight">\(\lambda_2\)</span>,
+determine <span class="math notranslate nohighlight">\(s_{12}\)</span>, <span class="math notranslate nohighlight">\(\alpha_1\)</span>,
+<span class="math notranslate nohighlight">\(\alpha_2\)</span>.</p></li>
+</ul>
+<p>PROJ incorporates <a class="reference external" href="https://geographiclib.sourceforge.io/1.52/C/">C library for Geodesics</a> from <a class="reference external" href="https://geographiclib.sourceforge.io">GeographicLib</a>. This library provides
+routines to solve the direct and inverse geodesic problems. Full double
+precision accuracy is maintained provided that
+<span class="math notranslate nohighlight">\(\lvert f\rvert&lt;\frac1{50}\)</span>. Refer to the <a class="reference external" href="https://geographiclib.sourceforge.io/1.52/C/geodesic_8h.html">application programming interface</a>
+for full documentation. A brief summary of the routines is given in
+geodesic(3).</p>
+<p>The interface to the geodesic routines differ in two respects from the
+rest of PROJ:</p>
+<ul class="simple">
+<li><p>angles (latitudes, longitudes, and azimuths) are in degrees (instead
+of in radians);</p></li>
+<li><p>the shape of ellipsoid is specified by the flattening <span class="math notranslate nohighlight">\(f\)</span>; this can
+be negative to denote a prolate ellipsoid; setting <span class="math notranslate nohighlight">\(f=0\)</span> corresponds
+to a sphere, in which case the geodesic becomes a great circle.</p></li>
+</ul>
+<p>PROJ also includes a command line tool, <a class="reference internal" href="apps/geod.html#geod"><span class="std std-ref">geod</span></a>(1), for performing
+simple geodesic calculations.</p>
+</section>
+<section id="additional-properties">
+<h2>Additional properties<a class="headerlink" href="#additional-properties" title="Permalink to this headline">¶</a></h2>
+<p>The routines also calculate several other quantities of interest</p>
+<ul class="simple">
+<li><p><span class="math notranslate nohighlight">\(S_{12}\)</span> is the area between the geodesic from point 1 to
+point 2 and the equator; i.e., it is the area, measured
+counter-clockwise, of the quadrilateral with corners
+<span class="math notranslate nohighlight">\((\phi_1,\lambda_1)\)</span>, <span class="math notranslate nohighlight">\((0,\lambda_1)\)</span>,
+<span class="math notranslate nohighlight">\((0,\lambda_2)\)</span>, and
+<span class="math notranslate nohighlight">\((\phi_2,\lambda_2)\)</span>. It is given in
+meters<sup>2</sup>.</p></li>
+<li><p><span class="math notranslate nohighlight">\(m_{12}\)</span>, the reduced length of the geodesic is defined such
+that if the initial azimuth is perturbed by <span class="math notranslate nohighlight">\(d\alpha_1\)</span>
+(radians) then the second point is displaced by <span class="math notranslate nohighlight">\(m_{12}\,d\alpha_1\)</span>
+in the direction perpendicular to the
+geodesic. <span class="math notranslate nohighlight">\(m_{12}\)</span> is given in meters. On a curved surface
+the reduced length obeys a symmetry relation, <span class="math notranslate nohighlight">\(m_{12}+m_{21}=0\)</span>.
+On a flat surface, we have <span class="math notranslate nohighlight">\(m_{12}=s_{12}\)</span>.</p></li>
+<li><p><span class="math notranslate nohighlight">\(M_{12}\)</span> and <span class="math notranslate nohighlight">\(M_{21}\)</span> are geodesic scales. If two
+geodesics are parallel at point 1 and separated by a small distance
+<span class="math notranslate nohighlight">\(dt\)</span>, then they are separated by a distance <span class="math notranslate nohighlight">\(M_{12}\,dt\)</span> at
+point 2. <span class="math notranslate nohighlight">\(M_{21}\)</span> is defined similarly (with the geodesics
+being parallel to one another at point 2). <span class="math notranslate nohighlight">\(M_{12}\)</span> and
+<span class="math notranslate nohighlight">\(M_{21}\)</span> are dimensionless quantities. On a flat surface,
+we have <span class="math notranslate nohighlight">\(M_{12}=M_{21}=1\)</span>.</p></li>
+<li><p><span class="math notranslate nohighlight">\(\sigma_{12}\)</span> is the arc length on the auxiliary sphere.
+This is a construct for converting the problem to one in spherical
+trigonometry. The spherical arc length from one equator crossing to
+the next is always <span class="math notranslate nohighlight">\(180^\circ\)</span>.</p></li>
+</ul>
+<p>If points 1, 2, and 3 lie on a single geodesic, then the following
+addition rules hold:</p>
+<ul class="simple">
+<li><p><span class="math notranslate nohighlight">\(s_{13}=s_{12}+s_{23}\)</span>,</p></li>
+<li><p><span class="math notranslate nohighlight">\(\sigma_{13}=\sigma_{12}+\sigma_{23}\)</span>,</p></li>
+<li><p><span class="math notranslate nohighlight">\(S_{13}=S_{12}+S_{23}\)</span>,</p></li>
+<li><p><span class="math notranslate nohighlight">\(m_{13}=m_{12}M_{23}+m_{23}M_{21}\)</span>,</p></li>
+<li><p><span class="math notranslate nohighlight">\(M_{13}=M_{12}M_{23}-(1-M_{12}M_{21})m_{23}/m_{12}\)</span>,</p></li>
+<li><p><span class="math notranslate nohighlight">\(M_{31}=M_{32}M_{21}-(1-M_{23}M_{32})m_{12}/m_{23}\)</span>.</p></li>
+</ul>
+</section>
+<section id="multiple-shortest-geodesics">
+<h2>Multiple shortest geodesics<a class="headerlink" href="#multiple-shortest-geodesics" title="Permalink to this headline">¶</a></h2>
+<p>The shortest distance found by solving the inverse problem is
+(obviously) uniquely defined. However, in a few special cases there are
+multiple azimuths which yield the same shortest distance. Here is a
+catalog of those cases:</p>
+<ul class="simple">
+<li><p><span class="math notranslate nohighlight">\(\phi_1=-\phi_2\)</span> (with neither point at
+a pole). If <span class="math notranslate nohighlight">\(\alpha_1=\alpha_2\)</span>, the geodesic
+is unique. Otherwise there are two geodesics and the second one is
+obtained by setting
+<span class="math notranslate nohighlight">\([\alpha_1,\alpha_2]\leftarrow[\alpha_2,\alpha_1]\)</span>,
+<span class="math notranslate nohighlight">\([M_{12},M_{21}]\leftarrow[M_{21},M_{12}]\)</span>,
+<span class="math notranslate nohighlight">\(S_{12}\leftarrow-S_{12}\)</span>.
+(This occurs when the longitude difference is near <span class="math notranslate nohighlight">\(\pm180^\circ\)</span>
+for oblate ellipsoids.)</p></li>
+<li><p><span class="math notranslate nohighlight">\(\lambda_2=\lambda_1\pm180^\circ\)</span> (with
+neither point at a pole). If <span class="math notranslate nohighlight">\(\alpha_1=0^\circ\)</span> or
+<span class="math notranslate nohighlight">\(\pm180^\circ\)</span>, the geodesic is unique. Otherwise there are two
+geodesics and the second one is obtained by setting
+<span class="math notranslate nohighlight">\([\alpha_1,\alpha_2]\leftarrow[-\alpha_1,-\alpha_2]\)</span>,
+<span class="math notranslate nohighlight">\(S_{12}\leftarrow-S_{12}\)</span>. (This occurs when
+<span class="math notranslate nohighlight">\(\phi_2\)</span> is near <span class="math notranslate nohighlight">\(-\phi_1\)</span> for prolate
+ellipsoids.)</p></li>
+<li><p>Points 1 and 2 at opposite poles. There are infinitely many
+geodesics which can be generated by setting
+<span class="math notranslate nohighlight">\([\alpha_1,\alpha_2]\leftarrow[\alpha_1,\alpha_2]+[\delta,-\delta]\)</span>,
+for arbitrary <span class="math notranslate nohighlight">\(\delta\)</span>.
+(For spheres, this prescription applies when points 1 and 2 are
+antipodal.)</p></li>
+<li><p><span class="math notranslate nohighlight">\(s_{12}=0\)</span> (coincident points). There are infinitely many
+geodesics which can be generated by setting
+<span class="math notranslate nohighlight">\([\alpha_1,\alpha_2]\leftarrow[\alpha_1,\alpha_2]+[\delta,\delta]\)</span>,
+for arbitrary <span class="math notranslate nohighlight">\(\delta\)</span>.</p></li>
+</ul>
+</section>
+<section id="background">
+<h2>Background<a class="headerlink" href="#background" title="Permalink to this headline">¶</a></h2>
+<p>The algorithms implemented by this package are given in <span id="id1">[<a class="reference internal" href="zreferences.html#id20" title="Karney, C. F. F. Algorithms for geodesics. Journal of Geodesy, 87(1):43–55, 2013. doi:10.1007/s00190-012-0578-z.">Karney2013</a>]</span>
+(<a class="reference external" href="https://geographiclib.sourceforge.io/geod-addenda.html">addenda</a>)
+and are based on <span id="id2">[<a class="reference internal" href="zreferences.html#id4" title="Bessel, F. W. The calculation of longitude and latitude from geodesic measurements. Astronomische Nachrichten, 4(86):241–254, 1825. arXiv:0908.1824.">Bessel1825</a>]</span> and <span id="id3">[<a class="reference internal" href="zreferences.html#id15" title="Helmert, F. R. Mathematical and Physical Theories of Higher Geodesy. Volume 1. Teubner, Leipzig, 1880. doi:10.5281/zenodo.32050.">Helmert1880</a>]</span>; the algorithm for
+areas is based on <span id="id4">[<a class="reference internal" href="zreferences.html#id7" title="Danielsen, J. The area under the geodesic. Survey Review, 30(232):61–66, 1989. doi:10.1179/sre.1989.30.232.61.">Danielsen1989</a>]</span>. These improve on the work of
+<span id="id5">[<a class="reference internal" href="zreferences.html#id41" title="Vincenty, T. Direct and inverse solutions of geodesics on the ellipsoid with application of nested equations. Survey Review, 23(176):88–93, 1975. doi:10.1179/sre.1975.23.176.88.">Vincenty1975</a>]</span> in the following respects:</p>
+<ul class="simple">
+<li><p>The results are accurate to round-off for terrestrial ellipsoids (the
+error in the distance is less than 15 nanometers, compared to 0.1 mm
+for Vincenty).</p></li>
+<li><p>The solution of the inverse problem is always found. (Vincenty’s
+method fails to converge for nearly antipodal points.)</p></li>
+<li><p>The routines calculate differential and integral properties of a
+geodesic. This allows, for example, the area of a geodesic polygon to
+be computed.</p></li>
+</ul>
+<p>Additional background material is provided in GeographicLib’s <a class="reference external" href="https://geographiclib.sourceforge.io/geodesic-papers/biblio.html">geodesic
+bibliography</a>,
+Wikipedia’s article “<a class="reference external" href="https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid">Geodesics on an ellipsoid</a>”, and <span id="id6">[<a class="reference internal" href="zreferences.html#id22" title="Karney, C. F. F. Geodesics on an ellipsoid of revolution. ArXiv e-prints, 2011. arXiv:1102.1215.">Karney2011</a>]</span>
+(<a class="reference external" href="https://geographiclib.sourceforge.io/geod-addenda.html#geod-errata">errata</a>).</p>
+</section>
+</section>
+
+
+ </div>
+ </div>
+ <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+ <a href="resource_files.html" class="btn btn-neutral float-left" title="Resource files" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+ <a href="development/index.html" class="btn btn-neutral float-right" title="Development" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+ </div>
+
+ <hr/>
+
+ <div role="contentinfo">
+ <p>&#169; Copyright 1983-2022.
+ <span class="lastupdated">Last updated on 22 Mar 2022.
+ </span></p>
+ </div>
+
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
+
+
+</footer>
+ </div>
+ </div>
+ </section>
+ </div>
+ <script>
+ jQuery(function () {
+ SphinxRtdTheme.Navigation.enable(true);
+ });
+ </script>
+
+</body>
+</html> \ No newline at end of file