/usr/share/doc/geographiclib/html/EquidistantTest_8cpp_source.html is in geographiclib-tools 1.8-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>GeographicLib: EquidistantTest.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File Members</span></a></li>
</ul>
</div>
<div class="navpath">
<ul>
<li><a class="el" href="dir_f0cd0a94c27b816d12e5ff1a9ae56734.html">tools</a> </li>
</ul>
</div>
</div>
<div class="header">
<div class="headertitle">
<h1>EquidistantTest.cpp</h1> </div>
</div>
<div class="contents">
<a href="EquidistantTest_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
<a name="l00002"></a>00002 <span class="comment"> * \file EquidistantTest.cpp</span>
<a name="l00003"></a>00003 <span class="comment"> * \brief Command line utility for azimuthal equidistant and Cassini-Soldner</span>
<a name="l00004"></a>00004 <span class="comment"> * projections</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * Copyright (c) Charles Karney (2009, 2010, 2011) <charles@karney.com></span>
<a name="l00007"></a>00007 <span class="comment"> * and licensed under the LGPL. For more information, see</span>
<a name="l00008"></a>00008 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
<a name="l00009"></a>00009 <span class="comment"> *</span>
<a name="l00010"></a>00010 <span class="comment"> * Compile with -I../include and link with Geodesic.o GeodesicLine.o</span>
<a name="l00011"></a>00011 <span class="comment"> * AzimuthalEquidistant.o Gnomonic.o CassiniSoldner.o</span>
<a name="l00012"></a>00012 <span class="comment"> *</span>
<a name="l00013"></a>00013 <span class="comment"> * See the <a href="EquidistantTest.1.html">man page</a> for usage</span>
<a name="l00014"></a>00014 <span class="comment"> * information.</span>
<a name="l00015"></a>00015 <span class="comment"> **********************************************************************/</span>
<a name="l00016"></a>00016
<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="Geodesic_8hpp.html" title="Header for GeographicLib::Geodesic class.">GeographicLib/Geodesic.hpp</a>"</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="AzimuthalEquidistant_8hpp.html" title="Header for GeographicLib::AzimuthalEquidistant class.">GeographicLib/AzimuthalEquidistant.hpp</a>"</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="CassiniSoldner_8hpp.html" title="Header for GeographicLib::CassiniSoldner class.">GeographicLib/CassiniSoldner.hpp</a>"</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="Gnomonic_8hpp.html" title="Header for GeographicLib::Gnomonic class.">GeographicLib/Gnomonic.hpp</a>"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="DMS_8hpp.html" title="Header for GeographicLib::DMS class.">GeographicLib/DMS.hpp</a>"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include <iostream></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include <sstream></span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#include "EquidistantTest.usage"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="EquidistantTest_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00027</a> <span class="keywordtype">int</span> <a class="code" href="CartConvert_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]) {
<a name="l00028"></a>00028 <span class="keyword">using namespace </span>GeographicLib;
<a name="l00029"></a>00029 <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> real;
<a name="l00030"></a>00030 <span class="keywordtype">bool</span> azimuthal = <span class="keyword">false</span>, cassini = <span class="keyword">false</span>, gnomonic = <span class="keyword">false</span>, reverse = <span class="keyword">false</span>;
<a name="l00031"></a>00031 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat0 = 0, lon0 = 0;
<a name="l00032"></a>00032 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>
<a name="l00033"></a>00033 a = Constants::WGS84_a<real>(),
<a name="l00034"></a>00034 r = Constants::WGS84_r<real>();
<a name="l00035"></a>00035 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> m = 1; m < argc; ++m) {
<a name="l00036"></a>00036 std::string arg(argv[m]);
<a name="l00037"></a>00037 <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-r"</span>)
<a name="l00038"></a>00038 reverse = <span class="keyword">true</span>;
<a name="l00039"></a>00039 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-c"</span> || arg == <span class="stringliteral">"-z"</span> || arg == <span class="stringliteral">"-g"</span>) {
<a name="l00040"></a>00040 cassini = arg == <span class="stringliteral">"-c"</span>;
<a name="l00041"></a>00041 azimuthal = arg == <span class="stringliteral">"-z"</span>;
<a name="l00042"></a>00042 gnomonic = arg == <span class="stringliteral">"-g"</span>;
<a name="l00043"></a>00043 <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
<a name="l00044"></a>00044 <span class="keywordflow">try</span> {
<a name="l00045"></a>00045 <a class="code" href="classGeographicLib_1_1DMS.html#a9b6d1f79b4427f5076b98098d470228d">DMS::DecodeLatLon</a>(std::string(argv[m + 1]), std::string(argv[m + 2]),
<a name="l00046"></a>00046 lat0, lon0);
<a name="l00047"></a>00047 }
<a name="l00048"></a>00048 <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
<a name="l00049"></a>00049 std::cerr << <span class="stringliteral">"Error decoding arguments of "</span> << arg << <span class="stringliteral">": "</span>
<a name="l00050"></a>00050 << e.what() << <span class="stringliteral">"\n"</span>;
<a name="l00051"></a>00051 <span class="keywordflow">return</span> 1;
<a name="l00052"></a>00052 }
<a name="l00053"></a>00053 m += 2;
<a name="l00054"></a>00054 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"-e"</span>) {
<a name="l00055"></a>00055 <span class="keywordflow">if</span> (m + 2 >= argc) <span class="keywordflow">return</span> usage(1, <span class="keyword">true</span>);
<a name="l00056"></a>00056 <span class="keywordflow">try</span> {
<a name="l00057"></a>00057 a = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[m + 1]));
<a name="l00058"></a>00058 r = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(std::string(argv[m + 2]));
<a name="l00059"></a>00059 }
<a name="l00060"></a>00060 <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
<a name="l00061"></a>00061 std::cerr << <span class="stringliteral">"Error decoding arguments of -e: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
<a name="l00062"></a>00062 <span class="keywordflow">return</span> 1;
<a name="l00063"></a>00063 }
<a name="l00064"></a>00064 m += 2;
<a name="l00065"></a>00065 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arg == <span class="stringliteral">"--version"</span>) {
<a name="l00066"></a>00066 std::cout
<a name="l00067"></a>00067 << PROGRAM_NAME
<a name="l00068"></a>00068 << <span class="stringliteral">": $Id: EquidistantTest.cpp 6978 2011-02-21 22:42:11Z karney $\n"</span>
<a name="l00069"></a>00069 << <span class="stringliteral">"GeographicLib version "</span> << GEOGRAPHICLIB_VERSION << <span class="stringliteral">"\n"</span>;
<a name="l00070"></a>00070 <span class="keywordflow">return</span> 0;
<a name="l00071"></a>00071 } <span class="keywordflow">else</span>
<a name="l00072"></a>00072 <span class="keywordflow">return</span> usage(!(arg == <span class="stringliteral">"-h"</span> || arg == <span class="stringliteral">"--help"</span>), arg != <span class="stringliteral">"--help"</span>);
<a name="l00073"></a>00073 }
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keywordflow">if</span> (!(azimuthal || cassini || gnomonic)) {
<a name="l00076"></a>00076 std::cerr << <span class="stringliteral">"Must specify \"-z lat0 lon0\" or "</span>
<a name="l00077"></a>00077 << <span class="stringliteral">"\"-c lat0 lon0\" or \"-g lat0 lon0\"\n"</span>;
<a name="l00078"></a>00078 <span class="keywordflow">return</span> 1;
<a name="l00079"></a>00079 }
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="keyword">const</span> Geodesic geod(a, r);
<a name="l00082"></a>00082 <span class="keyword">const</span> CassiniSoldner cs = cassini ?
<a name="l00083"></a>00083 CassiniSoldner(lat0, lon0, geod) : CassiniSoldner(geod);
<a name="l00084"></a>00084 <span class="keyword">const</span> AzimuthalEquidistant az(geod);
<a name="l00085"></a>00085 <span class="keyword">const</span> Gnomonic gn(geod);
<a name="l00086"></a>00086
<a name="l00087"></a>00087 std::string s;
<a name="l00088"></a>00088 <span class="keywordtype">int</span> retval = 0;
<a name="l00089"></a>00089 std::cout << std::fixed;
<a name="l00090"></a>00090 <span class="keywordflow">while</span> (std::getline(std::cin, s)) {
<a name="l00091"></a>00091 <span class="keywordflow">try</span> {
<a name="l00092"></a>00092 std::istringstream str(s);
<a name="l00093"></a>00093 <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> lat, lon, x, y, azi, rk;
<a name="l00094"></a>00094 std::string stra, strb;
<a name="l00095"></a>00095 <span class="keywordflow">if</span> (!(str >> stra >> strb))
<a name="l00096"></a>00096 <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Incomplete input: "</span> + s);
<a name="l00097"></a>00097 <span class="keywordflow">if</span> (reverse) {
<a name="l00098"></a>00098 x = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(stra);
<a name="l00099"></a>00099 y = <a class="code" href="classGeographicLib_1_1DMS.html#ae802c666ad53884ce062281409bd78b4">DMS::Decode</a>(strb);
<a name="l00100"></a>00100 } <span class="keywordflow">else</span>
<a name="l00101"></a>00101 <a class="code" href="classGeographicLib_1_1DMS.html#a9b6d1f79b4427f5076b98098d470228d">DMS::DecodeLatLon</a>(stra, strb, lat, lon);
<a name="l00102"></a>00102 std::string strc;
<a name="l00103"></a>00103 <span class="keywordflow">if</span> (str >> strc)
<a name="l00104"></a>00104 <span class="keywordflow">throw</span> GeographicErr(<span class="stringliteral">"Extraneous input: "</span> + strc);
<a name="l00105"></a>00105 <span class="keywordflow">if</span> (reverse) {
<a name="l00106"></a>00106 <span class="keywordflow">if</span> (cassini)
<a name="l00107"></a>00107 cs.Reverse(x, y, lat, lon, azi, rk);
<a name="l00108"></a>00108 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (azimuthal)
<a name="l00109"></a>00109 az.Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
<a name="l00110"></a>00110 <span class="keywordflow">else</span>
<a name="l00111"></a>00111 gn.Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
<a name="l00112"></a>00112 std::cout << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(lat, 15, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00113"></a>00113 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(lon, 15, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00114"></a>00114 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(azi, 15, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00115"></a>00115 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(rk, 16, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">"\n"</span>;
<a name="l00116"></a>00116 } <span class="keywordflow">else</span> {
<a name="l00117"></a>00117 <span class="keywordflow">if</span> (cassini)
<a name="l00118"></a>00118 cs.Forward(lat, lon, x, y, azi, rk);
<a name="l00119"></a>00119 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (azimuthal)
<a name="l00120"></a>00120 az.Forward(lat0, lon0, lat, lon, x, y, azi, rk);
<a name="l00121"></a>00121 <span class="keywordflow">else</span>
<a name="l00122"></a>00122 gn.Forward(lat0, lon0, lat, lon, x, y, azi, rk);
<a name="l00123"></a>00123 std::cout << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(x, 10, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00124"></a>00124 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(y, 10, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00125"></a>00125 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(azi, 15, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">" "</span>
<a name="l00126"></a>00126 << <a class="code" href="classGeographicLib_1_1DMS.html#a3e36baa6114d46f82a8900d002784369">DMS::Encode</a>(rk, 16, <a class="code" href="classGeographicLib_1_1DMS.html#a7a1101fd2577636863753baae3e54869a5a65ec03b2682ad76873829167882518">DMS::NUMBER</a>) << <span class="stringliteral">"\n"</span>;
<a name="l00127"></a>00127 }
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129 <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception& e) {
<a name="l00130"></a>00130 std::cout << <span class="stringliteral">"ERROR: "</span> << e.what() << <span class="stringliteral">"\n"</span>;
<a name="l00131"></a>00131 retval = 1;
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133 }
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="keywordflow">return</span> retval;
<a name="l00136"></a>00136 }
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue Feb 22 2011 for GeographicLib by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>
|