diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/proj/coordinateoperation.hpp | 3 | ||||
| -rw-r--r-- | include/proj/crs.hpp | 2 | ||||
| -rw-r--r-- | include/proj/internal/coordinateoperation_constants.hpp | 37 | ||||
| -rw-r--r-- | include/proj/internal/coordinateoperation_internal.hpp | 2 | ||||
| -rw-r--r-- | include/proj/internal/internal.hpp | 2 | ||||
| -rw-r--r-- | include/proj/io.hpp | 23 |
6 files changed, 48 insertions, 21 deletions
diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index 5e3ecf0b..293ba480 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -497,6 +497,7 @@ class PROJ_GCC_DLL OperationMethod : public common::IdentifiedObject { PROJ_INTERNAL OperationMethod(); PROJ_INTERNAL OperationMethod(const OperationMethod &other); INLINED_MAKE_SHARED + friend class Conversion; private: PROJ_OPAQUE_PRIVATE_DATA @@ -1296,7 +1297,7 @@ class PROJ_GCC_DLL Conversion : public SingleOperation { INLINED_MAKE_SHARED PROJ_FRIEND(crs::ProjectedCRS); - PROJ_INTERNAL void addWKTExtensionNode(io::WKTFormatter *formatter) const; + PROJ_INTERNAL bool addWKTExtensionNode(io::WKTFormatter *formatter) const; private: PROJ_OPAQUE_PRIVATE_DATA diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp index 252c90e3..82b2bd49 100644 --- a/include/proj/crs.hpp +++ b/include/proj/crs.hpp @@ -472,7 +472,7 @@ class PROJ_GCC_DLL DerivedCRS : virtual public SingleCRS { PROJ_PRIVATE : //! @cond Doxygen_Suppress - const operation::ConversionNNPtr & + PROJ_INTERNAL const operation::ConversionNNPtr & derivingConversionRef() PROJ_CONST_DECL; //! @endcond diff --git a/include/proj/internal/coordinateoperation_constants.hpp b/include/proj/internal/coordinateoperation_constants.hpp index e999b3a6..d5495193 100644 --- a/include/proj/internal/coordinateoperation_constants.hpp +++ b/include/proj/internal/coordinateoperation_constants.hpp @@ -88,6 +88,11 @@ static const ParamMapping paramScaleFactor = { EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, common::UnitOfMeasure::Type::SCALE, k_0}; +static const ParamMapping paramScaleFactorK = { + EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, + common::UnitOfMeasure::Type::SCALE, k}; + static const ParamMapping paramFalseEasting = { EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, WKT1_FALSE_EASTING, common::UnitOfMeasure::Type::LINEAR, x_0}; @@ -130,6 +135,10 @@ static const ParamMapping *const paramsNatOriginScale[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mScaleFactor, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; +static const ParamMapping *const paramsNatOriginScaleK[] = { + ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mScaleFactorK, + ¶mFalseEasting, ¶mFalseNorthing, nullptr}; + static const ParamMapping paramLatFirstPoint = { "Latitude of 1st point", 0, "Latitude_Of_1st_Point", common::UnitOfMeasure::Type::ANGULAR, lat_1}; @@ -243,9 +252,11 @@ static const ParamMapping *const paramsEQDC[] = {¶mLatNatLatCenter, static const ParamMapping *const paramsLonNatOrigin[] = { ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; -static const ParamMapping *const paramsEqc[] = // same as paramsCEA - {¶mLat1stParallelLatTs, ¶mLongitudeNatOrigin, ¶mFalseEasting, - ¶mFalseNorthing, nullptr}; +static const ParamMapping *const paramsEqc[] = { + ¶mLat1stParallelLatTs, + ¶mLatitudeNatOrigin, // extension of EPSG, but used by GDAL / PROJ + ¶mLongitudeNatOrigin, ¶mFalseEasting, + ¶mFalseNorthing, nullptr}; static const ParamMapping paramSatelliteHeight = { "Satellite Height", 0, "satellite_height", @@ -331,7 +342,7 @@ static const ParamMapping paramLonPoint2 = { common::UnitOfMeasure::Type::ANGULAR, lon_2}; static const ParamMapping *const paramsHomTwoPoint[] = { - ¶mLatCentreLatOrigin, + ¶mLatCentreLatCenter, ¶mLatPoint1, ¶mLonPoint1, ¶mLatPoint2, @@ -342,9 +353,8 @@ static const ParamMapping *const paramsHomTwoPoint[] = { nullptr}; static const ParamMapping *const paramsIMWP[] = { - ¶mLongitudeNatOrigin, ¶mLatitude1stStdParallel, - ¶mLatitude2ndStdParallel, ¶mFalseEasting, - ¶mFalseNorthing, nullptr}; + ¶mLongitudeNatOrigin, ¶mLatFirstPoint, ¶mLatSecondPoint, + ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLonCentreLonCenter = { EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, @@ -355,7 +365,7 @@ static const ParamMapping paramColatitudeConeAxis = { EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS, EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS, WKT1_AZIMUTH, common::UnitOfMeasure::Type::ANGULAR, - nullptr}; /* ignored by PROJ currently */ + "alpha"}; /* ignored by PROJ currently */ static const ParamMapping paramLatitudePseudoStdParallel = { EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, @@ -393,11 +403,6 @@ static const ParamMapping paramLatMerc1SP = { common::UnitOfMeasure::Type::ANGULAR, nullptr}; // always set to zero, not to be exported in PROJ strings -static const ParamMapping paramScaleFactorK = { - EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, - EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, - common::UnitOfMeasure::Type::SCALE, k}; - static const ParamMapping *const paramsMerc1SP[] = { ¶mLatMerc1SP, ¶mLongitudeNatOrigin, ¶mScaleFactorK, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; @@ -492,12 +497,12 @@ static const ParamMapping *const paramsLabordeObliqueMercator[] = { static const MethodMapping methodMappings[] = { {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, - "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScale}, + "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED, "Transverse_Mercator_South_Orientated", "tmerc", "axis=wsu", - paramsNatOriginScale}, + paramsNatOriginScaleK}, {PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT, 0, "Two_Point_Equidistant", "tpeqd", nullptr, paramsTPEQD}, @@ -605,7 +610,7 @@ static const MethodMapping methodMappings[] = { {PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, 0, "Interrupted_Goode_Homolosine", "igh", nullptr, paramsLonNatOrigin}, - // No WKT1 representation fr sweep=x + // No proper WKT1 representation fr sweep=x {PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X, 0, nullptr, "geos", "sweep=x", paramsGeos}, diff --git a/include/proj/internal/coordinateoperation_internal.hpp b/include/proj/internal/coordinateoperation_internal.hpp index 83e1e987..bafc3a3b 100644 --- a/include/proj/internal/coordinateoperation_internal.hpp +++ b/include/proj/internal/coordinateoperation_internal.hpp @@ -70,6 +70,8 @@ const ParamMapping *getMapping(const MethodMapping *mapping, const OperationParameterValue *param); const ParamMapping *getMappingFromWKT1(const MethodMapping *mapping, const std::string &wkt1_name); +bool areEquivalentParameters(const std::string &a, const std::string &b); + // --------------------------------------------------------------------------- struct ESRIParamMapping { diff --git a/include/proj/internal/internal.hpp b/include/proj/internal/internal.hpp index cbf6e259..85dd5ac3 100644 --- a/include/proj/internal/internal.hpp +++ b/include/proj/internal/internal.hpp @@ -125,6 +125,8 @@ inline bool starts_with(const std::string &str, const char *prefix) noexcept { return std::memcmp(str.c_str(), prefix, prefixSize) == 0; } +bool ci_less(const std::string &a, const std::string &b) noexcept; + bool ci_starts_with(const char *str, const char *prefix) noexcept; bool ci_starts_with(const std::string &str, const std::string &prefix) noexcept; diff --git a/include/proj/io.hpp b/include/proj/io.hpp index 689fede1..c649fa9f 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -206,7 +206,19 @@ class PROJ_GCC_DLL WKTFormatter { PROJ_DLL WKTFormatter &setMultiLine(bool multiLine) noexcept; PROJ_DLL WKTFormatter &setIndentationWidth(int width) noexcept; - PROJ_DLL WKTFormatter &setOutputAxis(bool outputAxis) noexcept; + + /** Rule for output AXIS nodes */ + enum class OutputAxisRule { + /** Always include AXIS nodes */ + YES, + /** Never include AXIS nodes */ + NO, + /** Includes them only on PROJCS node if it uses Easting/Northing + *ordering. Typically used for WKT1_GDAL */ + WKT1_GDAL_EPSG_STYLE, + }; + + PROJ_DLL WKTFormatter &setOutputAxis(OutputAxisRule outputAxis) noexcept; PROJ_DLL WKTFormatter &setStrict(bool strict) noexcept; PROJ_DLL bool isStrict() const noexcept; @@ -273,7 +285,7 @@ class PROJ_GCC_DLL WKTFormatter { PROJ_INTERNAL bool isInverted() const; #endif - PROJ_INTERNAL bool outputAxis() const; + PROJ_INTERNAL OutputAxisRule outputAxis() const; PROJ_INTERNAL bool outputAxisOrder() const; PROJ_INTERNAL bool primeMeridianOmittedIfGreenwich() const; PROJ_INTERNAL bool ellipsoidUnitOmittedIfMetre() const; @@ -352,7 +364,7 @@ class PROJ_GCC_DLL PROJStringFormatter { startInversion(); PROJ_DLL void stopInversion(); PROJ_INTERNAL bool isInverted() const; - PROJ_INTERNAL bool getUseETMercForTMerc() const; + PROJ_INTERNAL bool getUseETMercForTMerc(bool &settingSetOut) const; PROJ_DLL void ingestPROJString(const std::string &str); // throw ParsingException @@ -373,6 +385,11 @@ class PROJ_GCC_DLL PROJStringFormatter { PROJ_DLL void addParam(const char *paramName, const std::vector<double> &vals); + PROJ_INTERNAL bool hasParam(const char *paramName) const; + + PROJ_INTERNAL void addNoDefs(bool b); + PROJ_INTERNAL bool getAddNoDefs() const; + PROJ_INTERNAL std::set<std::string> getUsedGridNames() const; PROJ_INTERNAL void setTOWGS84Parameters(const std::vector<double> ¶ms); |
