14#ifndef OSG_COORDINATESYSTEMNODE
15#define OSG_COORDINATESYSTEMNODE 1
54 double& X,
double& Y,
double& Z)
const;
57 double& latitude,
double& longitude,
double& height)
const;
113 void setFormat(
const std::string& format) { _format = format; }
116 const std::string&
getFormat()
const {
return _format; }
156 double& X,
double& Y,
double& Z)
const
159 double sin_latitude = sin(latitude);
160 double cos_latitude = cos(latitude);
162 X = (N+height)*cos_latitude*cos(longitude);
163 Y = (N+height)*cos_latitude*sin(longitude);
169 double& latitude,
double& longitude,
double& height)
const
173 longitude = atan2(Y,X);
204 double p = sqrt(X*X + Y*Y);
209 double sin_theta = sin(theta);
210 double cos_theta = cos(theta);
212 latitude = atan( (Z + eDashSquared*
_radiusPolar*sin_theta*sin_theta*sin_theta) /
215 double sin_latitude = sin(latitude);
218 height = p/cos(latitude) - N;
232 double latitude, longitude, height;
242 osg::Vec3d up ( cos(longitude)*cos(latitude), sin(longitude)*cos(latitude), sin(latitude));
245 osg::Vec3d east (-sin(longitude), cos(longitude), 0);
251 localToWorld(0,0) = east[0];
252 localToWorld(0,1) = east[1];
253 localToWorld(0,2) = east[2];
255 localToWorld(1,0) = north[0];
256 localToWorld(1,1) = north[1];
257 localToWorld(1,2) = north[2];
259 localToWorld(2,0) = up[0];
260 localToWorld(2,1) = up[1];
261 localToWorld(2,2) = up[2];
273 return osg::Vec3d( cos(longitude) * cos(latitude),
274 sin(longitude) * cos(latitude),
Definition CoordinateSystemNode:96
EllipsoidModel * getEllipsoidModel()
Definition CoordinateSystemNode:129
void setEllipsoidModel(EllipsoidModel *ellipsode)
Definition CoordinateSystemNode:126
const std::string & getFormat() const
Definition CoordinateSystemNode:116
CoordinateFrame computeLocalCoordinateFrame(const Vec3d &position) const
void setFormat(const std::string &format)
Definition CoordinateSystemNode:113
const std::string & getCoordinateSystem() const
Definition CoordinateSystemNode:122
osg::Vec3d computeLocalUpVector(const Vec3d &position) const
META_Node(osg, CoordinateSystemNode)
void setCoordinateSystem(const std::string &cs)
Definition CoordinateSystemNode:119
CoordinateSystemNode(const CoordinateSystemNode &, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
CoordinateSystemNode(const std::string &format, const std::string &cs)
void set(const CoordinateSystemNode &csn)
std::string _format
Definition CoordinateSystemNode:144
ref_ptr< EllipsoidModel > _ellipsoidModel
Definition CoordinateSystemNode:146
const EllipsoidModel * getEllipsoidModel() const
Definition CoordinateSystemNode:132
std::string _cs
Definition CoordinateSystemNode:145
virtual ~CoordinateSystemNode()
Definition CoordinateSystemNode:142
@ SHALLOW_COPY
Definition CopyOp:47
Definition CoordinateSystemNode:31
EllipsoidModel(double radiusEquator=WGS_84_RADIUS_EQUATOR, double radiusPolar=WGS_84_RADIUS_POLAR)
Definition CoordinateSystemNode:35
friend bool operator==(const EllipsoidModel &e1, const EllipsoidModel &e2)
Definition CoordinateSystemNode:73
double _radiusPolar
Definition CoordinateSystemNode:85
void convertLatLongHeightToXYZ(double latitude, double longitude, double height, double &X, double &Y, double &Z) const
Definition CoordinateSystemNode:155
void computeCoefficients()
Definition CoordinateSystemNode:78
double _radiusEquator
Definition CoordinateSystemNode:84
void setRadiusPolar(double radius)
Definition CoordinateSystemNode:50
void computeCoordinateFrame(double latitude, double longitude, osg::Matrixd &localToWorld) const
Definition CoordinateSystemNode:239
osg::Vec3d computeLocalUpVector(double X, double Y, double Z) const
Definition CoordinateSystemNode:264
void computeLocalToWorldTransformFromXYZ(double X, double Y, double Z, osg::Matrixd &localToWorld) const
Definition CoordinateSystemNode:230
META_Object(osg, EllipsoidModel)
EllipsoidModel(const EllipsoidModel &et, const CopyOp ©op=CopyOp::SHALLOW_COPY)
Definition CoordinateSystemNode:40
double _eccentricitySquared
Definition CoordinateSystemNode:86
double getRadiusPolar() const
Definition CoordinateSystemNode:51
double getRadiusEquator() const
Definition CoordinateSystemNode:48
void setRadiusEquator(double radius)
Definition CoordinateSystemNode:47
bool isWGS84() const
Definition CoordinateSystemNode:68
void computeLocalToWorldTransformFromLatLongHeight(double latitude, double longitude, double height, osg::Matrixd &localToWorld) const
Definition CoordinateSystemNode:221
void convertXYZToLatLongHeight(double X, double Y, double Z, double &latitude, double &longitude, double &height) const
Definition CoordinateSystemNode:168
void makeTranslate(const Vec3f &)
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
const double PI_2
Definition Math:31
const double WGS_84_RADIUS_POLAR
Definition CoordinateSystemNode:24
Matrixd CoordinateFrame
Definition CoordinateSystemNode:91
const double WGS_84_RADIUS_EQUATOR
Definition CoordinateSystemNode:23
#define OSG_EXPORT
Definition osg/Export:39