1 #ifndef COORDINATES_H
2 #define COORDINATES_H
3 
4 #include <cmath>
5 #include <QDebug>
6 
7 #define deg2rad(d) (((d)*M_PI)/180.0)
8 #define rad2deg(d) (((d)*180.0)/M_PI)
9 
10 class Coordinates
11 {
12 public:
Coordinates()13 	Coordinates() {_lon = NAN; _lat = NAN;}
Coordinates(double lon,double lat)14 	Coordinates(double lon, double lat) {_lon = lon; _lat = lat;}
15 
rlon()16 	double &rlon() {return _lon;}
rlat()17 	double &rlat() {return _lat;}
setLon(double lon)18 	void setLon(double lon) {_lon = lon;}
setLat(double lat)19 	void setLat(double lat) {_lat = lat;}
lon()20 	double lon() const {return _lon;}
lat()21 	double lat() const {return _lat;}
22 
isNull()23 	bool isNull() const
24 	  {return std::isnan(_lon) && std::isnan(_lat);}
isValid()25 	bool isValid() const
26 	  {return (_lon >= -180.0 && _lon <= 180.0
27 	    && _lat >= -90.0 && _lat <= 90.0);}
28 
29 	double distanceTo(const Coordinates &c) const;
30 
31 private:
32 	double _lat, _lon;
33 };
34 
35 Q_DECLARE_TYPEINFO(Coordinates, Q_PRIMITIVE_TYPE);
36 
37 inline bool operator==(const Coordinates &c1, const Coordinates &c2)
38   {return (c1.lat() == c2.lat() && c1.lon() == c2.lon());}
39 inline bool operator!=(const Coordinates &c1, const Coordinates &c2)
40   {return !(c1 == c2);}
41 
42 #ifndef QT_NO_DEBUG
43 QDebug operator<<(QDebug dbg, const Coordinates &c);
44 #endif // QT_NO_DEBUG
45 
46 #endif // COORDINATES_H
47