NETGeographicLib  1.40
 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  * Do not wrap the \e lon2 in the direct calculation.
139  * @hideinitializer
140  **********************************************************************/
141  LONG_NOWRAP = 1U<<15,
142  /**
143  * All capabilities, calculate everything. (LONG_NOWRAP is not
144  * included in this mask.)
145  * @hideinitializer
146  **********************************************************************/
147  ALL = unsigned(captype::OUT_ALL)| unsigned(captype::CAP_ALL),
148  };
149  /** \name Constructors
150  **********************************************************************/
151  ///@{
152 
153  /**
154  * Constructor for a geodesic line staring at latitude \e lat1, longitude
155  * \e lon1, and azimuth \e azi1 (all in degrees).
156  *
157  * @param[in] g A Geodesic object used to compute the necessary information
158  * about the GeodesicLine.
159  * @param[in] lat1 latitude of point 1 (degrees).
160  * @param[in] lon1 longitude of point 1 (degrees).
161  * @param[in] azi1 azimuth at point 1 (degrees).
162  * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
163  * specifying the capabilities the GeodesicLine object should possess,
164  * i.e., which quantities can be returned in calls to
165  * GeodesicLine::Position.
166  *
167  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
168  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
169  *
170  * The NETGeographicLib::Mask values are
171  * - \e caps |= GeodesicLine::LATITUDE for the latitude \e lat2; this is
172  * added automatically;
173  * - \e caps |= GeodesicLine::LONGITUDE for the latitude \e lon2;
174  * - \e caps |= GeodesicLine::AZIMUTH for the latitude \e azi2; this is
175  * added automatically;
176  * - \e caps |= GeodesicLine::DISTANCE for the distance \e s12;
177  * - \e caps |= GeodesicLine::REDUCEDLENGTH for the reduced length \e m12;
178  * - \e caps |= GeodesicLine::GEODESICSCALE for the geodesic scales \e M12
179  * and \e M21;
180  * - \e caps |= GeodesicLine::AREA for the area \e S12;
181  * - \e caps |= GeodesicLine::DISTANCE_IN permits the length of the
182  * geodesic to be given in terms of \e s12; without this capability the
183  * length can only be specified in terms of arc length;
184  * - \e caps |= GeodesicLine::ALL for all of the above.
185  * .
186  * The default value of \e caps is GeodesicLine::ALL.
187  *
188  * If the point is at a pole, the azimuth is defined by keeping \e lon1
189  * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
190  * the limit &epsilon; &rarr; 0+.
191  **********************************************************************/
192  GeodesicLine( Geodesic^ g, double lat1, double lon1, double azi1,
193  NETGeographicLib::Mask caps );
194 
195  /**
196  * A constructor which assumes the WGS84 ellipsoid.
197  **********************************************************************/
198  GeodesicLine(double lat1, double lon1, double azi1,
200  ///@}
201 
202  /**
203  * The destructor calls the finalizer.
204  **********************************************************************/
206  { this->!GeodesicLine(); }
207 
208  /** \name Position in terms of distance
209  **********************************************************************/
210  ///@{
211 
212  /**
213  * Compute the position of point 2 which is a distance \e s12 (meters) from
214  * point 1.
215  *
216  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
217  * negative.
218  * @param[out] lat2 latitude of point 2 (degrees).
219  * @param[out] lon2 longitude of point 2 (degrees); requires that the
220  * GeodesicLine object was constructed with \e caps |=
221  * GeodesicLine::LONGITUDE.
222  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
223  * @param[out] m12 reduced length of geodesic (meters); requires that the
224  * GeodesicLine object was constructed with \e caps |=
225  * GeodesicLine::REDUCEDLENGTH.
226  * @param[out] M12 geodesic scale of point 2 relative to point 1
227  * (dimensionless); requires that the GeodesicLine object was constructed
228  * with \e caps |= GeodesicLine::GEODESICSCALE.
229  * @param[out] M21 geodesic scale of point 1 relative to point 2
230  * (dimensionless); requires that the GeodesicLine object was constructed
231  * with \e caps |= GeodesicLine::GEODESICSCALE.
232  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
233  * that the GeodesicLine object was constructed with \e caps |=
234  * GeodesicLine::AREA.
235  * @return \e a12 arc length of between point 1 and point 2 (degrees).
236  *
237  * The values of \e lon2 and \e azi2 returned are in the range
238  * [&minus;180&deg;, 180&deg;).
239  *
240  * The GeodesicLine object \e must have been constructed with \e caps |=
241  * GeodesicLine::DISTANCE_IN; otherwise Math::NaN() is returned and no
242  * parameters are set. Requesting a value which the GeodesicLine object is
243  * not capable of computing is not an error; the corresponding argument
244  * will not be altered.
245  *
246  * The following functions are overloaded versions of
247  * GeodesicLine::Position which omit some of the output parameters. Note,
248  * however, that the arc length is always computed and returned as the
249  * function value.
250  **********************************************************************/
251  double Position(double s12,
252  [System::Runtime::InteropServices::Out] double% lat2,
253  [System::Runtime::InteropServices::Out] double% lon2,
254  [System::Runtime::InteropServices::Out] double% azi2,
255  [System::Runtime::InteropServices::Out] double% m12,
256  [System::Runtime::InteropServices::Out] double% M12,
257  [System::Runtime::InteropServices::Out] double% M21,
258  [System::Runtime::InteropServices::Out] double% S12);
259 
260  /**
261  * See the documentation for GeodesicLine::Position.
262  **********************************************************************/
263  double Position(double s12,
264  [System::Runtime::InteropServices::Out] double% lat2,
265  [System::Runtime::InteropServices::Out] double% lon2);
266 
267  /**
268  * See the documentation for GeodesicLine::Position.
269  **********************************************************************/
270  double Position(double s12,
271  [System::Runtime::InteropServices::Out] double% lat2,
272  [System::Runtime::InteropServices::Out] double% lon2,
273  [System::Runtime::InteropServices::Out] double% azi2);
274 
275  /**
276  * See the documentation for GeodesicLine::Position.
277  **********************************************************************/
278  double Position(double s12,
279  [System::Runtime::InteropServices::Out] double% lat2,
280  [System::Runtime::InteropServices::Out] double% lon2,
281  [System::Runtime::InteropServices::Out] double% azi2,
282  [System::Runtime::InteropServices::Out] double% m12);
283 
284  /**
285  * See the documentation for GeodesicLine::Position.
286  **********************************************************************/
287  double Position(double s12,
288  [System::Runtime::InteropServices::Out] double% lat2,
289  [System::Runtime::InteropServices::Out] double% lon2,
290  [System::Runtime::InteropServices::Out] double% azi2,
291  [System::Runtime::InteropServices::Out] double% M12,
292  [System::Runtime::InteropServices::Out] double% M21);
293 
294  /**
295  * See the documentation for GeodesicLine::Position.
296  **********************************************************************/
297  double Position(double s12,
298  [System::Runtime::InteropServices::Out] double% lat2,
299  [System::Runtime::InteropServices::Out] double% lon2,
300  [System::Runtime::InteropServices::Out] double% azi2,
301  [System::Runtime::InteropServices::Out] double% m12,
302  [System::Runtime::InteropServices::Out] double% M12,
303  [System::Runtime::InteropServices::Out] double% M21);
304 
305  ///@}
306 
307  /** \name Position in terms of arc length
308  **********************************************************************/
309  ///@{
310 
311  /**
312  * Compute the position of point 2 which is an arc length \e a12 (degrees)
313  * from point 1.
314  *
315  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
316  * be negative.
317  * @param[out] lat2 latitude of point 2 (degrees).
318  * @param[out] lon2 longitude of point 2 (degrees); requires that the
319  * GeodesicLine object was constructed with \e caps |=
320  * NETGeographicLib::Mask::LONGITUDE.
321  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
322  * @param[out] s12 distance between point 1 and point 2 (meters); requires
323  * that the GeodesicLine object was constructed with \e caps |=
324  * NETGeographicLib::Mask::DISTANCE.
325  * @param[out] m12 reduced length of geodesic (meters); requires that the
326  * GeodesicLine object was constructed with \e caps |=
327  * NETGeographicLib::Mask::REDUCEDLENGTH.
328  * @param[out] M12 geodesic scale of point 2 relative to point 1
329  * (dimensionless); requires that the GeodesicLine object was constructed
330  * with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
331  * @param[out] M21 geodesic scale of point 1 relative to point 2
332  * (dimensionless); requires that the GeodesicLine object was constructed
333  * with \e caps |= NETGeographicLib::Mask::GEODESICSCALE.
334  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
335  * that the GeodesicLine object was constructed with \e caps |=
336  * NETGeographicLib::Mask::AREA.
337  *
338  * The values of \e lon2 and \e azi2 returned are in the range
339  * [&minus;180&deg;, 180&deg;).
340  *
341  * Requesting a value which the GeodesicLine object is not capable of
342  * computing is not an error; the corresponding argument will not be
343  * altered.
344  *
345  * The following functions are overloaded versions of
346  * GeodesicLine::ArcPosition which omit some of the output parameters.
347  **********************************************************************/
348  void ArcPosition(double a12,
349  [System::Runtime::InteropServices::Out] double% lat2,
350  [System::Runtime::InteropServices::Out] double% lon2,
351  [System::Runtime::InteropServices::Out] double% azi2,
352  [System::Runtime::InteropServices::Out] double% s12,
353  [System::Runtime::InteropServices::Out] double% m12,
354  [System::Runtime::InteropServices::Out] double% M12,
355  [System::Runtime::InteropServices::Out] double% M21,
356  [System::Runtime::InteropServices::Out] double% S12);
357 
358  /**
359  * See the documentation for GeodesicLine::ArcPosition.
360  **********************************************************************/
361  void ArcPosition(double a12,
362  [System::Runtime::InteropServices::Out] double% lat2,
363  [System::Runtime::InteropServices::Out] double% lon2);
364 
365  /**
366  * See the documentation for GeodesicLine::ArcPosition.
367  **********************************************************************/
368  void ArcPosition(double a12,
369  [System::Runtime::InteropServices::Out] double% lat2,
370  [System::Runtime::InteropServices::Out] double% lon2,
371  [System::Runtime::InteropServices::Out] double% azi2);
372 
373  /**
374  * See the documentation for GeodesicLine::ArcPosition.
375  **********************************************************************/
376  void ArcPosition(double a12,
377  [System::Runtime::InteropServices::Out] double% lat2,
378  [System::Runtime::InteropServices::Out] double% lon2,
379  [System::Runtime::InteropServices::Out] double% azi2,
380  [System::Runtime::InteropServices::Out] double% s12);
381 
382  /**
383  * See the documentation for GeodesicLine::ArcPosition.
384  **********************************************************************/
385  void ArcPosition(double a12,
386  [System::Runtime::InteropServices::Out] double% lat2,
387  [System::Runtime::InteropServices::Out] double% lon2,
388  [System::Runtime::InteropServices::Out] double% azi2,
389  [System::Runtime::InteropServices::Out] double% s12,
390  [System::Runtime::InteropServices::Out] double% m12);
391 
392  /**
393  * See the documentation for GeodesicLine::ArcPosition.
394  **********************************************************************/
395  void ArcPosition(double a12,
396  [System::Runtime::InteropServices::Out] double% lat2,
397  [System::Runtime::InteropServices::Out] double% lon2,
398  [System::Runtime::InteropServices::Out] double% azi2,
399  [System::Runtime::InteropServices::Out] double% s12,
400  [System::Runtime::InteropServices::Out] double% M12,
401  [System::Runtime::InteropServices::Out] double% M21);
402 
403  /**
404  * See the documentation for GeodesicLine::ArcPosition.
405  **********************************************************************/
406  void ArcPosition(double a12,
407  [System::Runtime::InteropServices::Out] double% lat2,
408  [System::Runtime::InteropServices::Out] double% lon2,
409  [System::Runtime::InteropServices::Out] double% azi2,
410  [System::Runtime::InteropServices::Out] double% s12,
411  [System::Runtime::InteropServices::Out] double% m12,
412  [System::Runtime::InteropServices::Out] double% M12,
413  [System::Runtime::InteropServices::Out] double% M21);
414  ///@}
415 
416  /** \name The general position function.
417  **********************************************************************/
418  ///@{
419 
420  /**
421  * The general position function. GeodesicLine::Position and
422  * GeodesicLine::ArcPosition are defined in terms of this function.
423  *
424  * @param[in] arcmode boolean flag determining the meaning of the second
425  * parameter; if arcmode is false, then the GeodesicLine object must have
426  * been constructed with \e caps |= GeodesicLine::DISTANCE_IN.
427  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
428  * point 1 and point 2 (meters); otherwise it is the arc length between
429  * point 1 and point 2 (degrees); it can be negative.
430  * @param[in] outmask a bitor'ed combination of GeodesicLine::mask values
431  * specifying which of the following parameters should be set.
432  * @param[out] lat2 latitude of point 2 (degrees).
433  * @param[out] lon2 longitude of point 2 (degrees); requires that the
434  * GeodesicLine object was constructed with \e caps |=
435  * GeodesicLine::LONGITUDE.
436  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
437  * @param[out] s12 distance between point 1 and point 2 (meters); requires
438  * that the GeodesicLine object was constructed with \e caps |=
439  * GeodesicLine::DISTANCE.
440  * @param[out] m12 reduced length of geodesic (meters); requires that the
441  * GeodesicLine object was constructed with \e caps |=
442  * GeodesicLine::REDUCEDLENGTH.
443  * @param[out] M12 geodesic scale of point 2 relative to point 1
444  * (dimensionless); requires that the GeodesicLine object was constructed
445  * with \e caps |= GeodesicLine::GEODESICSCALE.
446  * @param[out] M21 geodesic scale of point 1 relative to point 2
447  * (dimensionless); requires that the GeodesicLine object was constructed
448  * with \e caps |= GeodesicLine::GEODESICSCALE.
449  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
450  * that the GeodesicLine object was constructed with \e caps |=
451  * GeodesicLine::AREA.
452  * @return \e a12 arc length of between point 1 and point 2 (degrees).
453  *
454  * The GeodesicLine::mask values possible for \e outmask are
455  * - \e outmask |= GeodesicLine::LATITUDE for the latitude \e lat2;
456  * - \e outmask |= GeodesicLine::LONGITUDE for the latitude \e lon2;
457  * - \e outmask |= GeodesicLine::AZIMUTH for the latitude \e azi2;
458  * - \e outmask |= GeodesicLine::DISTANCE for the distance \e s12;
459  * - \e outmask |= GeodesicLine::REDUCEDLENGTH for the reduced length \e
460  * m12;
461  * - \e outmask |= GeodesicLine::GEODESICSCALE for the geodesic scales \e
462  * M12 and \e M21;
463  * - \e outmask |= GeodesicLine::AREA for the area \e S12;
464  * - \e outmask |= GeodesicLine::ALL for all of the above;
465  * - \e outmask |= GeodesicLine::LONG_NOWRAP stops the returned value of \e
466  * lon2 being wrapped into the range [&minus;180&deg;, 180&deg;).
467  * .
468  * Requesting a value which the GeodesicLine object is not capable of
469  * computing is not an error; the corresponding argument will not be
470  * altered. Note, however, that the arc length is always computed and
471  * returned as the function value.
472  *
473  * With the LONG_NOWRAP bit set, the quantity \e lon2 &minus; \e lon1
474  * indicates how many times the geodesic wrapped around the ellipsoid.
475  * Because \e lon2 might be outside the normal allowed range for
476  * longitudes, [&minus;540&deg;, 540&deg;), be sure to normalize it with
477  * Math::AngNormalize2 before using it in other GeographicLib calls.
478  **********************************************************************/
479  double GenPosition(bool arcmode, double s12_a12,
480  GeodesicLine::mask outmask,
481  [System::Runtime::InteropServices::Out] double% lat2,
482  [System::Runtime::InteropServices::Out] double% lon2,
483  [System::Runtime::InteropServices::Out] double% azi2,
484  [System::Runtime::InteropServices::Out] double% s12,
485  [System::Runtime::InteropServices::Out] double% m12,
486  [System::Runtime::InteropServices::Out] double% M12,
487  [System::Runtime::InteropServices::Out] double% M21,
488  [System::Runtime::InteropServices::Out] double% S12);
489 
490  ///@}
491 
492  /** \name Inspector functions
493  **********************************************************************/
494  ///@{
495 
496  /**
497  * @return \e lat1 the latitude of point 1 (degrees).
498  **********************************************************************/
499  property double Latitude { double get(); }
500 
501  /**
502  * @return \e lon1 the longitude of point 1 (degrees).
503  **********************************************************************/
504  property double Longitude { double get(); }
505 
506  /**
507  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
508  **********************************************************************/
509  property double Azimuth { double get(); }
510 
511  /**
512  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
513  * the equator in a northward direction.
514  **********************************************************************/
515  property double EquatorialAzimuth { double get(); }
516 
517  /**
518  * @return \e a1 the arc length (degrees) between the northward equatorial
519  * crossing and point 1.
520  **********************************************************************/
521  property double EquatorialArc { double get(); }
522 
523  /**
524  * @return \e a the equatorial radius of the ellipsoid (meters). This is
525  * the value inherited from the Geodesic object used in the constructor.
526  **********************************************************************/
527  property double MajorRadius { double get(); }
528 
529  /**
530  * @return \e f the flattening of the ellipsoid. This is the value
531  * inherited from the Geodesic object used in the constructor.
532  **********************************************************************/
533  property double Flattening { double get(); }
534 
535  /**
536  * @return \e caps the computational capabilities that this object was
537  * constructed with. LATITUDE and AZIMUTH are always included.
538  **********************************************************************/
540 
541  /**
542  * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
543  * @return true if the GeodesicLine object has all these capabilities.
544  **********************************************************************/
545  bool Capabilities(GeodesicLine::mask testcaps);
546  ///@}
547  };
548 } // 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)