@crossbind/port-proj-wasm 2.0.0-beta.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +34 -0
  2. package/README.md +12 -0
  3. package/crossbind.build.js +1 -0
  4. package/crossbind.config.js +8 -0
  5. package/dist/prebuilt/CMakeLists.txt +57 -0
  6. package/dist/prebuilt/wasm-wasm32-mt-release/crossbind-emccflags.fingerprint +1 -0
  7. package/dist/prebuilt/wasm-wasm32-mt-release/include/geodesic.h +837 -0
  8. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/common.hpp +489 -0
  9. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/coordinateoperation.hpp +2163 -0
  10. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/coordinates.hpp +115 -0
  11. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/coordinatesystem.hpp +892 -0
  12. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/crs.hpp +1597 -0
  13. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/datum.hpp +863 -0
  14. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/io.hpp +1420 -0
  15. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/metadata.hpp +474 -0
  16. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/nn.hpp +385 -0
  17. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj/util.hpp +781 -0
  18. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj.h +2299 -0
  19. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj_constants.h +987 -0
  20. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj_experimental.h +52 -0
  21. package/dist/prebuilt/wasm-wasm32-mt-release/include/proj_symbol_rename.h +317 -0
  22. package/dist/prebuilt/wasm-wasm32-mt-release/include/projapps_lib.h +68 -0
  23. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj-config-version.cmake +52 -0
  24. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj-config.cmake +79 -0
  25. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj-targets-release.cmake +19 -0
  26. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj-targets.cmake +108 -0
  27. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj4-targets-release.cmake +19 -0
  28. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj/proj4-targets.cmake +108 -0
  29. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj-targets-release.cmake +19 -0
  30. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj-targets.cmake +108 -0
  31. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj4-config-version.cmake +52 -0
  32. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj4-config.cmake +79 -0
  33. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj4-targets-release.cmake +19 -0
  34. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/proj4/proj4-targets.cmake +108 -0
  35. package/dist/prebuilt/wasm-wasm32-mt-release/lib/libproj.a +0 -0
  36. package/dist/prebuilt/wasm-wasm32-mt-release/lib/pkgconfig/proj.pc +14 -0
  37. package/dist/prebuilt/wasm-wasm32-mt-release/share/bash-completion/completions/projinfo +51 -0
  38. package/dist/prebuilt/wasm-wasm32-mt-release/share/doc/proj/AUTHORS.md +33 -0
  39. package/dist/prebuilt/wasm-wasm32-mt-release/share/doc/proj/COPYING +34 -0
  40. package/dist/prebuilt/wasm-wasm32-mt-release/share/doc/proj/NEWS.md +3404 -0
  41. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/cct.1 +350 -0
  42. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/cs2cs.1 +516 -0
  43. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/geod.1 +255 -0
  44. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/gie.1 +494 -0
  45. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/proj.1 +318 -0
  46. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/projinfo.1 +832 -0
  47. package/dist/prebuilt/wasm-wasm32-mt-release/share/man/man1/projsync.1 +223 -0
  48. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/CH +22 -0
  49. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/GL27 +23 -0
  50. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/ITRF2000 +24 -0
  51. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/ITRF2008 +94 -0
  52. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/ITRF2014 +55 -0
  53. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/ITRF2020 +91 -0
  54. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/deformation_model.schema.json +582 -0
  55. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/nad.lst +142 -0
  56. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/nad27 +810 -0
  57. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/nad83 +745 -0
  58. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/other.extra +53 -0
  59. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/proj.db +0 -0
  60. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/proj.ini +59 -0
  61. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/projjson.schema.json +1174 -0
  62. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/triangulation.schema.json +214 -0
  63. package/dist/prebuilt/wasm-wasm32-mt-release/share/proj/world +214 -0
  64. package/dist/prebuilt/wasm-wasm32-st-release/crossbind-emccflags.fingerprint +1 -0
  65. package/dist/prebuilt/wasm-wasm32-st-release/include/geodesic.h +837 -0
  66. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/common.hpp +489 -0
  67. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/coordinateoperation.hpp +2163 -0
  68. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/coordinates.hpp +115 -0
  69. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/coordinatesystem.hpp +892 -0
  70. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/crs.hpp +1597 -0
  71. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/datum.hpp +863 -0
  72. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/io.hpp +1420 -0
  73. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/metadata.hpp +474 -0
  74. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/nn.hpp +385 -0
  75. package/dist/prebuilt/wasm-wasm32-st-release/include/proj/util.hpp +781 -0
  76. package/dist/prebuilt/wasm-wasm32-st-release/include/proj.h +2299 -0
  77. package/dist/prebuilt/wasm-wasm32-st-release/include/proj_constants.h +987 -0
  78. package/dist/prebuilt/wasm-wasm32-st-release/include/proj_experimental.h +52 -0
  79. package/dist/prebuilt/wasm-wasm32-st-release/include/proj_symbol_rename.h +317 -0
  80. package/dist/prebuilt/wasm-wasm32-st-release/include/projapps_lib.h +68 -0
  81. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj-config-version.cmake +52 -0
  82. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj-config.cmake +79 -0
  83. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj-targets-release.cmake +19 -0
  84. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj-targets.cmake +108 -0
  85. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj4-targets-release.cmake +19 -0
  86. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj/proj4-targets.cmake +108 -0
  87. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj-targets-release.cmake +19 -0
  88. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj-targets.cmake +108 -0
  89. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj4-config-version.cmake +52 -0
  90. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj4-config.cmake +79 -0
  91. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj4-targets-release.cmake +19 -0
  92. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/proj4/proj4-targets.cmake +108 -0
  93. package/dist/prebuilt/wasm-wasm32-st-release/lib/libproj.a +0 -0
  94. package/dist/prebuilt/wasm-wasm32-st-release/lib/pkgconfig/proj.pc +14 -0
  95. package/dist/prebuilt/wasm-wasm32-st-release/share/bash-completion/completions/projinfo +51 -0
  96. package/dist/prebuilt/wasm-wasm32-st-release/share/doc/proj/AUTHORS.md +33 -0
  97. package/dist/prebuilt/wasm-wasm32-st-release/share/doc/proj/COPYING +34 -0
  98. package/dist/prebuilt/wasm-wasm32-st-release/share/doc/proj/NEWS.md +3404 -0
  99. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/cct.1 +350 -0
  100. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/cs2cs.1 +516 -0
  101. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/geod.1 +255 -0
  102. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/gie.1 +494 -0
  103. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/proj.1 +318 -0
  104. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/projinfo.1 +832 -0
  105. package/dist/prebuilt/wasm-wasm32-st-release/share/man/man1/projsync.1 +223 -0
  106. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/CH +22 -0
  107. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/GL27 +23 -0
  108. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/ITRF2000 +24 -0
  109. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/ITRF2008 +94 -0
  110. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/ITRF2014 +55 -0
  111. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/ITRF2020 +91 -0
  112. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/deformation_model.schema.json +582 -0
  113. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/nad.lst +142 -0
  114. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/nad27 +810 -0
  115. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/nad83 +745 -0
  116. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/other.extra +53 -0
  117. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/proj.db +0 -0
  118. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/proj.ini +59 -0
  119. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/projjson.schema.json +1174 -0
  120. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/triangulation.schema.json +214 -0
  121. package/dist/prebuilt/wasm-wasm32-st-release/share/proj/world +214 -0
  122. package/package.json +35 -0
@@ -0,0 +1,863 @@
1
+ /******************************************************************************
2
+ *
3
+ * Project: PROJ
4
+ * Purpose: ISO19111:2019 implementation
5
+ * Author: Even Rouault <even dot rouault at spatialys dot com>
6
+ *
7
+ ******************************************************************************
8
+ * Copyright (c) 2018, Even Rouault <even dot rouault at spatialys dot com>
9
+ *
10
+ * Permission is hereby granted, free of charge, to any person obtaining a
11
+ * copy of this software and associated documentation files (the "Software"),
12
+ * to deal in the Software without restriction, including without limitation
13
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14
+ * and/or sell copies of the Software, and to permit persons to whom the
15
+ * Software is furnished to do so, subject to the following conditions:
16
+ *
17
+ * The above copyright notice and this permission notice shall be included
18
+ * in all copies or substantial portions of the Software.
19
+ *
20
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
+ * DEALINGS IN THE SOFTWARE.
27
+ ****************************************************************************/
28
+
29
+ #ifndef DATUM_HH_INCLUDED
30
+ #define DATUM_HH_INCLUDED
31
+
32
+ #include <memory>
33
+ #include <string>
34
+ #include <vector>
35
+
36
+ #include "common.hpp"
37
+ #include "io.hpp"
38
+ #include "util.hpp"
39
+
40
+ NS_PROJ_START
41
+
42
+ /** osgeo.proj.datum namespace
43
+
44
+ \brief Datum (the relationship of a coordinate system to the body).
45
+ */
46
+ namespace datum {
47
+
48
+ // ---------------------------------------------------------------------------
49
+
50
+ /** \brief Abstract class of the relationship of a coordinate system to an
51
+ * object, thus creating a coordinate reference system.
52
+ *
53
+ * For geodetic and vertical coordinate reference systems, it relates a
54
+ * coordinate system to the Earth (or the celestial body considered). With
55
+ * other types of coordinate reference systems, the datum may relate the
56
+ * coordinate system to another physical or
57
+ * virtual object. A datum uses a parameter or set of parameters that determine
58
+ * the location of the origin of the coordinate reference system. Each datum
59
+ * subtype can be associated with only specific types of coordinate reference
60
+ * systems.
61
+ *
62
+ * \remark Implements Datum from \ref ISO_19111_2019
63
+ */
64
+ class PROJ_GCC_DLL Datum : public common::ObjectUsage,
65
+ public io::IJSONExportable {
66
+ public:
67
+ //! @cond Doxygen_Suppress
68
+ PROJ_DLL ~Datum() override;
69
+ //! @endcond
70
+
71
+ PROJ_DLL const util::optional<std::string> &anchorDefinition() const;
72
+ PROJ_DLL const util::optional<common::Measure> &anchorEpoch() const;
73
+ PROJ_DLL const util::optional<common::DateTime> &publicationDate() const;
74
+ PROJ_DLL const common::IdentifiedObjectPtr &conventionalRS() const;
75
+
76
+ //! @cond Doxygen_Suppress
77
+ PROJ_INTERNAL bool _isEquivalentTo(
78
+ const util::IComparable *other,
79
+ util::IComparable::Criterion criterion =
80
+ util::IComparable::Criterion::STRICT,
81
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
82
+ //! @endcond
83
+
84
+ protected:
85
+ PROJ_INTERNAL Datum();
86
+
87
+ #ifdef DOXYGEN_ENABLED
88
+ std::string *anchorDefinition_;
89
+ Date *publicationDate_;
90
+ common::IdentifiedObject *conventionalRS_;
91
+ #endif
92
+
93
+ protected:
94
+ PROJ_INTERNAL void setAnchor(const util::optional<std::string> &anchor);
95
+ PROJ_INTERNAL void
96
+ setAnchorEpoch(const util::optional<common::Measure> &anchorEpoch);
97
+
98
+ PROJ_INTERNAL void
99
+ setProperties(const util::PropertyMap
100
+ &properties); // throw(InvalidValueTypeException)
101
+
102
+ private:
103
+ PROJ_OPAQUE_PRIVATE_DATA
104
+ Datum &operator=(const Datum &other) = delete;
105
+ Datum(const Datum &other) = delete;
106
+ };
107
+
108
+ /** Shared pointer of Datum */
109
+ using DatumPtr = std::shared_ptr<Datum>;
110
+ /** Non-null shared pointer of Datum */
111
+ using DatumNNPtr = util::nn<DatumPtr>;
112
+
113
+ // ---------------------------------------------------------------------------
114
+
115
+ class DatumEnsemble;
116
+ /** Shared pointer of DatumEnsemble */
117
+ using DatumEnsemblePtr = std::shared_ptr<DatumEnsemble>;
118
+ /** Non-null shared pointer of DatumEnsemble */
119
+ using DatumEnsembleNNPtr = util::nn<DatumEnsemblePtr>;
120
+
121
+ /** \brief A collection of two or more geodetic or vertical reference frames
122
+ * (or if not geodetic or vertical reference frame, a collection of two or more
123
+ * datums) which for all but the highest accuracy requirements may be
124
+ * considered to be insignificantly different from each other.
125
+ *
126
+ * Every frame within the datum ensemble must be a realizations of the same
127
+ * Terrestrial Reference System or Vertical Reference System.
128
+ *
129
+ * \remark Implements DatumEnsemble from \ref ISO_19111_2019
130
+ */
131
+ class PROJ_GCC_DLL DatumEnsemble final : public common::ObjectUsage,
132
+ public io::IJSONExportable {
133
+ public:
134
+ //! @cond Doxygen_Suppress
135
+ PROJ_DLL ~DatumEnsemble() override;
136
+ //! @endcond
137
+
138
+ PROJ_DLL const std::vector<DatumNNPtr> &datums() const;
139
+ PROJ_DLL const metadata::PositionalAccuracyNNPtr &
140
+ positionalAccuracy() const;
141
+
142
+ PROJ_DLL static DatumEnsembleNNPtr create(
143
+ const util::PropertyMap &properties,
144
+ const std::vector<DatumNNPtr> &datumsIn,
145
+ const metadata::PositionalAccuracyNNPtr &accuracy); // throw(Exception)
146
+
147
+ //! @cond Doxygen_Suppress
148
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
149
+ const override; // throw(io::FormattingException)
150
+
151
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
152
+ const override; // throw(io::FormattingException)
153
+
154
+ PROJ_INTERNAL static std::string
155
+ ensembleNameToNonEnsembleName(const std::string &s);
156
+
157
+ PROJ_FOR_TEST DatumNNPtr
158
+ asDatum(const io::DatabaseContextPtr &dbContext) const;
159
+ //! @endcond
160
+
161
+ protected:
162
+ #ifdef DOXYGEN_ENABLED
163
+ Datum datums_[];
164
+ PositionalAccuracy positionalAccuracy_;
165
+ #endif
166
+
167
+ PROJ_INTERNAL
168
+ DatumEnsemble(const std::vector<DatumNNPtr> &datumsIn,
169
+ const metadata::PositionalAccuracyNNPtr &accuracy);
170
+ INLINED_MAKE_SHARED
171
+
172
+ private:
173
+ PROJ_OPAQUE_PRIVATE_DATA
174
+
175
+ DatumEnsemble(const DatumEnsemble &other) = delete;
176
+ DatumEnsemble &operator=(const DatumEnsemble &other) = delete;
177
+ };
178
+
179
+ // ---------------------------------------------------------------------------
180
+
181
+ class PrimeMeridian;
182
+ /** Shared pointer of PrimeMeridian */
183
+ using PrimeMeridianPtr = std::shared_ptr<PrimeMeridian>;
184
+ /** Non-null shared pointer of PrimeMeridian */
185
+ using PrimeMeridianNNPtr = util::nn<PrimeMeridianPtr>;
186
+
187
+ /** \brief The origin meridian from which longitude values are determined.
188
+ *
189
+ * \note The default value for prime meridian name is "Greenwich". When the
190
+ * default applies, the value for the longitude shall be 0 (degrees).
191
+ *
192
+ * \remark Implements PrimeMeridian from \ref ISO_19111_2019
193
+ */
194
+ class PROJ_GCC_DLL PrimeMeridian final : public common::IdentifiedObject,
195
+ public io::IPROJStringExportable,
196
+ public io::IJSONExportable {
197
+ public:
198
+ //! @cond Doxygen_Suppress
199
+ PROJ_DLL ~PrimeMeridian() override;
200
+ //! @endcond
201
+
202
+ PROJ_DLL const common::Angle &longitude() PROJ_PURE_DECL;
203
+
204
+ // non-standard
205
+ PROJ_DLL static PrimeMeridianNNPtr
206
+ create(const util::PropertyMap &properties,
207
+ const common::Angle &longitudeIn);
208
+
209
+ PROJ_DLL static const PrimeMeridianNNPtr GREENWICH;
210
+ PROJ_DLL static const PrimeMeridianNNPtr REFERENCE_MERIDIAN;
211
+ PROJ_DLL static const PrimeMeridianNNPtr PARIS;
212
+
213
+ PROJ_PRIVATE :
214
+
215
+ //! @cond Doxygen_Suppress
216
+ PROJ_INTERNAL void
217
+ _exportToPROJString(io::PROJStringFormatter *formatter)
218
+ const override; // throw(FormattingException)
219
+
220
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
221
+ const override; // throw(io::FormattingException)
222
+
223
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
224
+ const override; // throw(io::FormattingException)
225
+
226
+ PROJ_INTERNAL bool _isEquivalentTo(
227
+ const util::IComparable *other,
228
+ util::IComparable::Criterion criterion =
229
+ util::IComparable::Criterion::STRICT,
230
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
231
+
232
+ PROJ_INTERNAL static std::string
233
+ getPROJStringWellKnownName(const common::Angle &angle);
234
+ //! @endcond
235
+
236
+ protected:
237
+ #ifdef DOXYGEN_ENABLED
238
+ Angle greenwichLongitude_;
239
+ #endif
240
+
241
+ PROJ_INTERNAL explicit PrimeMeridian(
242
+ const common::Angle &angle = common::Angle());
243
+ INLINED_MAKE_SHARED
244
+
245
+ private:
246
+ PROJ_OPAQUE_PRIVATE_DATA
247
+ PrimeMeridian(const PrimeMeridian &other) = delete;
248
+ PrimeMeridian &operator=(const PrimeMeridian &other) = delete;
249
+
250
+ PROJ_INTERNAL static const PrimeMeridianNNPtr createGREENWICH();
251
+ PROJ_INTERNAL static const PrimeMeridianNNPtr createREFERENCE_MERIDIAN();
252
+ PROJ_INTERNAL static const PrimeMeridianNNPtr createPARIS();
253
+ };
254
+
255
+ // ---------------------------------------------------------------------------
256
+
257
+ class Ellipsoid;
258
+ /** Shared pointer of Ellipsoid */
259
+ using EllipsoidPtr = std::shared_ptr<Ellipsoid>;
260
+ /** Non-null shared pointer of Ellipsoid */
261
+ using EllipsoidNNPtr = util::nn<EllipsoidPtr>;
262
+
263
+ /** \brief A geometric figure that can be used to describe the approximate
264
+ * shape of an object.
265
+ *
266
+ * For the Earth an oblate biaxial ellipsoid is used: in mathematical terms,
267
+ * it is a surface formed by the rotation of an ellipse about its minor axis.
268
+ *
269
+ * \remark Implements Ellipsoid from \ref ISO_19111_2019
270
+ */
271
+ class PROJ_GCC_DLL Ellipsoid final : public common::IdentifiedObject,
272
+ public io::IPROJStringExportable,
273
+ public io::IJSONExportable {
274
+ public:
275
+ //! @cond Doxygen_Suppress
276
+ PROJ_DLL ~Ellipsoid() override;
277
+ //! @endcond
278
+
279
+ PROJ_DLL const common::Length &semiMajorAxis() PROJ_PURE_DECL;
280
+
281
+ // Inlined from SecondDefiningParameter union
282
+ PROJ_DLL const util::optional<common::Scale> &
283
+ inverseFlattening() PROJ_PURE_DECL;
284
+ PROJ_DLL const util::optional<common::Length> &
285
+ semiMinorAxis() PROJ_PURE_DECL;
286
+ PROJ_DLL bool isSphere() PROJ_PURE_DECL;
287
+
288
+ PROJ_DLL const util::optional<common::Length> &
289
+ semiMedianAxis() PROJ_PURE_DECL;
290
+
291
+ // non-standard
292
+
293
+ PROJ_DLL double computedInverseFlattening() PROJ_PURE_DECL;
294
+ PROJ_DLL double squaredEccentricity() PROJ_PURE_DECL;
295
+ PROJ_DLL common::Length computeSemiMinorAxis() const;
296
+
297
+ PROJ_DLL const std::string &celestialBody() PROJ_PURE_DECL;
298
+
299
+ PROJ_DLL static const std::string EARTH;
300
+
301
+ PROJ_DLL static EllipsoidNNPtr
302
+ createSphere(const util::PropertyMap &properties,
303
+ const common::Length &radius,
304
+ const std::string &celestialBody = EARTH);
305
+
306
+ PROJ_DLL static EllipsoidNNPtr
307
+ createFlattenedSphere(const util::PropertyMap &properties,
308
+ const common::Length &semiMajorAxisIn,
309
+ const common::Scale &invFlattening,
310
+ const std::string &celestialBody = EARTH);
311
+
312
+ PROJ_DLL static EllipsoidNNPtr
313
+ createTwoAxis(const util::PropertyMap &properties,
314
+ const common::Length &semiMajorAxisIn,
315
+ const common::Length &semiMinorAxisIn,
316
+ const std::string &celestialBody = EARTH);
317
+
318
+ PROJ_DLL EllipsoidNNPtr identify() const;
319
+
320
+ PROJ_DLL static const EllipsoidNNPtr CLARKE_1866;
321
+ PROJ_DLL static const EllipsoidNNPtr WGS84;
322
+ PROJ_DLL static const EllipsoidNNPtr GRS1980;
323
+
324
+ PROJ_PRIVATE :
325
+ //! @cond Doxygen_Suppress
326
+ PROJ_INTERNAL void
327
+ _exportToWKT(io::WKTFormatter *formatter)
328
+ const override; // throw(io::FormattingException)
329
+
330
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
331
+ const override; // throw(io::FormattingException)
332
+
333
+ PROJ_INTERNAL bool _isEquivalentTo(
334
+ const util::IComparable *other,
335
+ util::IComparable::Criterion criterion =
336
+ util::IComparable::Criterion::STRICT,
337
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
338
+
339
+ PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter)
340
+ const override; // throw(FormattingException)
341
+ //! @endcond
342
+
343
+ PROJ_INTERNAL static std::string
344
+ guessBodyName(const io::DatabaseContextPtr &dbContext, double a,
345
+ const std::string &ellpsName = std::string());
346
+
347
+ PROJ_INTERNAL bool lookForProjWellKnownEllps(std::string &projEllpsName,
348
+ std::string &ellpsName) const;
349
+
350
+ protected:
351
+ #ifdef DOXYGEN_ENABLED
352
+ common::Length semiMajorAxis_;
353
+ common::Scale *inverseFlattening_;
354
+ common::Length *semiMinorAxis_;
355
+ bool isSphere_;
356
+ common::Length *semiMedianAxis_;
357
+ #endif
358
+
359
+ PROJ_INTERNAL explicit Ellipsoid(const common::Length &radius,
360
+ const std::string &celestialBody);
361
+
362
+ PROJ_INTERNAL Ellipsoid(const common::Length &semiMajorAxisIn,
363
+ const common::Scale &invFlattening,
364
+ const std::string &celestialBody);
365
+
366
+ PROJ_INTERNAL Ellipsoid(const common::Length &semiMajorAxisIn,
367
+ const common::Length &semiMinorAxisIn,
368
+ const std::string &celestialBody);
369
+
370
+ PROJ_INTERNAL Ellipsoid(const Ellipsoid &other);
371
+
372
+ INLINED_MAKE_SHARED
373
+
374
+ PROJ_INTERNAL static const EllipsoidNNPtr createCLARKE_1866();
375
+ PROJ_INTERNAL static const EllipsoidNNPtr createWGS84();
376
+ PROJ_INTERNAL static const EllipsoidNNPtr createGRS1980();
377
+
378
+ private:
379
+ PROJ_OPAQUE_PRIVATE_DATA
380
+ Ellipsoid &operator=(const Ellipsoid &other) = delete;
381
+ };
382
+
383
+ // ---------------------------------------------------------------------------
384
+
385
+ class GeodeticReferenceFrame;
386
+ /** Shared pointer of GeodeticReferenceFrame */
387
+ using GeodeticReferenceFramePtr = std::shared_ptr<GeodeticReferenceFrame>;
388
+ /** Non-null shared pointer of GeodeticReferenceFrame */
389
+ using GeodeticReferenceFrameNNPtr = util::nn<GeodeticReferenceFramePtr>;
390
+
391
+ /** \brief The definition of the position, scale and orientation of a geocentric
392
+ * Cartesian 3D coordinate system relative to the Earth.
393
+ *
394
+ * It may also identify a defined ellipsoid (or sphere) that approximates
395
+ * the shape of the Earth and which is centred on and aligned to this
396
+ * geocentric coordinate system. Older geodetic datums define the location and
397
+ * orientation of a defined ellipsoid (or sphere) that approximates the shape
398
+ * of the earth.
399
+ *
400
+ * \note The terminology "Datum" is often used to mean a GeodeticReferenceFrame.
401
+ *
402
+ * \note In \ref ISO_19111_2007, this class was called GeodeticDatum.
403
+ *
404
+ * \remark Implements GeodeticReferenceFrame from \ref ISO_19111_2019
405
+ */
406
+ class PROJ_GCC_DLL GeodeticReferenceFrame : public Datum {
407
+ public:
408
+ //! @cond Doxygen_Suppress
409
+ PROJ_DLL ~GeodeticReferenceFrame() override;
410
+ //! @endcond
411
+
412
+ PROJ_DLL const PrimeMeridianNNPtr &primeMeridian() PROJ_PURE_DECL;
413
+
414
+ // We constraint more than the standard into which the ellipsoid might
415
+ // be omitted for a CRS with a non-ellipsoidal CS
416
+ PROJ_DLL const EllipsoidNNPtr &ellipsoid() PROJ_PURE_DECL;
417
+
418
+ // non-standard
419
+ PROJ_DLL static GeodeticReferenceFrameNNPtr
420
+ create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid,
421
+ const util::optional<std::string> &anchor,
422
+ const PrimeMeridianNNPtr &primeMeridian);
423
+
424
+ PROJ_DLL static GeodeticReferenceFrameNNPtr
425
+ create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid,
426
+ const util::optional<std::string> &anchor,
427
+ const util::optional<common::Measure> &anchorEpoch,
428
+ const PrimeMeridianNNPtr &primeMeridian);
429
+
430
+ PROJ_DLL static const GeodeticReferenceFrameNNPtr
431
+ EPSG_6267; // North American Datum 1927
432
+ PROJ_DLL static const GeodeticReferenceFrameNNPtr
433
+ EPSG_6269; // North American Datum 1983
434
+ PROJ_DLL static const GeodeticReferenceFrameNNPtr EPSG_6326; // WGS 84
435
+
436
+ //! @cond Doxygen_Suppress
437
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
438
+ const override; // throw(io::FormattingException)
439
+
440
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
441
+ const override; // throw(FormattingException)
442
+
443
+ PROJ_INTERNAL bool _isEquivalentTo(
444
+ const util::IComparable *other,
445
+ util::IComparable::Criterion criterion =
446
+ util::IComparable::Criterion::STRICT,
447
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
448
+
449
+ PROJ_INTERNAL bool isEquivalentToNoExactTypeCheck(
450
+ const util::IComparable *other, util::IComparable::Criterion criterion,
451
+ const io::DatabaseContextPtr &dbContext) const;
452
+ //! @endcond
453
+
454
+ protected:
455
+ #ifdef DOXYGEN_ENABLED
456
+ PrimeMeridian primeMeridian_;
457
+ Ellipsoid *ellipsoid_;
458
+ #endif
459
+
460
+ PROJ_INTERNAL
461
+ GeodeticReferenceFrame(const EllipsoidNNPtr &ellipsoidIn,
462
+ const PrimeMeridianNNPtr &primeMeridianIn);
463
+ INLINED_MAKE_SHARED
464
+
465
+ PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6267();
466
+ PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6269();
467
+ PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6326();
468
+
469
+ bool hasEquivalentNameToUsingAlias(
470
+ const IdentifiedObject *other,
471
+ const io::DatabaseContextPtr &dbContext) const override;
472
+
473
+ private:
474
+ PROJ_OPAQUE_PRIVATE_DATA
475
+ GeodeticReferenceFrame(const GeodeticReferenceFrame &other) = delete;
476
+ GeodeticReferenceFrame &
477
+ operator=(const GeodeticReferenceFrame &other) = delete;
478
+ };
479
+
480
+ // ---------------------------------------------------------------------------
481
+
482
+ class DynamicGeodeticReferenceFrame;
483
+ /** Shared pointer of DynamicGeodeticReferenceFrame */
484
+ using DynamicGeodeticReferenceFramePtr =
485
+ std::shared_ptr<DynamicGeodeticReferenceFrame>;
486
+ /** Non-null shared pointer of DynamicGeodeticReferenceFrame */
487
+ using DynamicGeodeticReferenceFrameNNPtr =
488
+ util::nn<DynamicGeodeticReferenceFramePtr>;
489
+
490
+ /** \brief A geodetic reference frame in which some of the parameters describe
491
+ * time evolution of defining station coordinates.
492
+ *
493
+ * For example defining station coordinates having linear velocities to account
494
+ * for crustal motion.
495
+ *
496
+ * \remark Implements DynamicGeodeticReferenceFrame from \ref ISO_19111_2019
497
+ */
498
+ class PROJ_GCC_DLL DynamicGeodeticReferenceFrame final
499
+ : public GeodeticReferenceFrame {
500
+ public:
501
+ //! @cond Doxygen_Suppress
502
+ PROJ_DLL ~DynamicGeodeticReferenceFrame() override;
503
+ //! @endcond
504
+
505
+ PROJ_DLL const common::Measure &frameReferenceEpoch() const;
506
+ PROJ_DLL const util::optional<std::string> &deformationModelName() const;
507
+
508
+ // non-standard
509
+ PROJ_DLL static DynamicGeodeticReferenceFrameNNPtr
510
+ create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid,
511
+ const util::optional<std::string> &anchor,
512
+ const PrimeMeridianNNPtr &primeMeridian,
513
+ const common::Measure &frameReferenceEpochIn,
514
+ const util::optional<std::string> &deformationModelNameIn);
515
+
516
+ //! @cond Doxygen_Suppress
517
+ PROJ_INTERNAL bool _isEquivalentTo(
518
+ const util::IComparable *other,
519
+ util::IComparable::Criterion criterion =
520
+ util::IComparable::Criterion::STRICT,
521
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
522
+
523
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
524
+ const override; // throw(io::FormattingException)
525
+ //! @endcond
526
+
527
+ protected:
528
+ #ifdef DOXYGEN_ENABLED
529
+ Measure frameReferenceEpoch_;
530
+ #endif
531
+
532
+ PROJ_INTERNAL DynamicGeodeticReferenceFrame(
533
+ const EllipsoidNNPtr &ellipsoidIn,
534
+ const PrimeMeridianNNPtr &primeMeridianIn,
535
+ const common::Measure &frameReferenceEpochIn,
536
+ const util::optional<std::string> &deformationModelNameIn);
537
+ INLINED_MAKE_SHARED
538
+
539
+ private:
540
+ PROJ_OPAQUE_PRIVATE_DATA
541
+ DynamicGeodeticReferenceFrame(const DynamicGeodeticReferenceFrame &other) =
542
+ delete;
543
+ DynamicGeodeticReferenceFrame &
544
+ operator=(const DynamicGeodeticReferenceFrame &other) = delete;
545
+ };
546
+
547
+ // ---------------------------------------------------------------------------
548
+
549
+ /** \brief The specification of the method by which the vertical reference frame
550
+ * is realized.
551
+ *
552
+ * \remark Implements RealizationMethod from \ref ISO_19111_2019
553
+ */
554
+ class PROJ_GCC_DLL RealizationMethod : public util::CodeList {
555
+ public:
556
+ PROJ_DLL static const RealizationMethod LEVELLING;
557
+ PROJ_DLL static const RealizationMethod GEOID;
558
+ PROJ_DLL static const RealizationMethod TIDAL;
559
+
560
+ private:
561
+ PROJ_FRIEND_OPTIONAL(RealizationMethod);
562
+ PROJ_DLL explicit RealizationMethod(
563
+ const std::string &nameIn = std::string());
564
+ PROJ_DLL RealizationMethod(const RealizationMethod &other) = default;
565
+ PROJ_DLL RealizationMethod &operator=(const RealizationMethod &other);
566
+ };
567
+
568
+ // ---------------------------------------------------------------------------
569
+
570
+ class VerticalReferenceFrame;
571
+ /** Shared pointer of VerticalReferenceFrame */
572
+ using VerticalReferenceFramePtr = std::shared_ptr<VerticalReferenceFrame>;
573
+ /** Non-null shared pointer of VerticalReferenceFrame */
574
+ using VerticalReferenceFrameNNPtr = util::nn<VerticalReferenceFramePtr>;
575
+
576
+ /** \brief A textual description and/or a set of parameters identifying a
577
+ * particular reference level surface used as a zero-height or zero-depth
578
+ * surface, including its position with respect to the Earth.
579
+ *
580
+ * \note In \ref ISO_19111_2007, this class was called VerticalDatum.
581
+
582
+ * \remark Implements VerticalReferenceFrame from \ref ISO_19111_2019
583
+ */
584
+ class PROJ_GCC_DLL VerticalReferenceFrame : public Datum {
585
+ public:
586
+ //! @cond Doxygen_Suppress
587
+ PROJ_DLL ~VerticalReferenceFrame() override;
588
+ //! @endcond
589
+
590
+ PROJ_DLL const util::optional<RealizationMethod> &realizationMethod() const;
591
+
592
+ // non-standard
593
+ PROJ_DLL static VerticalReferenceFrameNNPtr
594
+ create(const util::PropertyMap &properties,
595
+ const util::optional<std::string> &anchor =
596
+ util::optional<std::string>(),
597
+ const util::optional<RealizationMethod> &realizationMethodIn =
598
+ util::optional<RealizationMethod>());
599
+
600
+ PROJ_DLL static VerticalReferenceFrameNNPtr
601
+ create(const util::PropertyMap &properties,
602
+ const util::optional<std::string> &anchor,
603
+ const util::optional<common::Measure> &anchorEpoch,
604
+ const util::optional<RealizationMethod> &realizationMethodIn =
605
+ util::optional<RealizationMethod>());
606
+
607
+ //! @cond Doxygen_Suppress
608
+ PROJ_INTERNAL bool _isEquivalentTo(
609
+ const util::IComparable *other,
610
+ util::IComparable::Criterion criterion =
611
+ util::IComparable::Criterion::STRICT,
612
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
613
+
614
+ PROJ_INTERNAL bool isEquivalentToNoExactTypeCheck(
615
+ const util::IComparable *other, util::IComparable::Criterion criterion,
616
+ const io::DatabaseContextPtr &dbContext) const;
617
+
618
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
619
+ const override; // throw(io::FormattingException)
620
+
621
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
622
+ const override; // throw(FormattingException)
623
+
624
+ PROJ_INTERNAL const std::string &getWKT1DatumType() const;
625
+
626
+ //! @endcond
627
+
628
+ protected:
629
+ #ifdef DOXYGEN_ENABLED
630
+ RealizationMethod realizationMethod_;
631
+ #endif
632
+
633
+ PROJ_INTERNAL explicit VerticalReferenceFrame(
634
+ const util::optional<RealizationMethod> &realizationMethodIn);
635
+ INLINED_MAKE_SHARED
636
+
637
+ private:
638
+ PROJ_OPAQUE_PRIVATE_DATA
639
+ };
640
+
641
+ // ---------------------------------------------------------------------------
642
+
643
+ class DynamicVerticalReferenceFrame;
644
+ /** Shared pointer of DynamicVerticalReferenceFrame */
645
+ using DynamicVerticalReferenceFramePtr =
646
+ std::shared_ptr<DynamicVerticalReferenceFrame>;
647
+ /** Non-null shared pointer of DynamicVerticalReferenceFrame */
648
+ using DynamicVerticalReferenceFrameNNPtr =
649
+ util::nn<DynamicVerticalReferenceFramePtr>;
650
+
651
+ /** \brief A vertical reference frame in which some of the defining parameters
652
+ * have time dependency.
653
+ *
654
+ * For example defining station heights have velocity to account for
655
+ * post-glacial isostatic rebound motion.
656
+ *
657
+ * \remark Implements DynamicVerticalReferenceFrame from \ref ISO_19111_2019
658
+ */
659
+ class PROJ_GCC_DLL DynamicVerticalReferenceFrame final
660
+ : public VerticalReferenceFrame {
661
+ public:
662
+ //! @cond Doxygen_Suppress
663
+ PROJ_DLL ~DynamicVerticalReferenceFrame() override;
664
+ //! @endcond
665
+
666
+ PROJ_DLL const common::Measure &frameReferenceEpoch() const;
667
+ PROJ_DLL const util::optional<std::string> &deformationModelName() const;
668
+
669
+ // non-standard
670
+ PROJ_DLL static DynamicVerticalReferenceFrameNNPtr
671
+ create(const util::PropertyMap &properties,
672
+ const util::optional<std::string> &anchor,
673
+ const util::optional<RealizationMethod> &realizationMethodIn,
674
+ const common::Measure &frameReferenceEpochIn,
675
+ const util::optional<std::string> &deformationModelNameIn);
676
+
677
+ //! @cond Doxygen_Suppress
678
+ PROJ_INTERNAL bool _isEquivalentTo(
679
+ const util::IComparable *other,
680
+ util::IComparable::Criterion criterion =
681
+ util::IComparable::Criterion::STRICT,
682
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
683
+
684
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
685
+ const override; // throw(io::FormattingException)
686
+ //! @endcond
687
+
688
+ protected:
689
+ #ifdef DOXYGEN_ENABLED
690
+ Measure frameReferenceEpoch_;
691
+ #endif
692
+
693
+ PROJ_INTERNAL DynamicVerticalReferenceFrame(
694
+ const util::optional<RealizationMethod> &realizationMethodIn,
695
+ const common::Measure &frameReferenceEpochIn,
696
+ const util::optional<std::string> &deformationModelNameIn);
697
+ INLINED_MAKE_SHARED
698
+
699
+ private:
700
+ PROJ_OPAQUE_PRIVATE_DATA
701
+ DynamicVerticalReferenceFrame(const DynamicVerticalReferenceFrame &other) =
702
+ delete;
703
+ DynamicVerticalReferenceFrame &
704
+ operator=(const DynamicVerticalReferenceFrame &other) = delete;
705
+ };
706
+
707
+ // ---------------------------------------------------------------------------
708
+
709
+ class TemporalDatum;
710
+ /** Shared pointer of TemporalDatum */
711
+ using TemporalDatumPtr = std::shared_ptr<TemporalDatum>;
712
+ /** Non-null shared pointer of TemporalDatum */
713
+ using TemporalDatumNNPtr = util::nn<TemporalDatumPtr>;
714
+
715
+ /** \brief The definition of the relationship of a temporal coordinate system
716
+ * to an object. The object is normally time on the Earth.
717
+ *
718
+ * \remark Implements TemporalDatum from \ref ISO_19111_2019
719
+ */
720
+ class PROJ_GCC_DLL TemporalDatum final : public Datum {
721
+ public:
722
+ //! @cond Doxygen_Suppress
723
+ PROJ_DLL ~TemporalDatum() override;
724
+ //! @endcond
725
+
726
+ PROJ_DLL const common::DateTime &temporalOrigin() const;
727
+ PROJ_DLL const std::string &calendar() const;
728
+
729
+ PROJ_DLL static const std::string CALENDAR_PROLEPTIC_GREGORIAN;
730
+
731
+ // non-standard
732
+ PROJ_DLL static TemporalDatumNNPtr
733
+ create(const util::PropertyMap &properties,
734
+ const common::DateTime &temporalOriginIn,
735
+ const std::string &calendarIn);
736
+
737
+ //! @cond Doxygen_Suppress
738
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
739
+ const override; // throw(io::FormattingException)
740
+
741
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
742
+ const override; // throw(FormattingException)
743
+
744
+ PROJ_INTERNAL bool _isEquivalentTo(
745
+ const util::IComparable *other,
746
+ util::IComparable::Criterion criterion =
747
+ util::IComparable::Criterion::STRICT,
748
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
749
+ //! @endcond
750
+
751
+ protected:
752
+ PROJ_INTERNAL TemporalDatum(const common::DateTime &temporalOriginIn,
753
+ const std::string &calendarIn);
754
+ INLINED_MAKE_SHARED
755
+
756
+ private:
757
+ PROJ_OPAQUE_PRIVATE_DATA
758
+ };
759
+
760
+ // ---------------------------------------------------------------------------
761
+
762
+ class EngineeringDatum;
763
+ /** Shared pointer of EngineeringDatum */
764
+ using EngineeringDatumPtr = std::shared_ptr<EngineeringDatum>;
765
+ /** Non-null shared pointer of EngineeringDatum */
766
+ using EngineeringDatumNNPtr = util::nn<EngineeringDatumPtr>;
767
+
768
+ /** \brief The definition of the origin and orientation of an engineering
769
+ * coordinate reference system.
770
+ *
771
+ * \note The origin can be fixed with respect to the Earth (such as a defined
772
+ * point at a construction site), or be a defined point on a moving vehicle
773
+ * (such as on a ship or satellite), or a defined point of an image.
774
+ *
775
+ * \remark Implements EngineeringDatum from \ref ISO_19111_2019
776
+ */
777
+ class PROJ_GCC_DLL EngineeringDatum final : public Datum {
778
+ public:
779
+ //! @cond Doxygen_Suppress
780
+ PROJ_DLL ~EngineeringDatum() override;
781
+ //! @endcond
782
+
783
+ // non-standard
784
+ PROJ_DLL static EngineeringDatumNNPtr
785
+ create(const util::PropertyMap &properties,
786
+ const util::optional<std::string> &anchor =
787
+ util::optional<std::string>());
788
+
789
+ //! @cond Doxygen_Suppress
790
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
791
+ const override; // throw(io::FormattingException)
792
+
793
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
794
+ const override; // throw(FormattingException)
795
+
796
+ PROJ_INTERNAL bool _isEquivalentTo(
797
+ const util::IComparable *other,
798
+ util::IComparable::Criterion criterion =
799
+ util::IComparable::Criterion::STRICT,
800
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
801
+ //! @endcond
802
+
803
+ protected:
804
+ PROJ_INTERNAL EngineeringDatum();
805
+ INLINED_MAKE_SHARED
806
+
807
+ private:
808
+ PROJ_OPAQUE_PRIVATE_DATA
809
+ };
810
+
811
+ // ---------------------------------------------------------------------------
812
+
813
+ class ParametricDatum;
814
+ /** Shared pointer of ParametricDatum */
815
+ using ParametricDatumPtr = std::shared_ptr<ParametricDatum>;
816
+ /** Non-null shared pointer of ParametricDatum */
817
+ using ParametricDatumNNPtr = util::nn<ParametricDatumPtr>;
818
+
819
+ /** \brief Textual description and/or a set of parameters identifying a
820
+ * particular reference surface used as the origin of a parametric coordinate
821
+ * system, including its position with respect to the Earth.
822
+ *
823
+ * \remark Implements ParametricDatum from \ref ISO_19111_2019
824
+ */
825
+ class PROJ_GCC_DLL ParametricDatum final : public Datum {
826
+ public:
827
+ //! @cond Doxygen_Suppress
828
+ PROJ_DLL ~ParametricDatum() override;
829
+ //! @endcond
830
+
831
+ // non-standard
832
+ PROJ_DLL static ParametricDatumNNPtr
833
+ create(const util::PropertyMap &properties,
834
+ const util::optional<std::string> &anchor =
835
+ util::optional<std::string>());
836
+
837
+ //! @cond Doxygen_Suppress
838
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
839
+ const override; // throw(io::FormattingException)
840
+
841
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
842
+ const override; // throw(FormattingException)
843
+
844
+ PROJ_INTERNAL bool _isEquivalentTo(
845
+ const util::IComparable *other,
846
+ util::IComparable::Criterion criterion =
847
+ util::IComparable::Criterion::STRICT,
848
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
849
+ //! @endcond
850
+
851
+ protected:
852
+ PROJ_INTERNAL ParametricDatum();
853
+ INLINED_MAKE_SHARED
854
+
855
+ private:
856
+ PROJ_OPAQUE_PRIVATE_DATA
857
+ };
858
+
859
+ } // namespace datum
860
+
861
+ NS_PROJ_END
862
+
863
+ #endif // DATUM_HH_INCLUDED