diff options
Diffstat (limited to 'src/iso19111')
| -rw-r--r-- | src/iso19111/c_api.cpp | 3 | ||||
| -rw-r--r-- | src/iso19111/crs.cpp | 1 | ||||
| -rw-r--r-- | src/iso19111/factory.cpp | 6 | ||||
| -rw-r--r-- | src/iso19111/io.cpp | 7 | ||||
| -rw-r--r-- | src/iso19111/operation/conversion.cpp | 24 | ||||
| -rw-r--r-- | src/iso19111/operation/esriparammappings.cpp | 31 | ||||
| -rw-r--r-- | src/iso19111/operation/parammappings.cpp | 10 | ||||
| -rw-r--r-- | src/iso19111/operation/singleoperation.cpp | 1 | ||||
| -rw-r--r-- | src/iso19111/operation/transformation.cpp | 1 | ||||
| -rw-r--r-- | src/iso19111/util.cpp | 2 |
10 files changed, 83 insertions, 3 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index e9d8edc2..527ccd4f 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -2828,6 +2828,9 @@ proj_get_crs_info_list_from_database(PJ_CONTEXT *ctx, const char *auth_name, AuthorityFactory::ObjectType::GEOCENTRIC_CRS) { type = PJ_TYPE_GEOCENTRIC_CRS; } else if (info.type == + AuthorityFactory::ObjectType::GEODETIC_CRS) { + type = PJ_TYPE_GEODETIC_CRS; + } else if (info.type == AuthorityFactory::ObjectType::PROJECTED_CRS) { type = PJ_TYPE_PROJECTED_CRS; } else if (info.type == diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp index 575f6e2b..2ea8393c 100644 --- a/src/iso19111/crs.cpp +++ b/src/iso19111/crs.cpp @@ -5879,6 +5879,7 @@ BoundCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { } return !resMatchOfTransfToWGS84.empty() ? resMatchOfTransfToWGS84 : res; } +//! @endcond // --------------------------------------------------------------------------- diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index f08e32b9..3088f468 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -381,7 +381,7 @@ SQLResultSet SQLiteHandle::run(sqlite3_stmt *stmt, const std::string &sql, bool useMaxFloatPrecision) { int nBindField = 1; for (const auto ¶m : parameters) { - const auto paramType = param.type(); + const auto ¶mType = param.type(); if (paramType == SQLValues::Type::STRING) { auto strValue = param.stringValue(); sqlite3_bind_text(stmt, nBindField, strValue.c_str(), @@ -7969,6 +7969,8 @@ std::list<AuthorityFactory::CRSInfo> AuthorityFactory::getCRSInfoList() const { info.type = AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS; } else if (type == GEOCENTRIC) { info.type = AuthorityFactory::ObjectType::GEOCENTRIC_CRS; + } else if (type == OTHER) { + info.type = AuthorityFactory::ObjectType::GEODETIC_CRS; } else if (type == PROJECTED) { info.type = AuthorityFactory::ObjectType::PROJECTED_CRS; } else if (type == VERTICAL) { @@ -8797,6 +8799,7 @@ std::list<datum::EllipsoidNNPtr> AuthorityFactory::createEllipsoidFromExisting( } return res; } +//! @endcond // --------------------------------------------------------------------------- @@ -9308,7 +9311,6 @@ AuthorityFactory::createCompoundCRSFromExisting( // --------------------------------------------------------------------------- -//! @cond Doxygen_Suppress std::vector<operation::CoordinateOperationNNPtr> AuthorityFactory::getTransformationsForGeoid( const std::string &geoidName, bool usePROJAlternativeGridNames) const { diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 6c66b6f8..a7fedb91 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -866,6 +866,8 @@ void WKTFormatter::stopInversion() { bool WKTFormatter::isInverted() const { return d->inversionStack_.back(); } #endif +//! @endcond + // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress @@ -1411,6 +1413,7 @@ struct WKTParser::Private { ConcatenatedOperationNNPtr buildConcatenatedOperation(const WKTNodeNNPtr &node); }; +//! @endcond // --------------------------------------------------------------------------- @@ -8874,6 +8877,8 @@ struct PROJStringParser::Private { int iAxisSwap, bool ignorePROJAxis); }; +//! @endcond + // --------------------------------------------------------------------------- PROJStringParser::PROJStringParser() : d(internal::make_unique<Private>()) {} @@ -10211,6 +10216,8 @@ PROJStringParser::Private::buildProjectedCRS(int iStep, } } else if (param->unit_type == UnitOfMeasure::Type::SCALE) { value = 1; + } else if (step.name == "peirce_q" && proj_name == "lat_0") { + value = 90; } PropertyMap propertiesParameter; diff --git a/src/iso19111/operation/conversion.cpp b/src/iso19111/operation/conversion.cpp index 77e703f3..6bccf182 100644 --- a/src/iso19111/operation/conversion.cpp +++ b/src/iso19111/operation/conversion.cpp @@ -3839,6 +3839,30 @@ void Conversion::_exportToPROJString( formatter->addParam("x_0", falseEasting); formatter->addParam("y_0", falseNorthing); bConversionDone = true; + } else if (ci_equal(methodName, + PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE) || + ci_equal(methodName, + PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND)) { + const auto &scaleFactor = parameterValueMeasure( + EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); + if (scaleFactor.unit().type() != common::UnitOfMeasure::Type::UNKNOWN && + std::fabs(scaleFactor.getSIValue() - 1.0) > 1e-10) { + throw io::FormattingException( + "Only scale factor = 1 handled for Peirce Quincuncial"); + } + const double latitudeOfOriginDeg = + parameterValue(EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) + ->value() + .unit() + .type() != common::UnitOfMeasure::Type::UNKNOWN + ? parameterValueNumeric( + EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, + common::UnitOfMeasure::DEGREE) + : 90.0; + if (std::fabs(latitudeOfOriginDeg - 90.0) > 1e-10) { + throw io::FormattingException("Only latitude of natural origin = " + "90 handled for Peirce Quincuncial"); + } } else if (formatter->convention() == io::PROJStringFormatter::Convention::PROJ_5 && isZUnitConversion) { diff --git a/src/iso19111/operation/esriparammappings.cpp b/src/iso19111/operation/esriparammappings.cpp index 8021b95f..a6f6c6a1 100644 --- a/src/iso19111/operation/esriparammappings.cpp +++ b/src/iso19111/operation/esriparammappings.cpp @@ -947,6 +947,33 @@ static const ESRIParamMapping paramsESRI_Equal_Earth[] = { EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; +static const ESRIParamMapping paramsESRI_Peirce_Quincuncial_alt1[] = { + {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, + EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, + {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, + EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, + {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, + {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Option", nullptr, 0, "0.0", false}, + {nullptr, nullptr, 0, "0.0", false}}; +static const ESRIParamMapping paramsESRI_Peirce_Quincuncial_alt2[] = { + {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, + EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, + {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, + EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, + {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, + {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Option", nullptr, 0, "1.0", false}, + {nullptr, nullptr, 0, "0.0", false}}; + static const ESRIMethodMapping esriMappings[] = { {"Plate_Carree", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, paramsESRI_Plate_Carree}, @@ -1115,6 +1142,10 @@ static const ESRIMethodMapping esriMappings[] = { EPSG_CODE_METHOD_COLOMBIA_URBAN, paramsESRI_IGAC_Plano_Cartesiano}, {"Equal_Earth", EPSG_NAME_METHOD_EQUAL_EARTH, EPSG_CODE_METHOD_EQUAL_EARTH, paramsESRI_Equal_Earth}, + {"Peirce_Quincuncial", PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE, 0, + paramsESRI_Peirce_Quincuncial_alt1}, + {"Peirce_Quincuncial", PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND, 0, + paramsESRI_Peirce_Quincuncial_alt2}, }; // --------------------------------------------------------------------------- diff --git a/src/iso19111/operation/parammappings.cpp b/src/iso19111/operation/parammappings.cpp index 240a2b50..dd94e267 100644 --- a/src/iso19111/operation/parammappings.cpp +++ b/src/iso19111/operation/parammappings.cpp @@ -561,6 +561,10 @@ static const MethodMapping projectionMethodMappings[] = { {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, + {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_3D, + EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_3D, "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", @@ -789,6 +793,12 @@ static const MethodMapping projectionMethodMappings[] = { {PROJ_WKT2_NAME_METHOD_ROBINSON, 0, "Robinson", "robin", nullptr, paramsLonNatOriginLongitudeCentre}, + {PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE, 0, nullptr, "peirce_q", + "shape=square", paramsNatOriginScale}, + + {PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND, 0, nullptr, "peirce_q", + "shape=diamond", paramsNatOriginScale}, + {PROJ_WKT2_NAME_METHOD_SINUSOIDAL, 0, "Sinusoidal", "sinu", nullptr, paramsLonNatOriginLongitudeCentre}, diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index 4dadfa40..99b70609 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -533,6 +533,7 @@ void OperationMethod::_exportToJSON( formatID(formatter); } } +//! @endcond // --------------------------------------------------------------------------- diff --git a/src/iso19111/operation/transformation.cpp b/src/iso19111/operation/transformation.cpp index 8bd4f3de..1f399c7e 100644 --- a/src/iso19111/operation/transformation.cpp +++ b/src/iso19111/operation/transformation.cpp @@ -1477,7 +1477,6 @@ createApproximateInverseIfPossible(const Transformation *op) { return nullptr; } -//! @endcond // --------------------------------------------------------------------------- diff --git a/src/iso19111/util.cpp b/src/iso19111/util.cpp index 82d36458..f8ae9049 100644 --- a/src/iso19111/util.cpp +++ b/src/iso19111/util.cpp @@ -293,6 +293,8 @@ const BaseObjectNNPtr *PropertyMap::get(const std::string &key) const { } return nullptr; } +//! @endcond + // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress |
