From f32255aa1139568df8cfb646ea62ca900939c105 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 2 Oct 2019 16:28:46 +0200 Subject: Add API and WKT mapping for 'nsper' to EPSG Vertical Persepective method Relates to https://github.com/OSGeo/gdal/issues/1856 --- include/proj/coordinateoperation.hpp | 9 ++++++ .../internal/coordinateoperation_constants.hpp | 33 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) (limited to 'include') diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index 2f6095f7..fb57238d 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -1310,6 +1310,15 @@ class PROJ_GCC_DLL Conversion : public SingleOperation { const common::Length &falseEasting, const common::Length &falseNorthing); + PROJ_DLL static ConversionNNPtr + createVerticalPerspective(const util::PropertyMap &properties, + const common::Angle &topoOriginLat, + const common::Angle &topoOriginLong, + const common::Length &topoOriginHeight, + const common::Length &viewPointHeight, + const common::Length &falseEasting, + const common::Length &falseNorthing); + PROJ_DLL static ConversionNNPtr createChangeVerticalUnit(const util::PropertyMap &properties, const common::Scale &factor); diff --git a/include/proj/internal/coordinateoperation_constants.hpp b/include/proj/internal/coordinateoperation_constants.hpp index 9d65dab8..f1925c9b 100644 --- a/include/proj/internal/coordinateoperation_constants.hpp +++ b/include/proj/internal/coordinateoperation_constants.hpp @@ -490,6 +490,35 @@ static const ParamMapping *const paramsLabordeObliqueMercator[] = { ¶mFalseNorthing, nullptr}; +static const ParamMapping paramLatTopoOrigin = { + EPSG_NAME_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, + EPSG_CODE_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, nullptr, + common::UnitOfMeasure::Type::ANGULAR, lat_0}; + +static const ParamMapping paramLonTopoOrigin = { + EPSG_NAME_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, + EPSG_CODE_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, nullptr, + common::UnitOfMeasure::Type::ANGULAR, lon_0}; + +static const ParamMapping paramHeightTopoOrigin = { + EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, + EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, nullptr, + common::UnitOfMeasure::Type::LINEAR, + nullptr}; // unsupported by PROJ right now + +static const ParamMapping paramViewpointHeight = { + EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT, EPSG_CODE_PARAMETER_VIEWPOINT_HEIGHT, + nullptr, common::UnitOfMeasure::Type::LINEAR, "h"}; + +static const ParamMapping *const paramsVerticalPerspective[] = { + ¶mLatTopoOrigin, + ¶mLonTopoOrigin, + ¶mHeightTopoOrigin, + ¶mViewpointHeight, + ¶mFalseEasting, // PROJ addition + ¶mFalseNorthing, // PROJ addition + nullptr}; + static const MethodMapping projectionMethodMappings[] = { {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, @@ -756,6 +785,9 @@ static const MethodMapping projectionMethodMappings[] = { EPSG_CODE_METHOD_LABORDE_OBLIQUE_MERCATOR, "Laborde_Oblique_Mercator", "labrd", nullptr, paramsLabordeObliqueMercator}, + {EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE, + EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE, nullptr, "nsper", nullptr, + paramsVerticalPerspective}, }; #define METHOD_NAME_CODE(method) \ @@ -791,6 +823,7 @@ static const struct MethodNameCode { METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_A), METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_B), METHOD_NAME_CODE(EQUAL_EARTH), METHOD_NAME_CODE(LABORDE_OBLIQUE_MERCATOR), + METHOD_NAME_CODE(VERTICAL_PERSPECTIVE), // Other conversions METHOD_NAME_CODE(CHANGE_VERTICAL_UNIT), METHOD_NAME_CODE(AXIS_ORDER_REVERSAL_2D), -- cgit v1.2.3