aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/proj/coordinateoperation.hpp3
-rw-r--r--include/proj/crs.hpp2
-rw-r--r--include/proj/internal/coordinateoperation_constants.hpp37
-rw-r--r--include/proj/internal/coordinateoperation_internal.hpp2
-rw-r--r--include/proj/internal/internal.hpp2
-rw-r--r--include/proj/io.hpp23
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[] = {
&paramLatitudeNatOrigin, &paramLongitudeNatOrigin, &paramScaleFactor,
&paramFalseEasting, &paramFalseNorthing, nullptr};
+static const ParamMapping *const paramsNatOriginScaleK[] = {
+ &paramLatitudeNatOrigin, &paramLongitudeNatOrigin, &paramScaleFactorK,
+ &paramFalseEasting, &paramFalseNorthing, 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[] = {&paramLatNatLatCenter,
static const ParamMapping *const paramsLonNatOrigin[] = {
&paramLongitudeNatOrigin, &paramFalseEasting, &paramFalseNorthing, nullptr};
-static const ParamMapping *const paramsEqc[] = // same as paramsCEA
- {&paramLat1stParallelLatTs, &paramLongitudeNatOrigin, &paramFalseEasting,
- &paramFalseNorthing, nullptr};
+static const ParamMapping *const paramsEqc[] = {
+ &paramLat1stParallelLatTs,
+ &paramLatitudeNatOrigin, // extension of EPSG, but used by GDAL / PROJ
+ &paramLongitudeNatOrigin, &paramFalseEasting,
+ &paramFalseNorthing, 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[] = {
- &paramLatCentreLatOrigin,
+ &paramLatCentreLatCenter,
&paramLatPoint1,
&paramLonPoint1,
&paramLatPoint2,
@@ -342,9 +353,8 @@ static const ParamMapping *const paramsHomTwoPoint[] = {
nullptr};
static const ParamMapping *const paramsIMWP[] = {
- &paramLongitudeNatOrigin, &paramLatitude1stStdParallel,
- &paramLatitude2ndStdParallel, &paramFalseEasting,
- &paramFalseNorthing, nullptr};
+ &paramLongitudeNatOrigin, &paramLatFirstPoint, &paramLatSecondPoint,
+ &paramFalseEasting, &paramFalseNorthing, 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[] = {
&paramLatMerc1SP, &paramLongitudeNatOrigin, &paramScaleFactorK,
&paramFalseEasting, &paramFalseNorthing, 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> &params);