diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-12-12 22:09:11 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-12-12 22:23:28 +0100 |
| commit | 4bc3fec94ae0c27c6327e163ea35098347bac0f1 (patch) | |
| tree | f54d2b42f20e9a3e34cc6bdd9728b8f8ebc53f4b /include/proj/internal/coordinateoperation_internal.hpp | |
| parent | 6857d1a4a8eb6fcb7b88b0339413913ba2c3351a (diff) | |
| download | PROJ-4bc3fec94ae0c27c6327e163ea35098347bac0f1.tar.gz PROJ-4bc3fec94ae0c27c6327e163ea35098347bac0f1.zip | |
Split coordinateoperation.cpp in many files in iso19111/operation directory
The big size of coordinateoperation.cpp could require significant amount
of RAM to build it with -O2 level, and cause compiler crashes in some
environments.
Diffstat (limited to 'include/proj/internal/coordinateoperation_internal.hpp')
| -rw-r--r-- | include/proj/internal/coordinateoperation_internal.hpp | 312 |
1 files changed, 0 insertions, 312 deletions
diff --git a/include/proj/internal/coordinateoperation_internal.hpp b/include/proj/internal/coordinateoperation_internal.hpp deleted file mode 100644 index 322d71b7..00000000 --- a/include/proj/internal/coordinateoperation_internal.hpp +++ /dev/null @@ -1,312 +0,0 @@ -/****************************************************************************** - * - * Project: PROJ - * Purpose: ISO19111:2019 implementation - * Author: Even Rouault <even dot rouault at spatialys dot com> - * - ****************************************************************************** - * Copyright (c) 2018, Even Rouault <even dot rouault at spatialys dot com> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - ****************************************************************************/ - -#ifndef FROM_PROJ_CPP -#error This file should only be included from a PROJ cpp file -#endif - -#ifndef COORDINATEOPERATION_INTERNAL_HH_INCLUDED -#define COORDINATEOPERATION_INTERNAL_HH_INCLUDED - -#include "proj/coordinateoperation.hpp" - -#include <vector> - -//! @cond Doxygen_Suppress - -NS_PROJ_START - -namespace operation { - -struct ParamMapping { - const char *wkt2_name; - const int epsg_code; - const char *wkt1_name; - const common::UnitOfMeasure::Type unit_type; - const char *proj_name; -}; - -struct MethodMapping { - const char *wkt2_name; - const int epsg_code; - const char *wkt1_name; - const char *proj_name_main; - const char *proj_name_aux; - const ParamMapping *const *params; -}; - -const MethodMapping *getMapping(int epsg_code) noexcept; -const MethodMapping *getMappingFromWKT1(const std::string &wkt1_name) noexcept; -const MethodMapping *getMapping(const char *wkt2_name) noexcept; -const MethodMapping *getMapping(const OperationMethod *method) noexcept; -std::vector<const MethodMapping *> -getMappingsFromPROJName(const std::string &projName); -const ParamMapping *getMappingFromWKT1(const MethodMapping *mapping, - const std::string &wkt1_name); -bool areEquivalentParameters(const std::string &a, const std::string &b); - -// --------------------------------------------------------------------------- - -struct ESRIParamMapping { - const char *esri_name; - const char *wkt2_name; - int epsg_code; - const char *fixed_value; - bool is_fixed_value; -}; - -struct ESRIMethodMapping { - const char *esri_name; - const char *wkt2_name; - int epsg_code; - const ESRIParamMapping *const params; -}; - -std::vector<const ESRIMethodMapping *> -getMappingsFromESRI(const std::string &esri_name); - -// --------------------------------------------------------------------------- - -bool isAxisOrderReversal(int methodEPSGCode); - -// --------------------------------------------------------------------------- - -class InverseCoordinateOperation; -/** Shared pointer of InverseCoordinateOperation */ -using InverseCoordinateOperationPtr = - std::shared_ptr<InverseCoordinateOperation>; -/** Non-null shared pointer of InverseCoordinateOperation */ -using InverseCoordinateOperationNNPtr = util::nn<InverseCoordinateOperationPtr>; - -/** \brief Inverse operation of a CoordinateOperation. - * - * This is used when there is no straightforward way of building another - * subclass of CoordinateOperation that models the inverse operation. - */ -class InverseCoordinateOperation : virtual public CoordinateOperation { - public: - InverseCoordinateOperation( - const CoordinateOperationNNPtr &forwardOperationIn, - bool wktSupportsInversion); - - ~InverseCoordinateOperation() override; - - void _exportToPROJString(io::PROJStringFormatter *formatter) - const override; // throw(FormattingException) - - bool _isEquivalentTo( - const util::IComparable *other, - util::IComparable::Criterion criterion = - util::IComparable::Criterion::STRICT, - const io::DatabaseContextPtr &dbContext = nullptr) const override; - - CoordinateOperationNNPtr inverse() const override; - - const CoordinateOperationNNPtr &forwardOperation() const { - return forwardOperation_; - } - - protected: - CoordinateOperationNNPtr forwardOperation_; - bool wktSupportsInversion_; - - void setPropertiesFromForward(); -}; - -// --------------------------------------------------------------------------- - -/** \brief Inverse of a conversion. */ -class InverseConversion : public Conversion, public InverseCoordinateOperation { - public: - explicit InverseConversion(const ConversionNNPtr &forward); - - ~InverseConversion() override; - - void _exportToWKT(io::WKTFormatter *formatter) const override { - Conversion::_exportToWKT(formatter); - } - - void _exportToJSON(io::JSONFormatter *formatter) const override { - Conversion::_exportToJSON(formatter); - } - - void - _exportToPROJString(io::PROJStringFormatter *formatter) const override { - InverseCoordinateOperation::_exportToPROJString(formatter); - } - - bool _isEquivalentTo( - const util::IComparable *other, - util::IComparable::Criterion criterion = - util::IComparable::Criterion::STRICT, - const io::DatabaseContextPtr &dbContext = nullptr) const override { - return InverseCoordinateOperation::_isEquivalentTo(other, criterion, - dbContext); - } - - CoordinateOperationNNPtr inverse() const override { - return InverseCoordinateOperation::inverse(); - } - - ConversionNNPtr inverseAsConversion() const; - -#ifdef _MSC_VER - // To avoid a warning C4250: 'osgeo::proj::operation::InverseConversion': - // inherits - // 'osgeo::proj::operation::SingleOperation::osgeo::proj::operation::SingleOperation::gridsNeeded' - // via dominance - std::set<GridDescription> - gridsNeeded(const io::DatabaseContextPtr &databaseContext, - bool considerKnownGridsAsAvailable) const override { - return SingleOperation::gridsNeeded(databaseContext, - considerKnownGridsAsAvailable); - } -#endif - - static CoordinateOperationNNPtr create(const ConversionNNPtr &forward); - - CoordinateOperationNNPtr _shallowClone() const override; -}; - -// --------------------------------------------------------------------------- - -/** \brief Inverse of a transformation. */ -class InverseTransformation : public Transformation, - public InverseCoordinateOperation { - public: - explicit InverseTransformation(const TransformationNNPtr &forward); - - ~InverseTransformation() override; - - void _exportToWKT(io::WKTFormatter *formatter) const override; - - void - _exportToPROJString(io::PROJStringFormatter *formatter) const override { - return InverseCoordinateOperation::_exportToPROJString(formatter); - } - - void _exportToJSON(io::JSONFormatter *formatter) const override { - Transformation::_exportToJSON(formatter); - } - - bool _isEquivalentTo( - const util::IComparable *other, - util::IComparable::Criterion criterion = - util::IComparable::Criterion::STRICT, - const io::DatabaseContextPtr &dbContext = nullptr) const override { - return InverseCoordinateOperation::_isEquivalentTo(other, criterion, - dbContext); - } - - CoordinateOperationNNPtr inverse() const override { - return InverseCoordinateOperation::inverse(); - } - - TransformationNNPtr inverseAsTransformation() const; - -#ifdef _MSC_VER - // To avoid a warning C4250: - // 'osgeo::proj::operation::InverseTransformation': inherits - // 'osgeo::proj::operation::SingleOperation::osgeo::proj::operation::SingleOperation::gridsNeeded' - // via dominance - std::set<GridDescription> - gridsNeeded(const io::DatabaseContextPtr &databaseContext, - bool considerKnownGridsAsAvailable) const override { - return SingleOperation::gridsNeeded(databaseContext, - considerKnownGridsAsAvailable); - } -#endif - - static TransformationNNPtr create(const TransformationNNPtr &forward); - - CoordinateOperationNNPtr _shallowClone() const override; -}; - -// --------------------------------------------------------------------------- - -class PROJBasedOperation; -/** Shared pointer of PROJBasedOperation */ -using PROJBasedOperationPtr = std::shared_ptr<PROJBasedOperation>; -/** Non-null shared pointer of PROJBasedOperation */ -using PROJBasedOperationNNPtr = util::nn<PROJBasedOperationPtr>; - -/** \brief A PROJ-string based coordinate operation. - */ -class PROJBasedOperation : public SingleOperation { - public: - ~PROJBasedOperation() override; - - void _exportToWKT(io::WKTFormatter *formatter) - const override; // throw(io::FormattingException) - - CoordinateOperationNNPtr inverse() const override; - - static PROJBasedOperationNNPtr - create(const util::PropertyMap &properties, const std::string &PROJString, - const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS, - const std::vector<metadata::PositionalAccuracyNNPtr> &accuracies); - - static PROJBasedOperationNNPtr - create(const util::PropertyMap &properties, - const io::IPROJStringExportableNNPtr &projExportable, bool inverse, - const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, - const crs::CRSPtr &interpolationCRS, - const std::vector<metadata::PositionalAccuracyNNPtr> &accuracies, - bool hasRoughTransformation); - - std::set<GridDescription> - gridsNeeded(const io::DatabaseContextPtr &databaseContext, - bool considerKnownGridsAsAvailable) const override; - - protected: - PROJBasedOperation(const PROJBasedOperation &) = default; - explicit PROJBasedOperation(const OperationMethodNNPtr &methodIn); - - void _exportToPROJString(io::PROJStringFormatter *formatter) - const override; // throw(FormattingException) - - void _exportToJSON(io::JSONFormatter *formatter) - const override; // throw(FormattingException) - - CoordinateOperationNNPtr _shallowClone() const override; - - INLINED_MAKE_SHARED - - private: - std::string projString_{}; - io::IPROJStringExportablePtr projStringExportable_{}; - bool inverse_ = false; -}; - -} // namespace operation - -NS_PROJ_END - -//! @endcond - -#endif // COORDINATEOPERATION_INTERNAL_HH_INCLUDED |
