@crossbind/port-proj-win32 0.0.0-bootstrap.0 → 2.0.0-beta.63

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 (126) hide show
  1. package/LICENSE +34 -0
  2. package/README.md +11 -3
  3. package/crossbind.build.js +1 -0
  4. package/crossbind.config.js +8 -0
  5. package/dist/prebuilt/CMakeLists.txt +58 -0
  6. package/dist/prebuilt/win32-arm64-mt-release/crossbind-emccflags.fingerprint +1 -0
  7. package/dist/prebuilt/win32-arm64-mt-release/crossbind-source.fingerprint +1 -0
  8. package/dist/prebuilt/win32-arm64-mt-release/include/geodesic.h +837 -0
  9. package/dist/prebuilt/win32-arm64-mt-release/include/proj/common.hpp +489 -0
  10. package/dist/prebuilt/win32-arm64-mt-release/include/proj/coordinateoperation.hpp +2172 -0
  11. package/dist/prebuilt/win32-arm64-mt-release/include/proj/coordinates.hpp +115 -0
  12. package/dist/prebuilt/win32-arm64-mt-release/include/proj/coordinatesystem.hpp +909 -0
  13. package/dist/prebuilt/win32-arm64-mt-release/include/proj/crs.hpp +1597 -0
  14. package/dist/prebuilt/win32-arm64-mt-release/include/proj/datum.hpp +863 -0
  15. package/dist/prebuilt/win32-arm64-mt-release/include/proj/io.hpp +1431 -0
  16. package/dist/prebuilt/win32-arm64-mt-release/include/proj/metadata.hpp +474 -0
  17. package/dist/prebuilt/win32-arm64-mt-release/include/proj/nn.hpp +385 -0
  18. package/dist/prebuilt/win32-arm64-mt-release/include/proj/util.hpp +781 -0
  19. package/dist/prebuilt/win32-arm64-mt-release/include/proj.h +2318 -0
  20. package/dist/prebuilt/win32-arm64-mt-release/include/proj_constants.h +1050 -0
  21. package/dist/prebuilt/win32-arm64-mt-release/include/proj_experimental.h +52 -0
  22. package/dist/prebuilt/win32-arm64-mt-release/include/proj_symbol_rename.h +318 -0
  23. package/dist/prebuilt/win32-arm64-mt-release/include/projapps_lib.h +68 -0
  24. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj-config-version.cmake +52 -0
  25. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj-config.cmake +71 -0
  26. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj-targets-release.cmake +19 -0
  27. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj-targets.cmake +109 -0
  28. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj4-targets-release.cmake +19 -0
  29. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj/proj4-targets.cmake +109 -0
  30. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj-targets-release.cmake +19 -0
  31. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj-targets.cmake +109 -0
  32. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj4-config-version.cmake +52 -0
  33. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj4-config.cmake +71 -0
  34. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj4-targets-release.cmake +19 -0
  35. package/dist/prebuilt/win32-arm64-mt-release/lib/cmake/proj4/proj4-targets.cmake +109 -0
  36. package/dist/prebuilt/win32-arm64-mt-release/lib/libproj.a +0 -0
  37. package/dist/prebuilt/win32-arm64-mt-release/lib/pkgconfig/proj.pc +14 -0
  38. package/dist/prebuilt/win32-arm64-mt-release/lib.sources +1 -0
  39. package/dist/prebuilt/win32-arm64-mt-release/share/bash-completion/completions/projinfo +51 -0
  40. package/dist/prebuilt/win32-arm64-mt-release/share/doc/proj/AUTHORS.md +33 -0
  41. package/dist/prebuilt/win32-arm64-mt-release/share/doc/proj/COPYING +34 -0
  42. package/dist/prebuilt/win32-arm64-mt-release/share/doc/proj/NEWS.md +3464 -0
  43. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/cct.1 +350 -0
  44. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/cs2cs.1 +516 -0
  45. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/geod.1 +255 -0
  46. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/gie.1 +494 -0
  47. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/proj.1 +318 -0
  48. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/projinfo.1 +855 -0
  49. package/dist/prebuilt/win32-arm64-mt-release/share/man/man1/projsync.1 +223 -0
  50. package/dist/prebuilt/win32-arm64-mt-release/share/proj/CH +22 -0
  51. package/dist/prebuilt/win32-arm64-mt-release/share/proj/GL27 +23 -0
  52. package/dist/prebuilt/win32-arm64-mt-release/share/proj/ITRF2000 +24 -0
  53. package/dist/prebuilt/win32-arm64-mt-release/share/proj/ITRF2008 +94 -0
  54. package/dist/prebuilt/win32-arm64-mt-release/share/proj/ITRF2014 +55 -0
  55. package/dist/prebuilt/win32-arm64-mt-release/share/proj/ITRF2020 +91 -0
  56. package/dist/prebuilt/win32-arm64-mt-release/share/proj/deformation_model.schema.json +582 -0
  57. package/dist/prebuilt/win32-arm64-mt-release/share/proj/nad.lst +142 -0
  58. package/dist/prebuilt/win32-arm64-mt-release/share/proj/nad27 +810 -0
  59. package/dist/prebuilt/win32-arm64-mt-release/share/proj/nad83 +745 -0
  60. package/dist/prebuilt/win32-arm64-mt-release/share/proj/other.extra +53 -0
  61. package/dist/prebuilt/win32-arm64-mt-release/share/proj/proj.db +0 -0
  62. package/dist/prebuilt/win32-arm64-mt-release/share/proj/proj.ini +59 -0
  63. package/dist/prebuilt/win32-arm64-mt-release/share/proj/projjson.schema.json +1174 -0
  64. package/dist/prebuilt/win32-arm64-mt-release/share/proj/triangulation.schema.json +214 -0
  65. package/dist/prebuilt/win32-arm64-mt-release/share/proj/world +214 -0
  66. package/dist/prebuilt/win32-x64-mt-release/crossbind-emccflags.fingerprint +1 -0
  67. package/dist/prebuilt/win32-x64-mt-release/crossbind-source.fingerprint +1 -0
  68. package/dist/prebuilt/win32-x64-mt-release/include/geodesic.h +837 -0
  69. package/dist/prebuilt/win32-x64-mt-release/include/proj/common.hpp +489 -0
  70. package/dist/prebuilt/win32-x64-mt-release/include/proj/coordinateoperation.hpp +2172 -0
  71. package/dist/prebuilt/win32-x64-mt-release/include/proj/coordinates.hpp +115 -0
  72. package/dist/prebuilt/win32-x64-mt-release/include/proj/coordinatesystem.hpp +909 -0
  73. package/dist/prebuilt/win32-x64-mt-release/include/proj/crs.hpp +1597 -0
  74. package/dist/prebuilt/win32-x64-mt-release/include/proj/datum.hpp +863 -0
  75. package/dist/prebuilt/win32-x64-mt-release/include/proj/io.hpp +1431 -0
  76. package/dist/prebuilt/win32-x64-mt-release/include/proj/metadata.hpp +474 -0
  77. package/dist/prebuilt/win32-x64-mt-release/include/proj/nn.hpp +385 -0
  78. package/dist/prebuilt/win32-x64-mt-release/include/proj/util.hpp +781 -0
  79. package/dist/prebuilt/win32-x64-mt-release/include/proj.h +2318 -0
  80. package/dist/prebuilt/win32-x64-mt-release/include/proj_constants.h +1050 -0
  81. package/dist/prebuilt/win32-x64-mt-release/include/proj_experimental.h +52 -0
  82. package/dist/prebuilt/win32-x64-mt-release/include/proj_symbol_rename.h +318 -0
  83. package/dist/prebuilt/win32-x64-mt-release/include/projapps_lib.h +68 -0
  84. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj-config-version.cmake +52 -0
  85. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj-config.cmake +71 -0
  86. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj-targets-release.cmake +19 -0
  87. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj-targets.cmake +109 -0
  88. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj4-targets-release.cmake +19 -0
  89. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj/proj4-targets.cmake +109 -0
  90. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj-targets-release.cmake +19 -0
  91. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj-targets.cmake +109 -0
  92. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj4-config-version.cmake +52 -0
  93. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj4-config.cmake +71 -0
  94. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj4-targets-release.cmake +19 -0
  95. package/dist/prebuilt/win32-x64-mt-release/lib/cmake/proj4/proj4-targets.cmake +109 -0
  96. package/dist/prebuilt/win32-x64-mt-release/lib/libproj.a +0 -0
  97. package/dist/prebuilt/win32-x64-mt-release/lib/pkgconfig/proj.pc +14 -0
  98. package/dist/prebuilt/win32-x64-mt-release/lib.sources +1 -0
  99. package/dist/prebuilt/win32-x64-mt-release/share/bash-completion/completions/projinfo +51 -0
  100. package/dist/prebuilt/win32-x64-mt-release/share/doc/proj/AUTHORS.md +33 -0
  101. package/dist/prebuilt/win32-x64-mt-release/share/doc/proj/COPYING +34 -0
  102. package/dist/prebuilt/win32-x64-mt-release/share/doc/proj/NEWS.md +3464 -0
  103. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/cct.1 +350 -0
  104. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/cs2cs.1 +516 -0
  105. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/geod.1 +255 -0
  106. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/gie.1 +494 -0
  107. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/proj.1 +318 -0
  108. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/projinfo.1 +855 -0
  109. package/dist/prebuilt/win32-x64-mt-release/share/man/man1/projsync.1 +223 -0
  110. package/dist/prebuilt/win32-x64-mt-release/share/proj/CH +22 -0
  111. package/dist/prebuilt/win32-x64-mt-release/share/proj/GL27 +23 -0
  112. package/dist/prebuilt/win32-x64-mt-release/share/proj/ITRF2000 +24 -0
  113. package/dist/prebuilt/win32-x64-mt-release/share/proj/ITRF2008 +94 -0
  114. package/dist/prebuilt/win32-x64-mt-release/share/proj/ITRF2014 +55 -0
  115. package/dist/prebuilt/win32-x64-mt-release/share/proj/ITRF2020 +91 -0
  116. package/dist/prebuilt/win32-x64-mt-release/share/proj/deformation_model.schema.json +582 -0
  117. package/dist/prebuilt/win32-x64-mt-release/share/proj/nad.lst +142 -0
  118. package/dist/prebuilt/win32-x64-mt-release/share/proj/nad27 +810 -0
  119. package/dist/prebuilt/win32-x64-mt-release/share/proj/nad83 +745 -0
  120. package/dist/prebuilt/win32-x64-mt-release/share/proj/other.extra +53 -0
  121. package/dist/prebuilt/win32-x64-mt-release/share/proj/proj.db +0 -0
  122. package/dist/prebuilt/win32-x64-mt-release/share/proj/proj.ini +59 -0
  123. package/dist/prebuilt/win32-x64-mt-release/share/proj/projjson.schema.json +1174 -0
  124. package/dist/prebuilt/win32-x64-mt-release/share/proj/triangulation.schema.json +214 -0
  125. package/dist/prebuilt/win32-x64-mt-release/share/proj/world +214 -0
  126. package/package.json +35 -6
@@ -0,0 +1,909 @@
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 CS_HH_INCLUDED
30
+ #define CS_HH_INCLUDED
31
+
32
+ #include <memory>
33
+ #include <set>
34
+ #include <string>
35
+ #include <vector>
36
+
37
+ #include "common.hpp"
38
+ #include "io.hpp"
39
+ #include "util.hpp"
40
+
41
+ NS_PROJ_START
42
+
43
+ /** osgeo.proj.cs namespace
44
+
45
+ \brief Coordinate systems and their axis.
46
+ */
47
+ namespace cs {
48
+
49
+ // ---------------------------------------------------------------------------
50
+
51
+ /** \brief Exception that can be thrown when an invalid coordinate system is
52
+ * attempted to be constructed.
53
+ *
54
+ * @since 9.9
55
+ */
56
+ class PROJ_GCC_DLL InvalidCoordinateSystem : public util::Exception {
57
+ public:
58
+ //! @cond Doxygen_Suppress
59
+ PROJ_INTERNAL explicit InvalidCoordinateSystem(const char *message);
60
+ PROJ_INTERNAL explicit InvalidCoordinateSystem(const std::string &message);
61
+ PROJ_DLL InvalidCoordinateSystem(const InvalidCoordinateSystem &other);
62
+ PROJ_DLL ~InvalidCoordinateSystem() override;
63
+ //! @endcond
64
+ };
65
+
66
+ // ---------------------------------------------------------------------------
67
+
68
+ /** \brief The direction of positive increase in the coordinate value for a
69
+ * coordinate system axis.
70
+ *
71
+ * \remark Implements AxisDirection from \ref ISO_19111_2019
72
+ */
73
+ class AxisDirection : public util::CodeList {
74
+ public:
75
+ //! @cond Doxygen_Suppress
76
+ PROJ_DLL static const AxisDirection *
77
+ valueOf(const std::string &nameIn) noexcept;
78
+ //! @endcond
79
+
80
+ AxisDirection(const AxisDirection &) = delete;
81
+ AxisDirection &operator=(const AxisDirection &) = delete;
82
+ AxisDirection(AxisDirection &&) = delete;
83
+ AxisDirection &operator=(AxisDirection &&) = delete;
84
+
85
+ PROJ_DLL static const AxisDirection NORTH;
86
+ PROJ_DLL static const AxisDirection NORTH_NORTH_EAST;
87
+ PROJ_DLL static const AxisDirection NORTH_EAST;
88
+ PROJ_DLL static const AxisDirection EAST_NORTH_EAST;
89
+ PROJ_DLL static const AxisDirection EAST;
90
+ PROJ_DLL static const AxisDirection EAST_SOUTH_EAST;
91
+ PROJ_DLL static const AxisDirection SOUTH_EAST;
92
+ PROJ_DLL static const AxisDirection SOUTH_SOUTH_EAST;
93
+ PROJ_DLL static const AxisDirection SOUTH;
94
+ PROJ_DLL static const AxisDirection SOUTH_SOUTH_WEST;
95
+ PROJ_DLL static const AxisDirection SOUTH_WEST;
96
+ PROJ_DLL static const AxisDirection
97
+ WEST_SOUTH_WEST; // note: was forgotten in WKT2-2015
98
+ PROJ_DLL static const AxisDirection WEST;
99
+ PROJ_DLL static const AxisDirection WEST_NORTH_WEST;
100
+ PROJ_DLL static const AxisDirection NORTH_WEST;
101
+ PROJ_DLL static const AxisDirection NORTH_NORTH_WEST;
102
+ PROJ_DLL static const AxisDirection UP;
103
+ PROJ_DLL static const AxisDirection DOWN;
104
+ PROJ_DLL static const AxisDirection GEOCENTRIC_X;
105
+ PROJ_DLL static const AxisDirection GEOCENTRIC_Y;
106
+ PROJ_DLL static const AxisDirection GEOCENTRIC_Z;
107
+ PROJ_DLL static const AxisDirection COLUMN_POSITIVE;
108
+ PROJ_DLL static const AxisDirection COLUMN_NEGATIVE;
109
+ PROJ_DLL static const AxisDirection ROW_POSITIVE;
110
+ PROJ_DLL static const AxisDirection ROW_NEGATIVE;
111
+ PROJ_DLL static const AxisDirection DISPLAY_RIGHT;
112
+ PROJ_DLL static const AxisDirection DISPLAY_LEFT;
113
+ PROJ_DLL static const AxisDirection DISPLAY_UP;
114
+ PROJ_DLL static const AxisDirection DISPLAY_DOWN;
115
+ PROJ_DLL static const AxisDirection FORWARD;
116
+ PROJ_DLL static const AxisDirection AFT;
117
+ PROJ_DLL static const AxisDirection PORT;
118
+ PROJ_DLL static const AxisDirection STARBOARD;
119
+ PROJ_DLL static const AxisDirection CLOCKWISE;
120
+ PROJ_DLL static const AxisDirection COUNTER_CLOCKWISE;
121
+ PROJ_DLL static const AxisDirection TOWARDS;
122
+ PROJ_DLL static const AxisDirection AWAY_FROM;
123
+ PROJ_DLL static const AxisDirection FUTURE;
124
+ PROJ_DLL static const AxisDirection PAST;
125
+ PROJ_DLL static const AxisDirection UNSPECIFIED;
126
+
127
+ private:
128
+ explicit AxisDirection(const std::string &nameIn);
129
+
130
+ static std::map<std::string, const AxisDirection *> registry;
131
+ };
132
+
133
+ // ---------------------------------------------------------------------------
134
+
135
+ /** \brief Meaning of the axis value range specified through minimumValue and
136
+ * maximumValue
137
+ *
138
+ * \remark Implements RangeMeaning from \ref ISO_19111_2019
139
+ * \since 9.2
140
+ */
141
+ class RangeMeaning : public util::CodeList {
142
+ public:
143
+ //! @cond Doxygen_Suppress
144
+ PROJ_DLL static const RangeMeaning *
145
+ valueOf(const std::string &nameIn) noexcept;
146
+ //! @endcond
147
+
148
+ PROJ_DLL static const RangeMeaning EXACT;
149
+ PROJ_DLL static const RangeMeaning WRAPAROUND;
150
+
151
+ protected:
152
+ friend class util::optional<RangeMeaning>;
153
+ RangeMeaning();
154
+
155
+ private:
156
+ explicit RangeMeaning(const std::string &nameIn);
157
+
158
+ static std::map<std::string, const RangeMeaning *> registry;
159
+ };
160
+
161
+ // ---------------------------------------------------------------------------
162
+
163
+ class Meridian;
164
+ /** Shared pointer of Meridian. */
165
+ using MeridianPtr = std::shared_ptr<Meridian>;
166
+ /** Non-null shared pointer of Meridian. */
167
+ using MeridianNNPtr = util::nn<MeridianPtr>;
168
+
169
+ /** \brief The meridian that the axis follows from the pole, for a coordinate
170
+ * reference system centered on a pole.
171
+ *
172
+ * \note There is no modelling for this concept in \ref ISO_19111_2019
173
+ *
174
+ * \remark Implements MERIDIAN from \ref WKT2
175
+ */
176
+ class PROJ_GCC_DLL Meridian : public common::IdentifiedObject,
177
+ public io::IJSONExportable {
178
+ public:
179
+ //! @cond Doxygen_Suppress
180
+ PROJ_DLL ~Meridian() override;
181
+ //! @endcond
182
+
183
+ PROJ_DLL const common::Angle &longitude() PROJ_PURE_DECL;
184
+
185
+ // non-standard
186
+ PROJ_DLL static MeridianNNPtr create(const common::Angle &longitudeIn);
187
+
188
+ //! @cond Doxygen_Suppress
189
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
190
+ const override; // throw(io::FormattingException)
191
+
192
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
193
+ const override; // throw(FormattingException)
194
+ //! @endcond
195
+
196
+ protected:
197
+ #ifdef DOXYGEN_ENABLED
198
+ Angle angle_;
199
+ #endif
200
+
201
+ PROJ_INTERNAL explicit Meridian(const common::Angle &longitudeIn);
202
+ INLINED_MAKE_SHARED
203
+
204
+ private:
205
+ PROJ_OPAQUE_PRIVATE_DATA
206
+ Meridian(const Meridian &other) = delete;
207
+ Meridian &operator=(const Meridian &other) = delete;
208
+ };
209
+
210
+ // ---------------------------------------------------------------------------
211
+
212
+ class CoordinateSystemAxis;
213
+ /** Shared pointer of CoordinateSystemAxis. */
214
+ using CoordinateSystemAxisPtr = std::shared_ptr<CoordinateSystemAxis>;
215
+ /** Non-null shared pointer of CoordinateSystemAxis. */
216
+ using CoordinateSystemAxisNNPtr = util::nn<CoordinateSystemAxisPtr>;
217
+
218
+ /** \brief The definition of a coordinate system axis.
219
+ *
220
+ * \remark Implements CoordinateSystemAxis from \ref ISO_19111_2019
221
+ */
222
+ class PROJ_GCC_DLL CoordinateSystemAxis final : public common::IdentifiedObject,
223
+ public io::IJSONExportable {
224
+ public:
225
+ //! @cond Doxygen_Suppress
226
+ PROJ_DLL ~CoordinateSystemAxis() override;
227
+ //! @endcond
228
+
229
+ PROJ_DLL const std::string &abbreviation() PROJ_PURE_DECL;
230
+ PROJ_DLL const AxisDirection &direction() PROJ_PURE_DECL;
231
+ PROJ_DLL const common::UnitOfMeasure &unit() PROJ_PURE_DECL;
232
+ PROJ_DLL const util::optional<double> &minimumValue() PROJ_PURE_DECL;
233
+ PROJ_DLL const util::optional<double> &maximumValue() PROJ_PURE_DECL;
234
+ PROJ_DLL const util::optional<RangeMeaning> &rangeMeaning() PROJ_PURE_DECL;
235
+ PROJ_DLL const MeridianPtr &meridian() PROJ_PURE_DECL;
236
+
237
+ // Non-standard
238
+ PROJ_DLL static CoordinateSystemAxisNNPtr
239
+ create(const util::PropertyMap &properties,
240
+ const std::string &abbreviationIn, const AxisDirection &directionIn,
241
+ const common::UnitOfMeasure &unitIn,
242
+ const MeridianPtr &meridianIn = nullptr);
243
+
244
+ PROJ_DLL static CoordinateSystemAxisNNPtr
245
+ create(const util::PropertyMap &properties,
246
+ const std::string &abbreviationIn, const AxisDirection &directionIn,
247
+ const common::UnitOfMeasure &unitIn,
248
+ const util::optional<double> &minimumValueIn,
249
+ const util::optional<double> &maximumValueIn,
250
+ const util::optional<RangeMeaning> &rangeMeaningIn,
251
+ const MeridianPtr &meridianIn = nullptr);
252
+
253
+ PROJ_PRIVATE :
254
+
255
+ //! @cond Doxygen_Suppress
256
+ PROJ_INTERNAL bool
257
+ _isEquivalentTo(
258
+ const util::IComparable *other,
259
+ util::IComparable::Criterion criterion =
260
+ util::IComparable::Criterion::STRICT,
261
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
262
+
263
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter, int order,
264
+ bool disableAbbrev) const;
265
+
266
+ PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter)
267
+ const override; // throw(io::FormattingException)
268
+
269
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
270
+ const override; // throw(FormattingException)
271
+
272
+ PROJ_INTERNAL static std::string normalizeAxisName(const std::string &str);
273
+
274
+ PROJ_INTERNAL static CoordinateSystemAxisNNPtr
275
+ createLAT_NORTH(const common::UnitOfMeasure &unit);
276
+ PROJ_INTERNAL static CoordinateSystemAxisNNPtr
277
+ createLONG_EAST(const common::UnitOfMeasure &unit);
278
+
279
+ PROJ_INTERNAL CoordinateSystemAxisNNPtr
280
+ alterUnit(const common::UnitOfMeasure &newUnit) const;
281
+
282
+ //! @endcond
283
+
284
+ private:
285
+ PROJ_OPAQUE_PRIVATE_DATA
286
+ CoordinateSystemAxis(const CoordinateSystemAxis &other) = delete;
287
+ CoordinateSystemAxis &operator=(const CoordinateSystemAxis &other) = delete;
288
+
289
+ PROJ_INTERNAL CoordinateSystemAxis();
290
+ /* cppcheck-suppress unusedPrivateFunction */
291
+ INLINED_MAKE_SHARED
292
+ };
293
+
294
+ // ---------------------------------------------------------------------------
295
+
296
+ /** \brief Abstract class modelling a coordinate system (CS)
297
+ *
298
+ * A CS is the non-repeating sequence of coordinate system axes that spans a
299
+ * given coordinate space. A CS is derived from a set of mathematical rules for
300
+ * specifying how coordinates in a given space are to be assigned to points.
301
+ * The coordinate values in a coordinate tuple shall be recorded in the order
302
+ * in which the coordinate system axes associations are recorded.
303
+ *
304
+ * \remark Implements CoordinateSystem from \ref ISO_19111_2019
305
+ */
306
+ class PROJ_GCC_DLL CoordinateSystem : public common::IdentifiedObject,
307
+ public io::IJSONExportable {
308
+ public:
309
+ //! @cond Doxygen_Suppress
310
+ PROJ_DLL ~CoordinateSystem() override;
311
+ //! @endcond
312
+
313
+ PROJ_DLL const std::vector<CoordinateSystemAxisNNPtr> &
314
+ axisList() PROJ_PURE_DECL;
315
+
316
+ PROJ_PRIVATE :
317
+
318
+ //! @cond Doxygen_Suppress
319
+ PROJ_INTERNAL void
320
+ _exportToWKT(io::WKTFormatter *formatter)
321
+ const override; // throw(io::FormattingException)
322
+
323
+ PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter)
324
+ const override; // throw(FormattingException)
325
+
326
+ PROJ_INTERNAL virtual std::string getWKT2Type(bool) const = 0;
327
+
328
+ PROJ_INTERNAL bool _isEquivalentTo(
329
+ const util::IComparable *other,
330
+ util::IComparable::Criterion criterion =
331
+ util::IComparable::Criterion::STRICT,
332
+ const io::DatabaseContextPtr &dbContext = nullptr) const override;
333
+ //! @endcond
334
+
335
+ protected:
336
+ PROJ_INTERNAL explicit CoordinateSystem(
337
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
338
+
339
+ private:
340
+ PROJ_OPAQUE_PRIVATE_DATA
341
+ CoordinateSystem(const CoordinateSystem &other) = delete;
342
+ CoordinateSystem &operator=(const CoordinateSystem &other) = delete;
343
+ };
344
+
345
+ /** Shared pointer of CoordinateSystem. */
346
+ using CoordinateSystemPtr = std::shared_ptr<CoordinateSystem>;
347
+ /** Non-null shared pointer of CoordinateSystem. */
348
+ using CoordinateSystemNNPtr = util::nn<CoordinateSystemPtr>;
349
+
350
+ // ---------------------------------------------------------------------------
351
+
352
+ class SphericalCS;
353
+ /** Shared pointer of SphericalCS. */
354
+ using SphericalCSPtr = std::shared_ptr<SphericalCS>;
355
+ /** Non-null shared pointer of SphericalCS. */
356
+ using SphericalCSNNPtr = util::nn<SphericalCSPtr>;
357
+
358
+ /** \brief A three-dimensional coordinate system in Euclidean space with one
359
+ * distance measured from the origin and two angular coordinates.
360
+ *
361
+ * Not to be confused with an ellipsoidal coordinate system based on an
362
+ * ellipsoid "degenerated" into a sphere. A SphericalCS shall have three
363
+ * axis associations.
364
+ *
365
+ * \remark Implements SphericalCS from \ref ISO_19111_2019
366
+ */
367
+ class PROJ_GCC_DLL SphericalCS final : public CoordinateSystem {
368
+ public:
369
+ //! @cond Doxygen_Suppress
370
+ PROJ_DLL ~SphericalCS() override;
371
+ //! @endcond
372
+
373
+ // non-standard
374
+
375
+ PROJ_DLL static SphericalCSNNPtr
376
+ create(const util::PropertyMap &properties,
377
+ const CoordinateSystemAxisNNPtr &axis1,
378
+ const CoordinateSystemAxisNNPtr &axis2,
379
+ const CoordinateSystemAxisNNPtr &axis3);
380
+
381
+ PROJ_DLL static SphericalCSNNPtr
382
+ create(const util::PropertyMap &properties,
383
+ const CoordinateSystemAxisNNPtr &axis1,
384
+ const CoordinateSystemAxisNNPtr &axis2);
385
+
386
+ /** Value of getWKT2Type() */
387
+ static constexpr const char *WKT2_TYPE = "spherical";
388
+
389
+ protected:
390
+ PROJ_INTERNAL explicit SphericalCS(
391
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
392
+ INLINED_MAKE_SHARED
393
+
394
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
395
+ return WKT2_TYPE;
396
+ }
397
+
398
+ private:
399
+ SphericalCS(const SphericalCS &other) = delete;
400
+ };
401
+
402
+ // ---------------------------------------------------------------------------
403
+
404
+ class EllipsoidalCS;
405
+ /** Shared pointer of EllipsoidalCS. */
406
+ using EllipsoidalCSPtr = std::shared_ptr<EllipsoidalCS>;
407
+ /** Non-null shared pointer of EllipsoidalCS. */
408
+ using EllipsoidalCSNNPtr = util::nn<EllipsoidalCSPtr>;
409
+
410
+ /** \brief A two- or three-dimensional coordinate system in which position is
411
+ * specified by geodetic latitude, geodetic longitude, and (in the
412
+ * three-dimensional case) ellipsoidal height.
413
+ *
414
+ * An EllipsoidalCS shall have two or three associations.
415
+ *
416
+ * \remark Implements EllipsoidalCS from \ref ISO_19111_2019
417
+ */
418
+ class PROJ_GCC_DLL EllipsoidalCS final : public CoordinateSystem {
419
+ public:
420
+ //! @cond Doxygen_Suppress
421
+ PROJ_DLL ~EllipsoidalCS() override;
422
+ //! @endcond
423
+
424
+ // non-standard
425
+ PROJ_DLL static EllipsoidalCSNNPtr
426
+ create(const util::PropertyMap &properties,
427
+ const CoordinateSystemAxisNNPtr &axis1,
428
+ const CoordinateSystemAxisNNPtr &axis2);
429
+
430
+ PROJ_DLL static EllipsoidalCSNNPtr
431
+ create(const util::PropertyMap &properties,
432
+ const CoordinateSystemAxisNNPtr &axis1,
433
+ const CoordinateSystemAxisNNPtr &axis2,
434
+ const CoordinateSystemAxisNNPtr &axis3);
435
+
436
+ PROJ_DLL static EllipsoidalCSNNPtr
437
+ createLatitudeLongitude(const common::UnitOfMeasure &unit);
438
+
439
+ PROJ_DLL static EllipsoidalCSNNPtr createLatitudeLongitudeEllipsoidalHeight(
440
+ const common::UnitOfMeasure &angularUnit,
441
+ const common::UnitOfMeasure &linearUnit);
442
+
443
+ PROJ_DLL static EllipsoidalCSNNPtr
444
+ createLongitudeLatitude(const common::UnitOfMeasure &unit);
445
+
446
+ PROJ_DLL static EllipsoidalCSNNPtr createLongitudeLatitudeEllipsoidalHeight(
447
+ const common::UnitOfMeasure &angularUnit,
448
+ const common::UnitOfMeasure &linearUnit);
449
+
450
+ /** Value of getWKT2Type() */
451
+ static constexpr const char *WKT2_TYPE = "ellipsoidal";
452
+
453
+ //! @cond Doxygen_Suppress
454
+
455
+ /** \brief Typical axis order. */
456
+ enum class AxisOrder {
457
+ /** Latitude(North), Longitude(East) */
458
+ LAT_NORTH_LONG_EAST,
459
+ /** Latitude(North), Longitude(East), Height(up) */
460
+ LAT_NORTH_LONG_EAST_HEIGHT_UP,
461
+ /** Longitude(East), Latitude(North) */
462
+ LONG_EAST_LAT_NORTH,
463
+ /** Longitude(East), Latitude(North), Height(up) */
464
+ LONG_EAST_LAT_NORTH_HEIGHT_UP,
465
+ /** Other axis order. */
466
+ OTHER
467
+ };
468
+
469
+ PROJ_INTERNAL AxisOrder axisOrder() const;
470
+
471
+ PROJ_INTERNAL EllipsoidalCSNNPtr
472
+ alterAngularUnit(const common::UnitOfMeasure &angularUnit) const;
473
+
474
+ PROJ_INTERNAL EllipsoidalCSNNPtr
475
+ alterLinearUnit(const common::UnitOfMeasure &linearUnit) const;
476
+
477
+ //! @endcond
478
+
479
+ protected:
480
+ PROJ_INTERNAL explicit EllipsoidalCS(
481
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
482
+ INLINED_MAKE_SHARED
483
+
484
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
485
+ return WKT2_TYPE;
486
+ }
487
+
488
+ protected:
489
+ EllipsoidalCS(const EllipsoidalCS &other) = delete;
490
+ };
491
+
492
+ // ---------------------------------------------------------------------------
493
+
494
+ class VerticalCS;
495
+ /** Shared pointer of VerticalCS. */
496
+ using VerticalCSPtr = std::shared_ptr<VerticalCS>;
497
+ /** Non-null shared pointer of VerticalCS. */
498
+ using VerticalCSNNPtr = util::nn<VerticalCSPtr>;
499
+
500
+ /** \brief A one-dimensional coordinate system used to record the heights or
501
+ * depths of points.
502
+ *
503
+ * Such a coordinate system is usually dependent on the Earth's gravity field.
504
+ * A VerticalCS shall have one axis association.
505
+ *
506
+ * \remark Implements VerticalCS from \ref ISO_19111_2019
507
+ */
508
+ class PROJ_GCC_DLL VerticalCS final : public CoordinateSystem {
509
+ public:
510
+ //! @cond Doxygen_Suppress
511
+ PROJ_DLL ~VerticalCS() override;
512
+ //! @endcond
513
+
514
+ PROJ_DLL static VerticalCSNNPtr
515
+ create(const util::PropertyMap &properties,
516
+ const CoordinateSystemAxisNNPtr &axis);
517
+
518
+ PROJ_DLL static VerticalCSNNPtr
519
+ createGravityRelatedHeight(const common::UnitOfMeasure &unit);
520
+
521
+ /** Value of getWKT2Type() */
522
+ static constexpr const char *WKT2_TYPE = "vertical";
523
+
524
+ PROJ_PRIVATE :
525
+ //! @cond Doxygen_Suppress
526
+ PROJ_INTERNAL VerticalCSNNPtr
527
+ alterUnit(const common::UnitOfMeasure &unit) const;
528
+
529
+ //! @endcond
530
+
531
+ protected:
532
+ PROJ_INTERNAL explicit VerticalCS(const CoordinateSystemAxisNNPtr &axisIn);
533
+ INLINED_MAKE_SHARED
534
+
535
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
536
+ return WKT2_TYPE;
537
+ }
538
+
539
+ private:
540
+ VerticalCS(const VerticalCS &other) = delete;
541
+ };
542
+
543
+ // ---------------------------------------------------------------------------
544
+
545
+ class CartesianCS;
546
+ /** Shared pointer of CartesianCS. */
547
+ using CartesianCSPtr = std::shared_ptr<CartesianCS>;
548
+ /** Non-null shared pointer of CartesianCS. */
549
+ using CartesianCSNNPtr = util::nn<CartesianCSPtr>;
550
+
551
+ /** \brief A two- or three-dimensional coordinate system in Euclidean space
552
+ * with orthogonal straight axes.
553
+ *
554
+ * All axes shall have the same length unit. A CartesianCS shall have two or
555
+ * three axis associations; the number of associations shall equal the
556
+ * dimension of the CS.
557
+ *
558
+ * \remark Implements CartesianCS from \ref ISO_19111_2019
559
+ */
560
+ class PROJ_GCC_DLL CartesianCS final : public CoordinateSystem {
561
+ public:
562
+ //! @cond Doxygen_Suppress
563
+ PROJ_DLL ~CartesianCS() override;
564
+ //! @endcond
565
+
566
+ PROJ_DLL static CartesianCSNNPtr
567
+ create(const util::PropertyMap &properties,
568
+ const CoordinateSystemAxisNNPtr &axis1,
569
+ const CoordinateSystemAxisNNPtr &axis2, bool enforceSameUnit = true);
570
+ PROJ_DLL static CartesianCSNNPtr
571
+ create(const util::PropertyMap &properties,
572
+ const CoordinateSystemAxisNNPtr &axis1,
573
+ const CoordinateSystemAxisNNPtr &axis2,
574
+ const CoordinateSystemAxisNNPtr &axis3, bool enforceSameUnit = true);
575
+
576
+ PROJ_DLL static CartesianCSNNPtr
577
+ createEastingNorthing(const common::UnitOfMeasure &unit);
578
+
579
+ PROJ_DLL static CartesianCSNNPtr
580
+ createNorthingEasting(const common::UnitOfMeasure &unit);
581
+
582
+ PROJ_DLL static CartesianCSNNPtr
583
+ createNorthPoleEastingSouthNorthingSouth(const common::UnitOfMeasure &unit);
584
+
585
+ PROJ_DLL static CartesianCSNNPtr
586
+ createSouthPoleEastingNorthNorthingNorth(const common::UnitOfMeasure &unit);
587
+
588
+ PROJ_DLL static CartesianCSNNPtr
589
+ createWestingSouthing(const common::UnitOfMeasure &unit);
590
+
591
+ PROJ_DLL static CartesianCSNNPtr
592
+ createGeocentric(const common::UnitOfMeasure &unit);
593
+
594
+ /** Value of getWKT2Type() */
595
+ static constexpr const char *WKT2_TYPE =
596
+ "Cartesian"; // uppercase is intended
597
+
598
+ PROJ_PRIVATE :
599
+ //! @cond Doxygen_Suppress
600
+ PROJ_INTERNAL CartesianCSNNPtr
601
+ alterUnit(const common::UnitOfMeasure &unit) const;
602
+
603
+ //! @endcond
604
+
605
+ protected:
606
+ PROJ_INTERNAL explicit CartesianCS(
607
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
608
+ INLINED_MAKE_SHARED
609
+
610
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
611
+ return WKT2_TYPE;
612
+ }
613
+
614
+ private:
615
+ CartesianCS(const CartesianCS &other) = delete;
616
+ };
617
+
618
+ // ---------------------------------------------------------------------------
619
+
620
+ class AffineCS;
621
+ /** Shared pointer of AffineCS. */
622
+ using AffineCSPtr = std::shared_ptr<AffineCS>;
623
+ /** Non-null shared pointer of AffineCS. */
624
+ using AffineCSNNPtr = util::nn<AffineCSPtr>;
625
+
626
+ /** \brief A two- or three-dimensional coordinate system in Euclidean space
627
+ * with straight axes that are not necessarily orthogonal.
628
+ *
629
+ * \remark Implements AffineCS from \ref ISO_19111_2019
630
+ * \since 9.2
631
+ */
632
+ class PROJ_GCC_DLL AffineCS final : public CoordinateSystem {
633
+ public:
634
+ //! @cond Doxygen_Suppress
635
+ PROJ_DLL ~AffineCS() override;
636
+ //! @endcond
637
+
638
+ /** Value of getWKT2Type() */
639
+ static constexpr const char *WKT2_TYPE = "affine";
640
+
641
+ PROJ_DLL static AffineCSNNPtr
642
+ create(const util::PropertyMap &properties,
643
+ const CoordinateSystemAxisNNPtr &axis1,
644
+ const CoordinateSystemAxisNNPtr &axis2);
645
+ PROJ_DLL static AffineCSNNPtr
646
+ create(const util::PropertyMap &properties,
647
+ const CoordinateSystemAxisNNPtr &axis1,
648
+ const CoordinateSystemAxisNNPtr &axis2,
649
+ const CoordinateSystemAxisNNPtr &axis3);
650
+
651
+ PROJ_PRIVATE :
652
+ //! @cond Doxygen_Suppress
653
+ PROJ_INTERNAL AffineCSNNPtr
654
+ alterUnit(const common::UnitOfMeasure &unit) const;
655
+
656
+ //! @endcond
657
+
658
+ protected:
659
+ PROJ_INTERNAL explicit AffineCS(
660
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
661
+ INLINED_MAKE_SHARED
662
+
663
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
664
+ return WKT2_TYPE;
665
+ }
666
+
667
+ private:
668
+ AffineCS(const AffineCS &other) = delete;
669
+ };
670
+
671
+ // ---------------------------------------------------------------------------
672
+
673
+ class OrdinalCS;
674
+ /** Shared pointer of OrdinalCS. */
675
+ using OrdinalCSPtr = std::shared_ptr<OrdinalCS>;
676
+ /** Non-null shared pointer of OrdinalCS. */
677
+ using OrdinalCSNNPtr = util::nn<OrdinalCSPtr>;
678
+
679
+ /** \brief n-dimensional coordinate system in which every axis uses integers.
680
+ *
681
+ * The number of associations shall equal the
682
+ * dimension of the CS.
683
+ *
684
+ * \remark Implements OrdinalCS from \ref ISO_19111_2019
685
+ */
686
+ class PROJ_GCC_DLL OrdinalCS final : public CoordinateSystem {
687
+ public:
688
+ //! @cond Doxygen_Suppress
689
+ PROJ_DLL ~OrdinalCS() override;
690
+ //! @endcond
691
+
692
+ PROJ_DLL static OrdinalCSNNPtr
693
+ create(const util::PropertyMap &properties,
694
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
695
+
696
+ /** Value of getWKT2Type() */
697
+ static constexpr const char *WKT2_TYPE = "ordinal";
698
+
699
+ protected:
700
+ PROJ_INTERNAL explicit OrdinalCS(
701
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
702
+ INLINED_MAKE_SHARED
703
+
704
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
705
+ return WKT2_TYPE;
706
+ }
707
+
708
+ private:
709
+ OrdinalCS(const OrdinalCS &other) = delete;
710
+ };
711
+
712
+ // ---------------------------------------------------------------------------
713
+
714
+ class ParametricCS;
715
+ /** Shared pointer of ParametricCS. */
716
+ using ParametricCSPtr = std::shared_ptr<ParametricCS>;
717
+ /** Non-null shared pointer of ParametricCS. */
718
+ using ParametricCSNNPtr = util::nn<ParametricCSPtr>;
719
+
720
+ /** \brief one-dimensional coordinate reference system which uses parameter
721
+ * values or functions that may vary monotonically with height.
722
+ *
723
+ * \remark Implements ParametricCS from \ref ISO_19111_2019
724
+ */
725
+ class PROJ_GCC_DLL ParametricCS final : public CoordinateSystem {
726
+ public:
727
+ //! @cond Doxygen_Suppress
728
+ PROJ_DLL ~ParametricCS() override;
729
+ //! @endcond
730
+
731
+ PROJ_DLL static ParametricCSNNPtr
732
+ create(const util::PropertyMap &properties,
733
+ const CoordinateSystemAxisNNPtr &axisIn);
734
+
735
+ /** Value of getWKT2Type() */
736
+ static constexpr const char *WKT2_TYPE = "parametric";
737
+
738
+ protected:
739
+ PROJ_INTERNAL explicit ParametricCS(
740
+ const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
741
+ INLINED_MAKE_SHARED
742
+
743
+ PROJ_INTERNAL std::string getWKT2Type(bool) const override {
744
+ return WKT2_TYPE;
745
+ }
746
+
747
+ private:
748
+ ParametricCS(const ParametricCS &other) = delete;
749
+ };
750
+
751
+ // ---------------------------------------------------------------------------
752
+
753
+ class TemporalCS;
754
+ /** Shared pointer of TemporalCS. */
755
+ using TemporalCSPtr = std::shared_ptr<TemporalCS>;
756
+ /** Non-null shared pointer of TemporalCS. */
757
+ using TemporalCSNNPtr = util::nn<TemporalCSPtr>;
758
+
759
+ /** \brief (Abstract class) A one-dimensional coordinate system used to record
760
+ * time.
761
+ *
762
+ * A TemporalCS shall have one axis association.
763
+ *
764
+ * \remark Implements TemporalCS from \ref ISO_19111_2019
765
+ */
766
+ class PROJ_GCC_DLL TemporalCS : public CoordinateSystem {
767
+ public:
768
+ //! @cond Doxygen_Suppress
769
+ PROJ_DLL ~TemporalCS() override;
770
+ //! @endcond
771
+
772
+ /** WKT2:2015 type */
773
+ static constexpr const char *WKT2_2015_TYPE = "temporal";
774
+
775
+ protected:
776
+ PROJ_INTERNAL explicit TemporalCS(const CoordinateSystemAxisNNPtr &axis);
777
+ INLINED_MAKE_SHARED
778
+
779
+ PROJ_INTERNAL std::string
780
+ getWKT2Type(bool use2019Keywords) const override = 0;
781
+
782
+ private:
783
+ TemporalCS(const TemporalCS &other) = delete;
784
+ };
785
+
786
+ // ---------------------------------------------------------------------------
787
+
788
+ class DateTimeTemporalCS;
789
+ /** Shared pointer of DateTimeTemporalCS. */
790
+ using DateTimeTemporalCSPtr = std::shared_ptr<DateTimeTemporalCS>;
791
+ /** Non-null shared pointer of DateTimeTemporalCS. */
792
+ using DateTimeTemporalCSNNPtr = util::nn<DateTimeTemporalCSPtr>;
793
+
794
+ /** \brief A one-dimensional coordinate system used to record time in dateTime
795
+ * representation as defined in ISO 8601.
796
+ *
797
+ * A DateTimeTemporalCS shall have one axis association. It does not use
798
+ * axisUnitID; the temporal quantities are defined through the ISO 8601
799
+ * representation.
800
+ *
801
+ * \remark Implements DateTimeTemporalCS from \ref ISO_19111_2019
802
+ */
803
+ class PROJ_GCC_DLL DateTimeTemporalCS final : public TemporalCS {
804
+ public:
805
+ //! @cond Doxygen_Suppress
806
+ PROJ_DLL ~DateTimeTemporalCS() override;
807
+ //! @endcond
808
+
809
+ PROJ_DLL static DateTimeTemporalCSNNPtr
810
+ create(const util::PropertyMap &properties,
811
+ const CoordinateSystemAxisNNPtr &axis);
812
+
813
+ /** WKT2:2019 type */
814
+ static constexpr const char *WKT2_2019_TYPE = "TemporalDateTime";
815
+
816
+ protected:
817
+ PROJ_INTERNAL explicit DateTimeTemporalCS(
818
+ const CoordinateSystemAxisNNPtr &axis);
819
+ INLINED_MAKE_SHARED
820
+
821
+ PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override;
822
+
823
+ private:
824
+ DateTimeTemporalCS(const DateTimeTemporalCS &other) = delete;
825
+ };
826
+
827
+ // ---------------------------------------------------------------------------
828
+
829
+ class TemporalCountCS;
830
+ /** Shared pointer of TemporalCountCS. */
831
+ using TemporalCountCSPtr = std::shared_ptr<TemporalCountCS>;
832
+ /** Non-null shared pointer of TemporalCountCS. */
833
+ using TemporalCountCSNNPtr = util::nn<TemporalCountCSPtr>;
834
+
835
+ /** \brief A one-dimensional coordinate system used to record time as an
836
+ * integer count.
837
+ *
838
+ * A TemporalCountCS shall have one axis association.
839
+ *
840
+ * \remark Implements TemporalCountCS from \ref ISO_19111_2019
841
+ */
842
+ class PROJ_GCC_DLL TemporalCountCS final : public TemporalCS {
843
+ public:
844
+ //! @cond Doxygen_Suppress
845
+ PROJ_DLL ~TemporalCountCS() override;
846
+ //! @endcond
847
+
848
+ PROJ_DLL static TemporalCountCSNNPtr
849
+ create(const util::PropertyMap &properties,
850
+ const CoordinateSystemAxisNNPtr &axis);
851
+
852
+ /** WKT2:2019 type */
853
+ static constexpr const char *WKT2_2019_TYPE = "TemporalCount";
854
+
855
+ protected:
856
+ PROJ_INTERNAL explicit TemporalCountCS(
857
+ const CoordinateSystemAxisNNPtr &axis);
858
+ INLINED_MAKE_SHARED
859
+
860
+ PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override;
861
+
862
+ private:
863
+ TemporalCountCS(const TemporalCountCS &other) = delete;
864
+ };
865
+
866
+ // ---------------------------------------------------------------------------
867
+
868
+ class TemporalMeasureCS;
869
+ /** Shared pointer of TemporalMeasureCS. */
870
+ using TemporalMeasureCSPtr = std::shared_ptr<TemporalMeasureCS>;
871
+ /** Non-null shared pointer of TemporalMeasureCS. */
872
+ using TemporalMeasureCSNNPtr = util::nn<TemporalMeasureCSPtr>;
873
+
874
+ /** \brief A one-dimensional coordinate system used to record a time as a
875
+ * real number.
876
+ *
877
+ * A TemporalMeasureCS shall have one axis association.
878
+ *
879
+ * \remark Implements TemporalMeasureCS from \ref ISO_19111_2019
880
+ */
881
+ class PROJ_GCC_DLL TemporalMeasureCS final : public TemporalCS {
882
+ public:
883
+ //! @cond Doxygen_Suppress
884
+ PROJ_DLL ~TemporalMeasureCS() override;
885
+ //! @endcond
886
+
887
+ PROJ_DLL static TemporalMeasureCSNNPtr
888
+ create(const util::PropertyMap &properties,
889
+ const CoordinateSystemAxisNNPtr &axis);
890
+
891
+ /** WKT2:2019 type */
892
+ static constexpr const char *WKT2_2019_TYPE = "TemporalMeasure";
893
+
894
+ protected:
895
+ PROJ_INTERNAL explicit TemporalMeasureCS(
896
+ const CoordinateSystemAxisNNPtr &axis);
897
+ INLINED_MAKE_SHARED
898
+
899
+ PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override;
900
+
901
+ private:
902
+ TemporalMeasureCS(const TemporalMeasureCS &other) = delete;
903
+ };
904
+
905
+ } // namespace cs
906
+
907
+ NS_PROJ_END
908
+
909
+ #endif // CS_HH_INCLUDED