aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-10-02 16:28:46 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-10-02 20:34:08 +0200
commitf32255aa1139568df8cfb646ea62ca900939c105 (patch)
tree496cf41d98468db2a74673619c235b2f71830889 /include
parenta167035343b1ac1d2905f17957cc974bfbfc800e (diff)
downloadPROJ-f32255aa1139568df8cfb646ea62ca900939c105.tar.gz
PROJ-f32255aa1139568df8cfb646ea62ca900939c105.zip
Add API and WKT mapping for 'nsper' to EPSG Vertical Persepective method
Relates to https://github.com/OSGeo/gdal/issues/1856
Diffstat (limited to 'include')
-rw-r--r--include/proj/coordinateoperation.hpp9
-rw-r--r--include/proj/internal/coordinateoperation_constants.hpp33
2 files changed, 42 insertions, 0 deletions
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
@@ -1311,6 +1311,15 @@ class PROJ_GCC_DLL Conversion : public SingleOperation {
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[] = {
&paramFalseNorthing,
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[] = {
+ &paramLatTopoOrigin,
+ &paramLonTopoOrigin,
+ &paramHeightTopoOrigin,
+ &paramViewpointHeight,
+ &paramFalseEasting, // PROJ addition
+ &paramFalseNorthing, // 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),