Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
coordinate.h
1 #ifndef COORDINATE_H
2 #define COORDINATE_H
3 
4 #include "angle.h"
5 
6 namespace geos{
7  namespace geom{
8  class CoordinateSequence;
9  }
10 }
11 
12 namespace Ilwis {
13 class KERNELSHARED_EXPORT Coordinate : public geos::geom::Coordinate{
14 public:
15  Coordinate();
16  Coordinate(double px, double py, double pz=rUNDEF);
17  Coordinate(const geos::geom::Coordinate& crd);
18  Coordinate(const Ilwis::Coordinate& crd);
19  Coordinate(const std::vector<double> &v);
20  virtual ~Coordinate();
21 
22  double undefined() const { return rUNDEF; }
23  quint64 valuetype() const { return itDOUBLE;}
24  Coordinate& operator=(const geos::geom::Coordinate&);
25  bool isValid() const;
26  bool is0() const;
27  bool is3D() const;
28  operator std::vector<double>();
29  Ilwis::Coordinate &operator =(const Ilwis::Coordinate &p2);
30  Ilwis::Coordinate &operator =(const Ilwis::Coordinate&& p2);
31  Coordinate &operator +=(const std::vector<double> &vec);
32  Coordinate &operator -=(const std::vector<double> &vec);
33  double distance(const Coordinate &crd);
34  Ilwis::Coordinate &operator *=(const std::vector<double> &vec);
35  Ilwis::Coordinate &operator *=(double v);
36  Ilwis::Coordinate &operator /=(double v);
37  bool operator ==(const Ilwis::Coordinate &pnt) const;
38  bool operator ==(const geos::geom::Coordinate &pnt) const;
39  bool operator !=(const Ilwis::Coordinate &pnt);
40 };
41 
42 class KERNELSHARED_EXPORT LatLon : public Ilwis::Coordinate {
43 public:
44  LatLon();
45  LatLon(const Angle& latd, const Angle& lond, double h=0);
46  Angle lat() const;
47  Angle lon() const;
48 
49  void lat(const Angle& lat);
50  void lon(const Angle& lon);
51 };
52 
53 #define llUNDEF Ilwis::LatLon(rUNDEF, rUNDEF)
54 
55 KERNELSHARED_EXPORT std::vector<double> operator-(const Ilwis::Coordinate& p1, const Ilwis::Coordinate& p2);
56 KERNELSHARED_EXPORT Ilwis::Coordinate operator+(const Ilwis::Coordinate& p1, const std::vector<double>& vec);
57 KERNELSHARED_EXPORT Ilwis::Coordinate operator-(const Ilwis::Coordinate& p1, const std::vector<double>& vec);
58 KERNELSHARED_EXPORT Ilwis::Coordinate operator*(const Ilwis::Coordinate& p1, double v);
59 KERNELSHARED_EXPORT Ilwis::Coordinate operator/(const Ilwis::Coordinate& p1, double v);
60 }
61 
62 #define crdUNDEF Ilwis::Coordinate(rUNDEF, rUNDEF, rUNDEF)
63 typedef std::unique_ptr<geos::geom::CoordinateSequence *> UPCoordinates;
64 
65 
66 
67 Q_DECLARE_METATYPE(Ilwis::Coordinate)
68 
69 #endif // COORDINATE_H
70