From b5369cc79eccc625419d37bb97a5361731fd8f0f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 6 Oct 2020 22:15:31 +0200 Subject: Add a AuthorityFactory::createDatumEnsemble() method, and make it inherit from ObjectUsage as mandated by ISO 19111:2019 --- include/proj/datum.hpp | 2 +- include/proj/io.hpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/proj/datum.hpp b/include/proj/datum.hpp index f1d45c6b..35b8576e 100644 --- a/include/proj/datum.hpp +++ b/include/proj/datum.hpp @@ -125,7 +125,7 @@ using DatumEnsembleNNPtr = util::nn; * * \remark Implements DatumEnsemble from \ref ISO_19111_2019 */ -class PROJ_GCC_DLL DatumEnsemble final : public common::IdentifiedObject, +class PROJ_GCC_DLL DatumEnsemble final : public common::ObjectUsage, public io::IJSONExportable { public: //! @cond Doxygen_Suppress diff --git a/include/proj/io.hpp b/include/proj/io.hpp index 19ed292d..b4db0ef7 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -71,6 +71,10 @@ class Datum; using DatumPtr = std::shared_ptr; using DatumNNPtr = util::nn; +class DatumEnsemble; +using DatumEnsemblePtr = std::shared_ptr; +using DatumEnsembleNNPtr = util::nn; + class Ellipsoid; using EllipsoidPtr = std::shared_ptr; using EllipsoidNNPtr = util::nn; @@ -930,6 +934,10 @@ class PROJ_GCC_DLL AuthorityFactory { PROJ_DLL datum::DatumNNPtr createDatum(const std::string &code) const; + PROJ_DLL datum::DatumEnsembleNNPtr + createDatumEnsemble(const std::string &code, + const std::string &type = std::string()) const; + PROJ_DLL datum::GeodeticReferenceFrameNNPtr createGeodeticDatum(const std::string &code) const; -- cgit v1.2.3 From 9dc3bf503b0455526a4d180930f8414621ea6187 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 6 Oct 2020 23:48:46 +0200 Subject: Add DatumEnsemble::asDatum() and use it in exportToWkt() to allow exporting DatumEnsemble to WKT < 2019. --- include/proj/datum.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/proj/datum.hpp b/include/proj/datum.hpp index 35b8576e..bf3dbcb7 100644 --- a/include/proj/datum.hpp +++ b/include/proj/datum.hpp @@ -147,7 +147,10 @@ class PROJ_GCC_DLL DatumEnsemble final : public common::ObjectUsage, PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(io::FormattingException) - //! @endcond + + PROJ_FOR_TEST DatumNNPtr + asDatum(const io::DatabaseContextPtr &dbContext) const; + //! @endcond protected: #ifdef DOXYGEN_ENABLED -- cgit v1.2.3 From 53672bdf7074e3737f6e6a53ee7373dcbccd6ea4 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 7 Oct 2020 23:58:36 +0200 Subject: Make CRS identification work with CRS with DatumEnsemble --- include/proj/crs.hpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp index bbdc9565..a028aceb 100644 --- a/include/proj/crs.hpp +++ b/include/proj/crs.hpp @@ -194,7 +194,10 @@ class PROJ_GCC_DLL SingleCRS : public CRS { PROJ_INTERNAL void exportDatumOrDatumEnsembleToWkt(io::WKTFormatter *formatter) const; // throw(io::FormattingException) - //! @endcond + + PROJ_INTERNAL const datum::DatumNNPtr + datumNonNull(const io::DatabaseContextPtr &dbContext) const; + //! @endcond protected: PROJ_INTERNAL SingleCRS(const datum::DatumPtr &datumIn, @@ -289,6 +292,9 @@ class PROJ_GCC_DLL GeodeticCRS : virtual public SingleCRS, PROJ_INTERNAL void addDatumInfoToPROJString(io::PROJStringFormatter *formatter) const; + PROJ_INTERNAL const datum::GeodeticReferenceFrameNNPtr + datumNonNull(const io::DatabaseContextPtr &dbContext) const; + PROJ_INTERNAL void addGeocentricUnitConversionIntoPROJString( io::PROJStringFormatter *formatter) const; @@ -474,6 +480,9 @@ class PROJ_GCC_DLL VerticalCRS : virtual public SingleCRS, PROJ_INTERNAL void addLinearUnitConvert(io::PROJStringFormatter *formatter) const; + PROJ_INTERNAL const datum::VerticalReferenceFrameNNPtr + datumNonNull(const io::DatabaseContextPtr &dbContext) const; + PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) -- cgit v1.2.3 From acd1cf3278a532b56f3f621e27a8895b3db3cb75 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 8 Oct 2020 16:10:55 +0200 Subject: Make GeographicCRS::is2DPartOf3D() work with DatumEnsemble --- include/proj/crs.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp index a028aceb..a71bf610 100644 --- a/include/proj/crs.hpp +++ b/include/proj/crs.hpp @@ -395,8 +395,9 @@ class PROJ_GCC_DLL GeographicCRS : public GeodeticCRS { PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) - PROJ_DLL bool - is2DPartOf3D(util::nn other) PROJ_PURE_DECL; + PROJ_DLL bool is2DPartOf3D( + util::nn other, + const io::DatabaseContextPtr &dbContext = nullptr) PROJ_PURE_DECL; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, -- cgit v1.2.3 From d1a0d95da549f7d32bcd8be408afe1fca62a6fb2 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 11 Oct 2020 20:01:29 +0200 Subject: Database query: add AuthorityFactory::ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME and DYNAMIC_VERTICAL_REFERENCE_FRAME, and make corresponding C API work --- include/proj/io.hpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include') diff --git a/include/proj/io.hpp b/include/proj/io.hpp index b4db0ef7..2b3c11b8 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -1022,6 +1022,10 @@ class PROJ_GCC_DLL AuthorityFactory { /** Object of type operation::ConcatenatedOperation (and derived classes) */ CONCATENATED_OPERATION, + /** Object of type datum::DynamicGeodeticReferenceFrame */ + DYNAMIC_GEODETIC_REFERENCE_FRAME, + /** Object of type datum::DynamicVerticalReferenceFrame */ + DYNAMIC_VERTICAL_REFERENCE_FRAME, }; PROJ_DLL std::set -- cgit v1.2.3