]> git.mxchange.org Git - simgear.git/blob - simgear/route/waypoint.hxx
f1ec78224ae2ff5667dcf55a553890ce50e5168e
[simgear.git] / simgear / route / waypoint.hxx
1 // waypoint.hxx -- Class to hold data and return info relating to a waypoint
2 //
3 // Written by Curtis Olson, started September 2000.
4 //
5 // Copyright (C) 2000  Curtis L. Olson  - curt@hfrl.umn.edu
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23
24 #ifndef _WAYPOINT_HXX
25 #define _WAYPOINT_HXX
26
27
28 #ifndef __cplusplus                                                          
29 # error This library requires C++
30 #endif                                   
31
32
33 #ifdef HAVE_CONFIG_H
34 #  include <config.h>
35 #endif
36
37 #include <simgear/compiler.h>
38
39 #include STL_STRING
40
41 SG_USING_STD(string);
42
43
44 class SGWayPoint {
45
46 public:
47
48     enum modetype { 
49         WGS84 = 0,
50         SPHERICAL = 1,
51         CARTESIAN = 2
52     };
53
54 private:
55
56     modetype mode;
57
58     double target_lon;
59     double target_lat;
60     double target_alt;
61     double distance;
62
63     string id;
64
65 public:
66
67     SGWayPoint();
68     SGWayPoint( const double lon, const double lat, const double alt,
69                 const modetype m = WGS84, const string s = "" );
70     ~SGWayPoint();
71
72     // Calculate course and distances.  For WGS84 and SPHERICAL
73     // coordinates lat, lon, and course are in degrees, alt and
74     // distance are in meters.  For CARTESIAN coordinates x = lon, y =
75     // lat.  Course is in degrees and distance is in what ever units x
76     // and y are in.
77     void CourseAndDistance( const double cur_lon, const double cur_lat,
78                             const double cur_alt,
79                             double *course, double *distance ) const;
80
81     // Calculate course and distances between two waypoints
82     void CourseAndDistance( const SGWayPoint &wp,
83                             double *course, double *distance ) const;
84
85     inline modetype get_mode() const { return mode; }
86     inline double get_target_lon() const { return target_lon; }
87     inline double get_target_lat() const { return target_lat; }
88     inline double get_target_alt() const { return target_alt; }
89     inline double get_distance() const { return distance; }
90     inline string get_id() const { return id; }
91
92     inline void set_distance( double d ) { distance = d; }
93 };
94
95
96 #endif // _WAYPOINT_HXX