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;
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),
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
const double PI_2
Definition Math:31
const double WGS_84_RADIUS_POLAR
Definition CoordinateSystemNode:24
Matrixd CoordinateFrame
CoordinateFrame encapsulates the orientation of east, north and up.
Definition CoordinateSystemNode:91
const double WGS_84_RADIUS_EQUATOR
Definition CoordinateSystemNode:23
EllipsoidModel encapsulates the ellipsoid used to model astronomical bodies, such as sun,...
Definition CoordinateSystemNode:31
EllipsoidModel(double radiusEquator=WGS_84_RADIUS_EQUATOR, double radiusPolar=WGS_84_RADIUS_POLAR)
WGS_84 is a common representation of the earth's spheroid.
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
EllipsoidModel * getEllipsoidModel()
Get the EllipsoidModel.
Definition CoordinateSystemNode:129
void setEllipsoidModel(EllipsoidModel *ellipsode)
Set EllipsoidModel to describe the model used to map lat, long and height into geocentric XYZ and bac...
Definition CoordinateSystemNode:126
const std::string & getFormat() const
Get the coordinate system format string.
Definition CoordinateSystemNode:116
CoordinateFrame computeLocalCoordinateFrame(const Vec3d &position) const
Compute the local coordinate frame for specified point.
void setFormat(const std::string &format)
Set the coordinate system format string.
Definition CoordinateSystemNode:113
const std::string & getCoordinateSystem() const
Get the CoordinateSystem reference string.
Definition CoordinateSystemNode:122
osg::Vec3d computeLocalUpVector(const Vec3d &position) const
Compute the local up-vector for specified point.
META_Node(osg, CoordinateSystemNode)
void setCoordinateSystem(const std::string &cs)
Set the CoordinateSystem reference string, should be stored in a form consistent with the Format.
Definition CoordinateSystemNode:119
CoordinateSystemNode(const CoordinateSystemNode &, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
Copy constructor using CopyOp to manage deep vs shallow copy.
CoordinateSystemNode(const std::string &format, const std::string &cs)
void set(const CoordinateSystemNode &csn)
Set the coordinate system node up by copying the format, coordinate system string,...
std::string _format
Definition CoordinateSystemNode:144
ref_ptr< EllipsoidModel > _ellipsoidModel
Definition CoordinateSystemNode:146
const EllipsoidModel * getEllipsoidModel() const
Get the const EllipsoidModel.
Definition CoordinateSystemNode:132
std::string _cs
Definition CoordinateSystemNode:145
virtual ~CoordinateSystemNode()
Definition CoordinateSystemNode:142
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
void makeTranslate(const Vec3f &)
Object()
Construct an object.
Definition Object:69
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
General purpose double triple for use as vertices, vectors and normals.
Definition Vec3d:30
#define OSG_EXPORT
Definition Export:39