NETGeographicLib  1.43
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Pages
GeodesicLine.h
Go to the documentation of this file.
1 #pragma once
2 /**
3  * \file NETGeographicLib/GeodesicLine.h
4  * \brief Header for NETGeographicLib::GeodesicLine class
5  *
6  * NETGeographicLib is copyright (c) Scott Heiman (2013)
7  * GeographicLib is Copyright (c) Charles Karney (2010-2012)
8  * <charles@karney.com> and licensed under the MIT/X11 License.
9  * For more information, see
10  * http://geographiclib.sourceforge.net/
11  **********************************************************************/
12 #include "NETGeographicLib.h"
13 
14 namespace NETGeographicLib
15 {
16  /**
17  * \brief .NET wrapper for GeographicLib::GeodesicLine.
18  *
19  * This class allows .NET applications to access GeographicLib::GeodesicLine.
20  *
21  * GeodesicLine facilitates the determination of a series of points on a
22  * single geodesic. The starting point (\e lat1, \e lon1) and the azimuth \e
23  * azi1 are specified in the constructor. GeodesicLine.Position returns the
24  * location of point 2 a distance \e s12 along the geodesic. Alternatively
25  * GeodesicLine.ArcPosition gives the position of point 2 an arc length \e
26  * a12 along the geodesic.
27  *
28  * The default copy constructor and assignment operators work with this
29  * class. Similarly, a vector can be used to hold GeodesicLine objects.
30  *
31  * The calculations are accurate to better than 15 nm (15 nanometers). See
32  * Sec. 9 of
33  * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for
34  * details. The algorithms used by this class are based on series expansions
35  * using the flattening \e f as a small parameter. These are only accurate
36  * for |<i>f</i>| &lt; 0.02; however reasonably accurate results will be
37  * obtained for |<i>f</i>| &lt; 0.2. For very eccentric ellipsoids, use
38  * GeodesicLineExact instead.
39  *
40  * The algorithms are described in
41  * - C. F. F. Karney,
42  * <a href="https://dx.doi.org/10.1007/s00190-012-0578-z">
43  * Algorithms for geodesics</a>,
44  * J. Geodesy <b>87</b>, 43--55 (2013);
45  * DOI: <a href="https://dx.doi.org/10.1007/s00190-012-0578-z">
46  * 10.1007/s00190-012-0578-z</a>;
47  * addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
48  * geod-addenda.html</a>.
49  * .
50  * For more information on geodesics see \ref geodesic.
51  *
52  * C# Example:
53  * \include example-GeodesicLine.cs
54  * Managed C++ Example:
55  * \include example-GeodesicLine.cpp
56  * Visual Basic Example:
57  * \include example-GeodesicLine.vb
58  *
59  * <B>INTERFACE DIFFERENCES:</B><BR>
60  * A constructor has been provided which assumes WGS84 parameters.
61  *
62  * The following functions are implemented as properties:
63  * Latitude, Longitude, Azimuth, EquatorialAzimuth, EquatorialArc,
64  * MajorRadius, and Flattening.
65  *
66  * The constructors, Capabilities, and GenPosition functions accept the
67  * "capabilities mask" as a NETGeographicLib::Mask rather than an
68  * unsigned. The Capabilities function returns a NETGeographicLib::Mask
69  * rather than an unsigned.
70  **********************************************************************/
71  public ref class GeodesicLine
72  {
73  private:
74  // pointer to the unmanaged GeographicLib::GeodesicLine.
75  const GeographicLib::GeodesicLine* m_pGeodesicLine;
76 
77  // The finalizer frees the unmanaged memory when this object is destroyed.
78  !GeodesicLine(void);
79  public:
80 
81  /**
82  * Bit masks for what calculations to do. They signify to the
83  * GeodesicLine::GeodesicLine constructor and to Geodesic::Line what
84  * capabilities should be included in the GeodesicLine object. This is
85  * merely a duplication of Geodesic::mask.
86  **********************************************************************/
87  enum class mask {
88  /**
89  * No capabilities, no output.
90  * @hideinitializer
91  **********************************************************************/
92  NONE = 0U,
93  /**
94  * Calculate latitude \e lat2. (It's not necessary to include this as a
95  * capability to GeodesicLine because this is included by default.)
96  * @hideinitializer
97  **********************************************************************/
98  LATITUDE = 1U<<7 | unsigned(captype::CAP_NONE),
99  /**
100  * Calculate longitude \e lon2.
101  * @hideinitializer
102  **********************************************************************/
103  LONGITUDE = 1U<<8 | unsigned(captype::CAP_C3),
104  /**
105  * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to
106  * include this as a capability to GeodesicLine because this is included
107  * by default.)
108  * @hideinitializer
109  **********************************************************************/
110  AZIMUTH = 1U<<9 | unsigned(captype::CAP_NONE),
111  /**
112  * Calculate distance \e s12.
113  * @hideinitializer
114  **********************************************************************/
115  DISTANCE = 1U<<10 | unsigned(captype::CAP_C1),
116  /**
117  * Allow distance \e s12 to be used as input in the direct geodesic
118  * problem.
119  * @hideinitializer
120  **********************************************************************/
121  DISTANCE_IN = 1U<<11 | unsigned(captype::CAP_C1) | unsigned(captype::CAP_C1p),
122  /**
123  * Calculate reduced length \e m12.
124  * @hideinitializer
125  **********************************************************************/
126  REDUCEDLENGTH = 1U<<12 | unsigned(captype::CAP_C1) | unsigned(captype::CAP_C2),
127  /**
128  * Calculate geodesic scales \e M12 and \e M21.
129  * @hideinitializer
130  **********************************************************************/
131  GEODESICSCALE = 1U<<13 | unsigned(captype::CAP_C1) | unsigned(captype::CAP_C2),
132  /**
133  * Calculate area \e S12.
134  * @hideinitializer
135  **********************************************************************/
136  AREA = 1U<<14 | unsigned(captype::CAP_C4),
137  /**
138  * Unroll \e lon2 in the direct calculation. (This flag used to be
139  * called LONG_NOWRAP.)
140  * @hideinitializer
141  **********************************************************************/
142  LONG_UNROLL = 1U<<15,
144  /**
145  * All capabilities, calculate everything. (LONG_UNROLL is not
146  * included in this mask.)
147  * @hideinitializer
148  **********************************************************************/
149  ALL = unsigned(captype::OUT_ALL)| unsigned(captype::CAP_ALL),
150  };
151  /** \name Constructors
152  **********************************************************************/
153  ///@{
154 
155  /**
156  * Constructor for a geodesic line staring at latitude \e lat1, longitude
157  * \e lon1, and azimuth \e azi1 (all in degrees).
158  *
159  * @param[in] g A Geodesic object used to compute the necessary information
160  * about the GeodesicLine.
161  * @param[in] lat1 latitude of point 1 (degrees).
162  * @param[in] lon1 longitude of point 1 (degrees).
163  * @param[in] azi1 azimuth at point 1 (degrees).
164  * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
165  * specifying the capabilities the GeodesicLine object should possess,
166  * i.e., which quantities can be returned in calls to
167  * GeodesicLine::Position.
168  *
169  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
170  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
171  *
172  * The NETGeographicLib::Mask values are
173  * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is
174  * added automatically;
175  * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2;
176  * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is
177  * added automatically;
178  * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12;
179  * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12;
180  * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12
181  * and \e M21;
182  * - \e caps |= GeodesicLine::AREA for the area \e S12;
183  * - \e caps |= GeodesicLine::DISTANCE_IN permits the length of the
184  * geodesic to be given in terms of \e s12; without this capability the
185  * length can only be specified in terms of arc length;
186  * - \e caps |= GeodesicLine::ALL for all of the above.
187  * .
188  * The default value of \e caps is GeodesicLine::ALL.
189  *
190  * If the point is at a pole, the azimuth is defined by keeping \e lon1
191  * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
192  * the limit &epsilon; &rarr; 0+.
193  **********************************************************************/
194  GeodesicLine( Geodesic^ g, double lat1, double lon1, double azi1,
195  NETGeographicLib::Mask caps );
196 
197  /**
198  * A constructor which assumes the WGS84 ellipsoid.
199  **********************************************************************/
200  GeodesicLine(double lat1, double lon1, double azi1,
202  ///@}
203 
204  /**
205  * The destructor calls the finalizer.
206  **********************************************************************/
208  { this->!GeodesicLine(); }
209 
210  /** \name Position in terms of distance
211  **********************************************************************/
212  ///@{
213 
214  /**
215  * Compute the position of point 2 which is a distance \e s12 (meters) from
216  * point 1.
217  *
218  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
219  * negative.
220  * @param[out] lat2 latitude of point 2 (degrees).
221  * @param[out] lon2 longitude of point 2 (degrees); requires that the
222  * GeodesicLine object was constructed with \e caps |=
223  * GeodesicLine::LONGITUDE.
224  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
225  * @param[out] m12 reduced length of geodesic (meters); requires that the
226  * GeodesicLine object was constructed with \e caps |=
227  * GeodesicLine::REDUCEDLENGTH.
228  * @param[out] M12 geodesic scale of point 2 relative to point 1
229  * (dimensionless); requires that the GeodesicLine object was constructed
230  * with \e caps |= GeodesicLine::GEODESICSCALE.
231  * @param[out] M21 geodesic scale of point 1 relative to point 2
232  * (dimensionless); requires that the GeodesicLine object was constructed
233  * with \e caps |= GeodesicLine::GEODESICSCALE.
234  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
235  * that the GeodesicLine object was constructed with \e caps |=
236  * GeodesicLine::AREA.
237  * @return \e a12 arc length of between point 1 and point 2 (degrees).
238  *
239  * The values of \e lon2 and \e azi2 returned are in the range
240  * [&minus;180&deg;, 180&deg;).
241  *
242  * The GeodesicLine object \e must have been constructed with \e caps |=
243  * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no
244  * parameters are set. Requesting a value which the GeodesicLine object is
245  * not capable of computing is not an error; the corresponding argument
246  * will not be altered.
247  *
248  * The following functions are overloaded versions of
249  * GeodesicLine::Position which omit some of the output parameters. Note,
250  * however, that the arc length is always computed and returned as the
251  * function value.
252  **********************************************************************/
253  double Position(double s12,
254  [System::Runtime::InteropServices::Out] double% lat2,
255  [System::Runtime::InteropServices::Out] double% lon2,
256  [System::Runtime::InteropServices::Out] double% azi2,
257  [System::Runtime::InteropServices::Out] double% m12,
258  [System::Runtime::InteropServices::Out] double% M12,
259  [System::Runtime::InteropServices::Out] double% M21,
260  [System::Runtime::InteropServices::Out] double% S12);
261 
262  /**
263  * See the documentation for GeodesicLine::Position.
264  **********************************************************************/
265  double Position(double s12,
266  [System::Runtime::InteropServices::Out] double% lat2,
267  [System::Runtime::InteropServices::Out] double% lon2);
268 
269  /**
270  * See the documentation for GeodesicLine::Position.
271  **********************************************************************/
272  double Position(double s12,
273  [System::Runtime::InteropServices::Out] double% lat2,
274  [System::Runtime::InteropServices::Out] double% lon2,
275  [System::Runtime::InteropServices::Out] double% azi2);
276 
277  /**
278  * See the documentation for GeodesicLine::Position.
279  **********************************************************************/
280  double Position(double s12,
281  [System::Runtime::InteropServices::Out] double% lat2,
282  [System::Runtime::InteropServices::Out] double% lon2,
283  [System::Runtime::InteropServices::Out] double% azi2,
284  [System::Runtime::InteropServices::Out] double% m12);
285 
286  /**
287  * See the documentation for GeodesicLine::Position.
288  **********************************************************************/
289  double Position(double s12,
290  [System::Runtime::InteropServices::Out] double% lat2,
291  [System::Runtime::InteropServices::Out] double% lon2,
292  [System::Runtime::InteropServices::Out] double% azi2,
293  [System::Runtime::InteropServices::Out] double% M12,
294  [System::Runtime::InteropServices::Out] double% M21);
295 
296  /**
297  * See the documentation for GeodesicLine::Position.
298  **********************************************************************/
299  double Position(double s12,
300  [System::Runtime::InteropServices::Out] double% lat2,
301  [System::Runtime::InteropServices::Out] double% lon2,
302  [System::Runtime::InteropServices::Out] double% azi2,
303  [System::Runtime::InteropServices::Out] double% m12,
304  [System::Runtime::InteropServices::Out] double% M12,
305  [System::Runtime::InteropServices::Out] double% M21);
306 
307  ///@}
308 
309  /** \name Position in terms of arc length
310  **********************************************************************/
311  ///@{
312 
313  /**
314  * Compute the position of point 2 which is an arc length \e a12 (degrees)
315  * from point 1.
316  *
317  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
318  * be negative.
319  * @param[out] lat2 latitude of point 2 (degrees).
320  * @param[out] lon2 longitude of point 2 (degrees); requires that the
321  * GeodesicLine object was constructed with \e caps |=
322  * NETGeographicLib::Mask::LONGITUDE.
323  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
324  * @param[out] s12 distance between point 1 and point 2 (meters); requires
325  * that the GeodesicLine object was constructed with \e caps |=
326  * NETGeographicLib::Mask::DISTANCE.
327  * @param[out] m12 reduced length of geodesic (meters); requires that the
328  * GeodesicLine object was constructed with \e caps |=
329  * NETGeographicLib::Mask::REDUCEDLENGTH.
330  * @param[out] M12 geodesic scale of point 2 relative to point 1
331  * (dimensionless); requires that the GeodesicLine object was constructed
332  * with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
333  * @param[out] M21 geodesic scale of point 1 relative to point 2
334  * (dimensionless); requires that the GeodesicLine object was constructed
335  * with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
336  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
337  * that the GeodesicLine object was constructed with \e caps |=
338  * NETGeographicLib::Mask::AREA.
339  *
340  * The values of \e lon2 and \e azi2 returned are in the range
341  * [&minus;180&deg;, 180&deg;).
342  *
343  * Requesting a value which the GeodesicLine object is not capable of
344  * computing is not an error; the corresponding argument will not be
345  * altered.
346  *
347  * The following functions are overloaded versions of
348  * GeodesicLine::ArcPosition which omit some of the output parameters.
349  **********************************************************************/
350  void ArcPosition(double a12,
351  [System::Runtime::InteropServices::Out] double% lat2,
352  [System::Runtime::InteropServices::Out] double% lon2,
353  [System::Runtime::InteropServices::Out] double% azi2,
354  [System::Runtime::InteropServices::Out] double% s12,
355  [System::Runtime::InteropServices::Out] double% m12,
356  [System::Runtime::InteropServices::Out] double% M12,
357  [System::Runtime::InteropServices::Out] double% M21,
358  [System::Runtime::InteropServices::Out] double% S12);
359 
360  /**
361  * See the documentation for GeodesicLine::ArcPosition.
362  **********************************************************************/
363  void ArcPosition(double a12,
364  [System::Runtime::InteropServices::Out] double% lat2,
365  [System::Runtime::InteropServices::Out] double% lon2);
366 
367  /**
368  * See the documentation for GeodesicLine::ArcPosition.
369  **********************************************************************/
370  void ArcPosition(double a12,
371  [System::Runtime::InteropServices::Out] double% lat2,
372  [System::Runtime::InteropServices::Out] double% lon2,
373  [System::Runtime::InteropServices::Out] double% azi2);
374 
375  /**
376  * See the documentation for GeodesicLine::ArcPosition.
377  **********************************************************************/
378  void ArcPosition(double a12,
379  [System::Runtime::InteropServices::Out] double% lat2,
380  [System::Runtime::InteropServices::Out] double% lon2,
381  [System::Runtime::InteropServices::Out] double% azi2,
382  [System::Runtime::InteropServices::Out] double% s12);
383 
384  /**
385  * See the documentation for GeodesicLine::ArcPosition.
386  **********************************************************************/
387  void ArcPosition(double a12,
388  [System::Runtime::InteropServices::Out] double% lat2,
389  [System::Runtime::InteropServices::Out] double% lon2,
390  [System::Runtime::InteropServices::Out] double% azi2,
391  [System::Runtime::InteropServices::Out] double% s12,
392  [System::Runtime::InteropServices::Out] double% m12);
393 
394  /**
395  * See the documentation for GeodesicLine::ArcPosition.
396  **********************************************************************/
397  void ArcPosition(double a12,
398  [System::Runtime::InteropServices::Out] double% lat2,
399  [System::Runtime::InteropServices::Out] double% lon2,
400  [System::Runtime::InteropServices::Out] double% azi2,
401  [System::Runtime::InteropServices::Out] double% s12,
402  [System::Runtime::InteropServices::Out] double% M12,
403  [System::Runtime::InteropServices::Out] double% M21);
404 
405  /**
406  * See the documentation for GeodesicLine::ArcPosition.
407  **********************************************************************/
408  void ArcPosition(double a12,
409  [System::Runtime::InteropServices::Out] double% lat2,
410  [System::Runtime::InteropServices::Out] double% lon2,
411  [System::Runtime::InteropServices::Out] double% azi2,
412  [System::Runtime::InteropServices::Out] double% s12,
413  [System::Runtime::InteropServices::Out] double% m12,
414  [System::Runtime::InteropServices::Out] double% M12,
415  [System::Runtime::InteropServices::Out] double% M21);
416  ///@}
417 
418  /** \name The general position function.
419  **********************************************************************/
420  ///@{
421 
422  /**
423  * The general position function. GeodesicLine::Position and
424  * GeodesicLine::ArcPosition are defined in terms of this function.
425  *
426  * @param[in] arcmode boolean flag determining the meaning of the second
427  * parameter; if arcmode is false, then the GeodesicLine object must have
428  * been constructed with \e caps |= GeodesicLine::DISTANCE_IN.
429  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
430  * point 1 and point 2 (meters); otherwise it is the arc length between
431  * point 1 and point 2 (degrees); it can be negative.
432  * @param[in] outmask a bitor'ed combination of GeodesicLine::mask values
433  * specifying which of the following parameters should be set.
434  * @param[out] lat2 latitude of point 2 (degrees).
435  * @param[out] lon2 longitude of point 2 (degrees); requires that the
436  * GeodesicLine object was constructed with \e caps |=
437  * GeodesicLine::LONGITUDE.
438  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
439  * @param[out] s12 distance between point 1 and point 2 (meters); requires
440  * that the GeodesicLine object was constructed with \e caps |=
441  * GeodesicLine::DISTANCE.
442  * @param[out] m12 reduced length of geodesic (meters); requires that the
443  * GeodesicLine object was constructed with \e caps |=
444  * GeodesicLine::REDUCEDLENGTH.
445  * @param[out] M12 geodesic scale of point 2 relative to point 1
446  * (dimensionless); requires that the GeodesicLine object was constructed
447  * with \e caps |= GeodesicLine::GEODESICSCALE.
448  * @param[out] M21 geodesic scale of point 1 relative to point 2
449  * (dimensionless); requires that the GeodesicLine object was constructed
450  * with \e caps |= GeodesicLine::GEODESICSCALE.
451  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
452  * that the GeodesicLine object was constructed with \e caps |=
453  * GeodesicLine::AREA.
454  * @return \e a12 arc length of between point 1 and point 2 (degrees).
455  *
456  * The GeodesicLine::mask values possible for \e outmask are
457  * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2;
458  * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2;
459  * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2;
460  * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12;
461  * - \e outmask |= GeodesicLine::REDUCEDLENGTH for the reduced length \e
462  * m12;
463  * - \e outmask |= GeodesicLine::GEODESICSCALE for the geodesic scales \e
464  * M12 and \e M21;
465  * - \e outmask |= GeodesicLine::AREA for the area \e S12;
466  * - \e outmask |= GeodesicLine::ALL for all of the above;
467  * - \e outmask |= GeodesicLine::LONG_UNROLL to unroll \e lon2 instead of
468  * wrapping it into the range [&minus;180&deg;, 180&deg;).
469  * .
470  * Requesting a value which the GeodesicLine object is not capable of
471  * computing is not an error; the corresponding argument will not be
472  * altered. Note, however, that the arc length is always computed and
473  * returned as the function value.
474  *
475  * With the LONG_UNROLL bit set, the quantity \e lon2 &minus; \e lon1
476  * indicates how many times and in what sense the geodesic encircles
477  * the ellipsoid. Because \e lon2 might be outside the normal allowed
478  * range for longitudes, [&minus;540&deg;, 540&deg;), be sure to
479  * normalize it with Math::AngNormalize2 before using it in other
480  * GeographicLib calls.
481  **********************************************************************/
482  double GenPosition(bool arcmode, double s12_a12,
483  GeodesicLine::mask outmask,
484  [System::Runtime::InteropServices::Out] double% lat2,
485  [System::Runtime::InteropServices::Out] double% lon2,
486  [System::Runtime::InteropServices::Out] double% azi2,
487  [System::Runtime::InteropServices::Out] double% s12,
488  [System::Runtime::InteropServices::Out] double% m12,
489  [System::Runtime::InteropServices::Out] double% M12,
490  [System::Runtime::InteropServices::Out] double% M21,
491  [System::Runtime::InteropServices::Out] double% S12);
492 
493  ///@}
494 
495  /** \name Inspector functions
496  **********************************************************************/
497  ///@{
498 
499  /**
500  * @return \e lat1 the latitude of point 1 (degrees).
501  **********************************************************************/
502  property double Latitude { double get(); }
503 
504  /**
505  * @return \e lon1 the longitude of point 1 (degrees).
506  **********************************************************************/
507  property double Longitude { double get(); }
508 
509  /**
510  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
511  **********************************************************************/
512  property double Azimuth { double get(); }
513 
514  /**
515  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
516  * the equator in a northward direction.
517  **********************************************************************/
518  property double EquatorialAzimuth { double get(); }
519 
520  /**
521  * @return \e a1 the arc length (degrees) between the northward equatorial
522  * crossing and point 1.
523  **********************************************************************/
524  property double EquatorialArc { double get(); }
525 
526  /**
527  * @return \e a the equatorial radius of the ellipsoid (meters). This is
528  * the value inherited from the Geodesic object used in the constructor.
529  **********************************************************************/
530  property double MajorRadius { double get(); }
531 
532  /**
533  * @return \e f the flattening of the ellipsoid. This is the value
534  * inherited from the Geodesic object used in the constructor.
535  **********************************************************************/
536  property double Flattening { double get(); }
537 
538  /**
539  * @return \e caps the computational capabilities that this object was
540  * constructed with. LATITUDE and AZIMUTH are always included.
541  **********************************************************************/
543 
544  /**
545  * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
546  * @return true if the GeodesicLine object has all these capabilities.
547  **********************************************************************/
548  bool Capabilities(GeodesicLine::mask testcaps);
549  ///@}
550  };
551 } // namespace NETGeographicLib
Header for NETGeographicLib::NETGeographicLib objects.
NETGeographicLib::Mask Capabilities()
.NET wrapper for GeographicLib::GeodesicLine.
Definition: GeodesicLine.h:71
double Position(double s12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)
.NET wrapper for GeographicLib::Geodesic.
Definition: Geodesic.h:170
GeodesicLine(Geodesic^ g, double lat1, double lon1, double azi1, NETGeographicLib::Mask caps)
double GenPosition(bool arcmode, double s12_a12, GeodesicLine::mask outmask, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% s12, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)
void ArcPosition(double a12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% s12, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)