00001
00005 #pragma once
00006
00007 #include <usml/ublas/ublas.h>
00008 #include <usml/types/wvector1.h>
00009 #include <usml/types/wposition.h>
00010
00011 namespace usml {
00012 namespace types {
00015
00022 class USML_DECLSPEC wposition1: public wvector1
00023 {
00024
00025 public:
00026
00027
00028
00029
00037 wposition1(double lat = 0.0, double lng = 0.0, double alt = 0.0);
00038
00050 wposition1( const wposition1& location, double range, double bearing);
00051
00058 wposition1(const wvector1& other);
00059
00063 wposition1(const wvector& other, size_t row, size_t col);
00064
00065 public:
00066
00067
00068
00069
00076 inline double altitude() const {
00077 return rho() - wposition::earth_radius;
00078 }
00079
00086 inline void altitude(double altitude) {
00087 rho(altitude + wposition::earth_radius);
00088 }
00089
00090
00091
00092
00099 inline double latitude() const {
00100 return to_latitude(theta());
00101 }
00102
00109 inline void latitude(double latitude) {
00110 theta(to_colatitude(latitude));
00111 }
00112
00113
00114
00115
00122 inline double longitude() const {
00123 return to_degrees(phi());
00124 }
00125
00132 inline void longitude(double longitude) {
00133 phi(to_radians(longitude));
00134 }
00135
00136
00137
00138
00150 double gc_range( const wposition1& location, double* bearing=NULL) const ;
00151
00152 };
00153
00155 }
00156 }