From 549268ff39d4ef614bc8a32d7bd735e87802d78b Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 22 Nov 2018 21:56:33 +0100 Subject: Make proj_create_crs_to_crs() use proj_obj_create_operations() and use area of use argument, and make createFromUserInput() recognize init=epsg: / init=IGNF: in legacy mode, that is when proj_context_get_use_proj4_init_rules() is used --- include/proj/io.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/proj/io.hpp b/include/proj/io.hpp index c649fa9f..3b5019c1 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -597,7 +597,8 @@ class PROJ_GCC_DLL WKTNode { PROJ_DLL util::BaseObjectNNPtr createFromUserInput(const std::string &text, - const DatabaseContextPtr &dbContext); + const DatabaseContextPtr &dbContext, + bool usePROJ4InitRules = false); // --------------------------------------------------------------------------- @@ -654,6 +655,8 @@ class PROJ_GCC_DLL PROJStringParser { PROJ_DLL PROJStringParser & attachDatabaseContext(const DatabaseContextPtr &dbContext); + PROJ_DLL PROJStringParser &setUsePROJ4InitRules(bool enable); + PROJ_DLL std::vector warningList() const; PROJ_DLL util::BaseObjectNNPtr createFromPROJString( -- cgit v1.2.3 From a66c12277666489cac74535bad8d2cf565ad542d Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 23 Nov 2018 15:51:33 +0100 Subject: cs2cs: upgrade to use proj_create_crs_to_crs() --- include/proj/coordinateoperation.hpp | 11 ++++++----- include/proj/crs.hpp | 2 ++ include/proj/internal/internal.hpp | 2 +- include/proj/io.hpp | 1 + 4 files changed, 10 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index 293ba480..4005176a 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -818,10 +818,6 @@ class PROJ_GCC_DLL Conversion : public SingleOperation { PROJ_DLL ~Conversion() override; //! @endcond - //! @cond Doxygen_Suppress - PROJ_INTERNAL ConversionNNPtr shallowClone() const; - //! @endcond - PROJ_DLL CoordinateOperationNNPtr inverse() const override; //! @cond Doxygen_Suppress @@ -1287,6 +1283,9 @@ class PROJ_GCC_DLL Conversion : public SingleOperation { PROJ_INTERNAL const char *getESRIMethodName() const; PROJ_INTERNAL const char *getWKT1GDALMethodName() const; + + PROJ_INTERNAL ConversionNNPtr shallowClone() const; + //! @endcond protected: @@ -1490,6 +1489,8 @@ class PROJ_GCC_DLL Transformation : public SingleOperation { PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) + PROJ_INTERNAL TransformationNNPtr shallowClone() const; + //! @endcond protected: @@ -1499,6 +1500,7 @@ class PROJ_GCC_DLL Transformation : public SingleOperation { const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies); + PROJ_INTERNAL Transformation(const Transformation &other); INLINED_MAKE_SHARED PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) @@ -1508,7 +1510,6 @@ class PROJ_GCC_DLL Transformation : public SingleOperation { private: PROJ_OPAQUE_PRIVATE_DATA - Transformation(const Transformation &) = delete; }; // --------------------------------------------------------------------------- diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp index 82b2bd49..10e0a639 100644 --- a/include/proj/crs.hpp +++ b/include/proj/crs.hpp @@ -108,6 +108,8 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage { PROJ_FOR_TEST CRSNNPtr shallowClone() const; + PROJ_INTERNAL const std::string &getExtensionProj4() const noexcept; + //! @endcond protected: diff --git a/include/proj/internal/internal.hpp b/include/proj/internal/internal.hpp index 85dd5ac3..b16e12bc 100644 --- a/include/proj/internal/internal.hpp +++ b/include/proj/internal/internal.hpp @@ -104,7 +104,7 @@ PROJ_FOR_TEST std::string replaceAll(const std::string &str, const std::string &before, const std::string &after); -size_t ci_find(const std::string &osStr, const char *needle) noexcept; +PROJ_DLL size_t ci_find(const std::string &osStr, const char *needle) noexcept; size_t ci_find(const std::string &osStr, const std::string &needle, size_t startPos = 0) noexcept; diff --git a/include/proj/io.hpp b/include/proj/io.hpp index 3b5019c1..653edfbc 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -365,6 +365,7 @@ class PROJ_GCC_DLL PROJStringFormatter { PROJ_DLL void stopInversion(); PROJ_INTERNAL bool isInverted() const; PROJ_INTERNAL bool getUseETMercForTMerc(bool &settingSetOut) const; + PROJ_INTERNAL void setCoordinateOperationOptimizations(bool enable); PROJ_DLL void ingestPROJString(const std::string &str); // throw ParsingException -- cgit v1.2.3 From 67758b2c67ea329116b59818c038797667c4e1d1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 26 Nov 2018 15:47:57 +0100 Subject: Redirect epsg:XXXX and IGNF:XXXX CRS expansions to the database, and remove the data/epsg and data/IGNF files --- include/proj/io.hpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'include') diff --git a/include/proj/io.hpp b/include/proj/io.hpp index 653edfbc..5fb12a76 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -690,6 +690,8 @@ class PROJ_GCC_DLL DatabaseContext { PROJ_DLL const std::string &getPath() const; + PROJ_DLL const char *getMetadata(const char *key) const; + PROJ_DLL std::set getAuthorities() const; PROJ_DLL std::vector getDatabaseStructure() const; -- cgit v1.2.3 From cf855b24d2b901054bee90309cdc5df00dfb3085 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 28 Nov 2018 14:52:56 +0100 Subject: C API extensions and renaming - proj_obj_create_projected_XXXXX() are renamed to proj_obj_create_conversion_snake_case() and just instanciate a Conversion object - Advanced manipulation functions are moved to a dedicated section at bottom of proj.h - New C API needed for GDAL OGRSpatialReference --- include/proj/coordinateoperation.hpp | 3 +++ include/proj/coordinatesystem.hpp | 29 +++++++++++++++++++++++++++++ include/proj/crs.hpp | 11 +++++++++++ 3 files changed, 43 insertions(+) (limited to 'include') diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index 4005176a..4dd85e96 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -1286,6 +1286,9 @@ class PROJ_GCC_DLL Conversion : public SingleOperation { PROJ_INTERNAL ConversionNNPtr shallowClone() const; + PROJ_INTERNAL ConversionNNPtr alterParametersLinearUnit( + const common::UnitOfMeasure &unit, bool convertToNewUnit) const; + //! @endcond protected: diff --git a/include/proj/coordinatesystem.hpp b/include/proj/coordinatesystem.hpp index 89c2f99c..a301adab 100644 --- a/include/proj/coordinatesystem.hpp +++ b/include/proj/coordinatesystem.hpp @@ -208,6 +208,9 @@ class PROJ_GCC_DLL CoordinateSystemAxis final PROJ_INTERNAL static CoordinateSystemAxisNNPtr createLONG_EAST(const common::UnitOfMeasure &unit); + PROJ_INTERNAL CoordinateSystemAxisNNPtr + alterUnit(const common::UnitOfMeasure &newUnit) const; + //! @endcond private: @@ -372,6 +375,13 @@ class PROJ_GCC_DLL EllipsoidalCS final : public CoordinateSystem { }; PROJ_INTERNAL AxisOrder axisOrder() const; + + PROJ_INTERNAL EllipsoidalCSNNPtr + alterAngularUnit(const common::UnitOfMeasure &angularUnit) const; + + PROJ_INTERNAL EllipsoidalCSNNPtr + alterLinearUnit(const common::UnitOfMeasure &linearUnit) const; + //! @endcond protected: @@ -416,6 +426,13 @@ class PROJ_GCC_DLL VerticalCS final : public CoordinateSystem { PROJ_DLL static VerticalCSNNPtr createGravityRelatedHeight(const common::UnitOfMeasure &unit); + PROJ_PRIVATE : + //! @cond Doxygen_Suppress + PROJ_INTERNAL VerticalCSNNPtr + alterUnit(const common::UnitOfMeasure &unit) const; + + //! @endcond + protected: PROJ_INTERNAL explicit VerticalCS(const CoordinateSystemAxisNNPtr &axisIn); INLINED_MAKE_SHARED @@ -460,11 +477,23 @@ class PROJ_GCC_DLL CartesianCS final : public CoordinateSystem { const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3); + PROJ_DLL static CartesianCSNNPtr createEastingNorthing(const common::UnitOfMeasure &unit); + + PROJ_DLL static CartesianCSNNPtr + createNorthingEasting(const common::UnitOfMeasure &unit); + PROJ_DLL static CartesianCSNNPtr createGeocentric(const common::UnitOfMeasure &unit); + PROJ_PRIVATE : + //! @cond Doxygen_Suppress + PROJ_INTERNAL CartesianCSNNPtr + alterUnit(const common::UnitOfMeasure &unit) const; + + //! @endcond + protected: PROJ_INTERNAL explicit CartesianCS( const std::vector &axisIn); diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp index 10e0a639..bdb36cd4 100644 --- a/include/proj/crs.hpp +++ b/include/proj/crs.hpp @@ -108,8 +108,16 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage { PROJ_FOR_TEST CRSNNPtr shallowClone() const; + PROJ_FOR_TEST CRSNNPtr alterName(const std::string &newName) const; + PROJ_INTERNAL const std::string &getExtensionProj4() const noexcept; + PROJ_FOR_TEST CRSNNPtr + alterGeodeticCRS(const GeodeticCRSNNPtr &newGeodCRS) const; + + PROJ_FOR_TEST CRSNNPtr + alterCSLinearUnit(const common::UnitOfMeasure &unit) const; + //! @endcond protected: @@ -557,6 +565,9 @@ class PROJ_GCC_DLL ProjectedCRS final : public DerivedCRS, PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) + PROJ_FOR_TEST ProjectedCRSNNPtr alterParametersLinearUnit( + const common::UnitOfMeasure &unit, bool convertToNewUnit) const; + //! @endcond protected: -- cgit v1.2.3 From ba111ac8323ff194039a06db87d1fb17ed8175b3 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 3 Dec 2018 16:44:21 +0100 Subject: Export to ESRI WKT: make it use verbatim WKT definition from the database when possible --- include/proj/io.hpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/proj/io.hpp b/include/proj/io.hpp index 5fb12a76..ba7e9f53 100644 --- a/include/proj/io.hpp +++ b/include/proj/io.hpp @@ -134,6 +134,14 @@ using DatabaseContextNNPtr = util::nn; // --------------------------------------------------------------------------- +class WKTNode; +/** Unique pointer of WKTNode. */ +using WKTNodePtr = std::unique_ptr; +/** Non-null unique pointer of WKTNode. */ +using WKTNodeNNPtr = util::nn; + +// --------------------------------------------------------------------------- + class WKTFormatter; /** WKTFormatter unique pointer. */ using WKTFormatterPtr = std::unique_ptr; @@ -308,6 +316,8 @@ class PROJ_GCC_DLL WKTFormatter { PROJ_INTERNAL const DatabaseContextPtr &databaseContext() const; + PROJ_INTERNAL void ingestWKTNode(const WKTNodeNNPtr &node); + //! @endcond protected: @@ -555,12 +565,6 @@ class PROJ_GCC_DLL IPROJStringExportable { // --------------------------------------------------------------------------- -class WKTNode; -/** Unique pointer of WKTNode. */ -using WKTNodePtr = std::unique_ptr; -/** Non-null unique pointer of WKTNode. */ -using WKTNodeNNPtr = util::nn; - /** \brief Node in the tree-splitted WKT representation. */ class PROJ_GCC_DLL WKTNode { @@ -724,6 +728,9 @@ class PROJ_GCC_DLL DatabaseContext { PROJ_INTERNAL bool isKnownName(const std::string &name, const std::string &tableName) const; + PROJ_INTERNAL std::string getTextDefinition(const std::string &tableName, + const std::string &authName, + const std::string &code) const; //! @endcond protected: -- cgit v1.2.3