/* -*-c++-*- */ /* osgEarth - Geospatial SDK for OpenSceneGraph * Copyright 2020 Pelican Mapping * http://osgearth.org * * osgEarth is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see */ #ifndef OSGEARTH_LOCAL_TANGENT_PLANE_H #define OSGEARTH_LOCAL_TANGENT_PLANE_H 1 #include #include #include namespace osgEarth { /** * Local Tangent Plane SRS. * Please call SpatialReference::createLTP() to construct one of these. */ class TangentPlaneSpatialReference : public SpatialReference { public: //! New LTP SRS //! @param key Key of underlying geographic SRS //! @param originLLA lat/long/alt origin of reference point TangentPlaneSpatialReference( const Key& key, const osg::Vec3d& originLLA); public: // SpatialReference bool isGeographic() const override { return false; } bool isProjected() const override { return true; } bool isLTP() const override { return true; } // This SRS uses a WGS84 lat/long SRS under the hood for reprojection. // So we need the pre/post transforms to move from LTP to LLA and back. const SpatialReference* preTransform(std::vector& points) const override; const SpatialReference* postTransform(std::vector& points) const override; protected: // SpatialReference bool _isEquivalentTo( const SpatialReference* srs, bool considerVDatum =true ) const override; virtual ~TangentPlaneSpatialReference() { } private: osg::Vec3d _originLLA; osg::Matrixd _local2world, _world2local; }; } #endif // OSGEARTH_LOCAL_TANGENT_PLANE_H