PROJ C++ API
coordinatesystem.hpp
1 /******************************************************************************
2  *
3  * Project: PROJ
4  * Purpose: ISO19111:2018 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 
47 namespace cs {
48 
49 // ---------------------------------------------------------------------------
50 
56 class AxisDirection : public util::CodeList {
57  public:
59  PROJ_DLL static const AxisDirection *
60  valueOf(const std::string &nameIn) noexcept;
62 
63  PROJ_DLL static const AxisDirection NORTH;
64  PROJ_DLL static const AxisDirection NORTH_NORTH_EAST;
65  PROJ_DLL static const AxisDirection NORTH_EAST;
66  PROJ_DLL static const AxisDirection EAST_NORTH_EAST;
67  PROJ_DLL static const AxisDirection EAST;
68  PROJ_DLL static const AxisDirection EAST_SOUTH_EAST;
69  PROJ_DLL static const AxisDirection SOUTH_EAST;
70  PROJ_DLL static const AxisDirection SOUTH_SOUTH_EAST;
71  PROJ_DLL static const AxisDirection SOUTH;
72  PROJ_DLL static const AxisDirection SOUTH_SOUTH_WEST;
73  PROJ_DLL static const AxisDirection SOUTH_WEST;
74  PROJ_DLL static const AxisDirection
75  WEST_SOUTH_WEST; // note: was forgotten in WKT2-2015
76  PROJ_DLL static const AxisDirection WEST;
77  PROJ_DLL static const AxisDirection WEST_NORTH_WEST;
78  PROJ_DLL static const AxisDirection NORTH_WEST;
79  PROJ_DLL static const AxisDirection NORTH_NORTH_WEST;
80  PROJ_DLL static const AxisDirection UP;
81  PROJ_DLL static const AxisDirection DOWN;
82  PROJ_DLL static const AxisDirection GEOCENTRIC_X;
83  PROJ_DLL static const AxisDirection GEOCENTRIC_Y;
84  PROJ_DLL static const AxisDirection GEOCENTRIC_Z;
85  PROJ_DLL static const AxisDirection COLUMN_POSITIVE;
86  PROJ_DLL static const AxisDirection COLUMN_NEGATIVE;
87  PROJ_DLL static const AxisDirection ROW_POSITIVE;
88  PROJ_DLL static const AxisDirection ROW_NEGATIVE;
89  PROJ_DLL static const AxisDirection DISPLAY_RIGHT;
90  PROJ_DLL static const AxisDirection DISPLAY_LEFT;
91  PROJ_DLL static const AxisDirection DISPLAY_UP;
92  PROJ_DLL static const AxisDirection DISPLAY_DOWN;
93  PROJ_DLL static const AxisDirection FORWARD;
94  PROJ_DLL static const AxisDirection AFT;
95  PROJ_DLL static const AxisDirection PORT;
96  PROJ_DLL static const AxisDirection STARBOARD;
97  PROJ_DLL static const AxisDirection CLOCKWISE;
98  PROJ_DLL static const AxisDirection COUNTER_CLOCKWISE;
99  PROJ_DLL static const AxisDirection TOWARDS;
100  PROJ_DLL static const AxisDirection AWAY_FROM;
101  PROJ_DLL static const AxisDirection FUTURE;
102  PROJ_DLL static const AxisDirection PAST;
103  PROJ_DLL static const AxisDirection UNSPECIFIED;
104 
105  private:
106  explicit AxisDirection(const std::string &nameIn);
107 
108  static std::map<std::string, const AxisDirection *> registry;
109 };
110 
111 // ---------------------------------------------------------------------------
112 
113 class Meridian;
115 using MeridianPtr = std::shared_ptr<Meridian>;
117 using MeridianNNPtr = util::nn<MeridianPtr>;
118 
127  public:
129  PROJ_DLL ~Meridian() override;
131 
132  PROJ_DLL const common::Angle &longitude() PROJ_CONST_DECL;
133 
134  // non-standard
135  PROJ_DLL static MeridianNNPtr create(const common::Angle &longitudeIn);
136 
138  void _exportToWKT(io::WKTFormatter *formatter)
139  const override; // throw(io::FormattingException)
141 
142  protected:
143 #ifdef DOXYGEN_ENABLED
144  Angle angle_;
145 #endif
146 
147  explicit Meridian(const common::Angle &longitudeIn);
148  INLINED_MAKE_SHARED
149 
150  private:
151  PROJ_OPAQUE_PRIVATE_DATA
152  Meridian(const Meridian &other) = delete;
153  Meridian &operator=(const Meridian &other) = delete;
154 };
155 
156 // ---------------------------------------------------------------------------
157 
160 using CoordinateSystemAxisPtr = std::shared_ptr<CoordinateSystemAxis>;
162 using CoordinateSystemAxisNNPtr = util::nn<CoordinateSystemAxisPtr>;
163 
169  public io::IWKTExportable {
170  public:
172  PROJ_DLL ~CoordinateSystemAxis() override;
174 
175  PROJ_DLL const std::string &abbreviation() PROJ_CONST_DECL;
176  PROJ_DLL const AxisDirection &direction() PROJ_CONST_DECL;
177  PROJ_DLL const common::UnitOfMeasure &unit() PROJ_CONST_DECL;
178  PROJ_DLL const util::optional<double> &minimumValue() PROJ_CONST_DECL;
179  PROJ_DLL const util::optional<double> &maximumValue() PROJ_CONST_DECL;
180  PROJ_DLL const MeridianPtr &meridian() PROJ_CONST_DECL;
181 
182  // Non-standard
183  PROJ_DLL static CoordinateSystemAxisNNPtr
184  create(const util::PropertyMap &properties,
185  const std::string &abbreviationIn, const AxisDirection &directionIn,
186  const common::UnitOfMeasure &unitIn,
187  const MeridianPtr &meridianIn = nullptr);
188 
189  PROJ_DLL bool
190  isEquivalentTo(const util::IComparable *other,
191  util::IComparable::Criterion criterion =
192  util::IComparable::Criterion::STRICT) const override;
193 
195  void _exportToWKT(io::WKTFormatter *formatter, int order,
196  bool disableAbbrev) const;
197 
198  void _exportToWKT(io::WKTFormatter *formatter)
199  const override; // throw(io::FormattingException)
200 
201  static std::string normalizeAxisName(const std::string &str);
202 
204  createLAT_NORTH(const common::UnitOfMeasure &unit);
206  createLONG_EAST(const common::UnitOfMeasure &unit);
207 
209 
210  private:
211  PROJ_OPAQUE_PRIVATE_DATA
212  CoordinateSystemAxis(const CoordinateSystemAxis &other) = delete;
213  CoordinateSystemAxis &operator=(const CoordinateSystemAxis &other) = delete;
214 
216  /* cppcheck-suppress unusedPrivateFunction */
217  INLINED_MAKE_SHARED
218 };
219 
220 // ---------------------------------------------------------------------------
221 
233  public io::IWKTExportable {
234  public:
236  PROJ_DLL ~CoordinateSystem() override;
238 
239  PROJ_DLL const std::vector<CoordinateSystemAxisNNPtr> &
240  axisList() PROJ_CONST_DECL;
241 
243 
244  void _exportToWKT(io::WKTFormatter *formatter)
245  const override; // throw(io::FormattingException)
246 
247  PROJ_DLL virtual std::string getWKT2Type(bool) const = 0;
249 
250  PROJ_DLL bool
251  isEquivalentTo(const util::IComparable *other,
252  util::IComparable::Criterion criterion =
253  util::IComparable::Criterion::STRICT) const override;
254 
255  protected:
256  explicit CoordinateSystem(
257  const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
258 
259  private:
260  PROJ_OPAQUE_PRIVATE_DATA
261  CoordinateSystem(const CoordinateSystem &other) = delete;
262  CoordinateSystem &operator=(const CoordinateSystem &other) = delete;
263 };
264 
266 using CoordinateSystemPtr = std::shared_ptr<CoordinateSystem>;
268 using CoordinateSystemNNPtr = util::nn<CoordinateSystemPtr>;
269 
270 // ---------------------------------------------------------------------------
271 
272 class SphericalCS;
274 using SphericalCSPtr = std::shared_ptr<SphericalCS>;
276 using SphericalCSNNPtr = util::nn<SphericalCSPtr>;
277 
287 class SphericalCS final : public CoordinateSystem {
288  public:
290  PROJ_DLL ~SphericalCS() override;
292 
293  // non-standard
294 
295  PROJ_DLL static SphericalCSNNPtr
296  create(const util::PropertyMap &properties,
297  const CoordinateSystemAxisNNPtr &axis1,
298  const CoordinateSystemAxisNNPtr &axis2,
299  const CoordinateSystemAxisNNPtr &axis3);
300 
301  protected:
302  explicit SphericalCS(const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
303  INLINED_MAKE_SHARED
304 
305  std::string getWKT2Type(bool) const override { return "spherical"; }
306 
307  private:
308  SphericalCS(const SphericalCS &other) = delete;
309 };
310 
311 // ---------------------------------------------------------------------------
312 
313 class EllipsoidalCS;
315 using EllipsoidalCSPtr = std::shared_ptr<EllipsoidalCS>;
317 using EllipsoidalCSNNPtr = util::nn<EllipsoidalCSPtr>;
318 
327 class EllipsoidalCS final : public CoordinateSystem {
328  public:
330  PROJ_DLL ~EllipsoidalCS() override;
332 
333  // non-standard
334  PROJ_DLL static EllipsoidalCSNNPtr
335  create(const util::PropertyMap &properties,
336  const CoordinateSystemAxisNNPtr &axis1,
337  const CoordinateSystemAxisNNPtr &axis2);
338  PROJ_DLL static EllipsoidalCSNNPtr
339  create(const util::PropertyMap &properties,
340  const CoordinateSystemAxisNNPtr &axis1,
341  const CoordinateSystemAxisNNPtr &axis2,
342  const CoordinateSystemAxisNNPtr &axis3);
343  PROJ_DLL static EllipsoidalCSNNPtr
344  createLatitudeLongitude(const common::UnitOfMeasure &unit);
345  PROJ_DLL static EllipsoidalCSNNPtr createLatitudeLongitudeEllipsoidalHeight(
346  const common::UnitOfMeasure &angularUnit,
347  const common::UnitOfMeasure &linearUnit);
348  PROJ_DLL static EllipsoidalCSNNPtr
349  createLongitudeLatitude(const common::UnitOfMeasure &unit);
350 
352  enum class AxisOrder {
354  LAT_NORTH_LONG_EAST,
356  LAT_NORTH_LONG_EAST_HEIGHT_UP,
358  LONG_EAST_LAT_NORTH,
360  LONG_EAST_LAT_NORTH_HEIGHT_UP,
362  OTHER
363  };
364 
365  AxisOrder axisOrder() const;
366 
367  protected:
368  explicit EllipsoidalCS(
369  const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
370  INLINED_MAKE_SHARED
371 
372  std::string getWKT2Type(bool) const override { return "ellipsoidal"; }
373 
374  protected:
375  EllipsoidalCS(const EllipsoidalCS &other) = delete;
376 };
377 
378 // ---------------------------------------------------------------------------
379 
380 class VerticalCS;
382 using VerticalCSPtr = std::shared_ptr<VerticalCS>;
384 using VerticalCSNNPtr = util::nn<VerticalCSPtr>;
385 
394 class VerticalCS final : public CoordinateSystem {
395  public:
397  PROJ_DLL ~VerticalCS() override;
399 
400  PROJ_DLL static VerticalCSNNPtr
401  create(const util::PropertyMap &properties,
402  const CoordinateSystemAxisNNPtr &axis);
403 
404  PROJ_DLL static VerticalCSNNPtr
405  createGravityRelatedHeight(const common::UnitOfMeasure &unit);
406 
407  protected:
408  explicit VerticalCS(const CoordinateSystemAxisNNPtr &axisIn);
409  INLINED_MAKE_SHARED
410 
411  std::string getWKT2Type(bool) const override { return "vertical"; }
412 
413  private:
414  VerticalCS(const VerticalCS &other) = delete;
415 };
416 
417 // ---------------------------------------------------------------------------
418 
419 class CartesianCS;
421 using CartesianCSPtr = std::shared_ptr<CartesianCS>;
423 using CartesianCSNNPtr = util::nn<CartesianCSPtr>;
424 
434 class CartesianCS final : public CoordinateSystem {
435  public:
437  PROJ_DLL ~CartesianCS() override;
439 
440  PROJ_DLL static CartesianCSNNPtr
441  create(const util::PropertyMap &properties,
442  const CoordinateSystemAxisNNPtr &axis1,
443  const CoordinateSystemAxisNNPtr &axis2);
444  PROJ_DLL static CartesianCSNNPtr
445  create(const util::PropertyMap &properties,
446  const CoordinateSystemAxisNNPtr &axis1,
447  const CoordinateSystemAxisNNPtr &axis2,
448  const CoordinateSystemAxisNNPtr &axis3);
449  PROJ_DLL static CartesianCSNNPtr
450  createEastingNorthing(const common::UnitOfMeasure &unit);
451  PROJ_DLL static CartesianCSNNPtr
452  createGeocentric(const common::UnitOfMeasure &unit);
453 
454  protected:
455  explicit CartesianCS(const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
456  INLINED_MAKE_SHARED
457 
458  std::string getWKT2Type(bool) const override {
459  return "Cartesian"; // uppercase is intended
460  }
461 
462  private:
463  CartesianCS(const CartesianCS &other) = delete;
464 };
465 
466 // ---------------------------------------------------------------------------
467 
468 class OrdinalCS;
470 using OrdinalCSPtr = std::shared_ptr<OrdinalCS>;
472 using OrdinalCSNNPtr = util::nn<OrdinalCSPtr>;
473 
481 class OrdinalCS final : public CoordinateSystem {
482  public:
484  PROJ_DLL ~OrdinalCS() override;
486 
487  PROJ_DLL static OrdinalCSNNPtr
488  create(const util::PropertyMap &properties,
489  const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
490 
491  protected:
492  explicit OrdinalCS(const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
493  INLINED_MAKE_SHARED
494 
495  std::string getWKT2Type(bool) const override { return "ordinal"; }
496 
497  private:
498  OrdinalCS(const OrdinalCS &other) = delete;
499 };
500 
501 // ---------------------------------------------------------------------------
502 
503 class ParametricCS;
505 using ParametricCSPtr = std::shared_ptr<ParametricCS>;
507 using ParametricCSNNPtr = util::nn<ParametricCSPtr>;
508 
514 class ParametricCS final : public CoordinateSystem {
515  public:
517  PROJ_DLL ~ParametricCS() override;
519 
520  PROJ_DLL static ParametricCSNNPtr
521  create(const util::PropertyMap &properties,
522  const CoordinateSystemAxisNNPtr &axisIn);
523 
524  protected:
525  explicit ParametricCS(const std::vector<CoordinateSystemAxisNNPtr> &axisIn);
526  INLINED_MAKE_SHARED
527 
528  std::string getWKT2Type(bool) const override { return "parametric"; }
529 
530  private:
531  ParametricCS(const ParametricCS &other) = delete;
532 };
533 
534 // ---------------------------------------------------------------------------
535 
536 class TemporalCS;
538 using TemporalCSPtr = std::shared_ptr<TemporalCS>;
540 using TemporalCSNNPtr = util::nn<TemporalCSPtr>;
541 
549 class TemporalCS : public CoordinateSystem {
550  public:
552  PROJ_DLL ~TemporalCS() override;
554 
555  protected:
556  explicit TemporalCS(const CoordinateSystemAxisNNPtr &axis);
557  INLINED_MAKE_SHARED
558 
559  std::string getWKT2Type(bool use2018Keywords) const override = 0;
560 
561  private:
562  TemporalCS(const TemporalCS &other) = delete;
563 };
564 
565 // ---------------------------------------------------------------------------
566 
567 class DateTimeTemporalCS;
569 using DateTimeTemporalCSPtr = std::shared_ptr<DateTimeTemporalCS>;
571 using DateTimeTemporalCSNNPtr = util::nn<DateTimeTemporalCSPtr>;
572 
582 class DateTimeTemporalCS final : public TemporalCS {
583  public:
585  PROJ_DLL ~DateTimeTemporalCS() override;
587 
588  PROJ_DLL static DateTimeTemporalCSNNPtr
589  create(const util::PropertyMap &properties,
590  const CoordinateSystemAxisNNPtr &axis);
591 
592  protected:
593  explicit DateTimeTemporalCS(const CoordinateSystemAxisNNPtr &axis);
594  INLINED_MAKE_SHARED
595 
596  std::string getWKT2Type(bool use2018Keywords) const override;
597 
598  private:
599  DateTimeTemporalCS(const DateTimeTemporalCS &other) = delete;
600 };
601 
602 // ---------------------------------------------------------------------------
603 
604 class TemporalCountCS;
606 using TemporalCountCSPtr = std::shared_ptr<TemporalCountCS>;
608 using TemporalCountCSNNPtr = util::nn<TemporalCountCSPtr>;
609 
617 class TemporalCountCS final : public TemporalCS {
618  public:
620  PROJ_DLL ~TemporalCountCS() override;
622 
623  PROJ_DLL static TemporalCountCSNNPtr
624  create(const util::PropertyMap &properties,
625  const CoordinateSystemAxisNNPtr &axis);
626 
627  protected:
628  explicit TemporalCountCS(const CoordinateSystemAxisNNPtr &axis);
629  INLINED_MAKE_SHARED
630 
631  std::string getWKT2Type(bool use2018Keywords) const override;
632 
633  private:
634  TemporalCountCS(const TemporalCountCS &other) = delete;
635 };
636 
637 // ---------------------------------------------------------------------------
638 
639 class TemporalMeasureCS;
641 using TemporalMeasureCSPtr = std::shared_ptr<TemporalMeasureCS>;
643 using TemporalMeasureCSNNPtr = util::nn<TemporalMeasureCSPtr>;
644 
652 class TemporalMeasureCS final : public TemporalCS {
653  public:
655  PROJ_DLL ~TemporalMeasureCS() override;
657 
658  PROJ_DLL static TemporalMeasureCSNNPtr
659  create(const util::PropertyMap &properties,
660  const CoordinateSystemAxisNNPtr &axis);
661 
662  protected:
663  explicit TemporalMeasureCS(const CoordinateSystemAxisNNPtr &axis);
664  INLINED_MAKE_SHARED
665 
666  std::string getWKT2Type(bool use2018Keywords) const override;
667 
668  private:
669  TemporalMeasureCS(const TemporalMeasureCS &other) = delete;
670 };
671 
672 } // namespace cs
673 
674 NS_PROJ_END
675 
676 #endif // CS_HH_INCLUDED
static const AxisDirection NORTH_EAST
Definition: coordinatesystem.hpp:65
A one-dimensional coordinate system used to record time as an integer count.
Definition: coordinatesystem.hpp:617
Interface for an object that can be compared to another.
Definition: util.hpp:292
static const AxisDirection SOUTH_SOUTH_EAST
Definition: coordinatesystem.hpp:70
static const AxisDirection WEST
Definition: coordinatesystem.hpp:76
util::nn< TemporalCSPtr > TemporalCSNNPtr
Definition: coordinatesystem.hpp:540
A two- or three-dimensional coordinate system in which position is specified by geodetic latitude...
Definition: coordinatesystem.hpp:327
static const AxisDirection CLOCKWISE
Definition: coordinatesystem.hpp:97
Abstract class modelling a coordinate system (CS)
Definition: coordinatesystem.hpp:232
static const AxisDirection SOUTH_EAST
Definition: coordinatesystem.hpp:69
Abstract class to define an enumeration of values.
Definition: util.hpp:611
(Abstract class) A one-dimensional coordinate system used to record time.
Definition: coordinatesystem.hpp:549
static const AxisDirection NORTH_WEST
Definition: coordinatesystem.hpp:78
std::shared_ptr< TemporalCountCS > TemporalCountCSPtr
Definition: coordinatesystem.hpp:606
static const AxisDirection NORTH_NORTH_EAST
Definition: coordinatesystem.hpp:64
util::nn< CoordinateSystemPtr > CoordinateSystemNNPtr
Definition: coordinatesystem.hpp:268
static const AxisDirection SOUTH
Definition: coordinatesystem.hpp:71
static const AxisDirection DOWN
Definition: coordinatesystem.hpp:81
static const AxisDirection PORT
Definition: coordinatesystem.hpp:95
static const AxisDirection DISPLAY_LEFT
Definition: coordinatesystem.hpp:90
util::nn< VerticalCSPtr > VerticalCSNNPtr
Definition: coordinatesystem.hpp:384
A three-dimensional coordinate system in Euclidean space with one distance measured from the origin a...
Definition: coordinatesystem.hpp:287
static const AxisDirection EAST
Definition: coordinatesystem.hpp:67
static const AxisDirection NORTH
Definition: coordinatesystem.hpp:63
one-dimensional coordinate reference system which uses parameter values or functions that may vary mo...
Definition: coordinatesystem.hpp:514
static const AxisDirection AWAY_FROM
Definition: coordinatesystem.hpp:100
A two- or three-dimensional coordinate system in Euclidean space with orthogonal straight axes...
Definition: coordinatesystem.hpp:434
util::nn< ParametricCSPtr > ParametricCSNNPtr
Definition: coordinatesystem.hpp:507
static const AxisDirection GEOCENTRIC_Z
Definition: coordinatesystem.hpp:84
The direction of positive increase in the coordinate value for a coordinate system axis...
Definition: coordinatesystem.hpp:56
util::nn< MeridianPtr > MeridianNNPtr
Definition: coordinatesystem.hpp:117
static const AxisDirection AFT
Definition: coordinatesystem.hpp:94
Criterion
Comparison criterion.
Definition: util.hpp:299
std::shared_ptr< Meridian > MeridianPtr
Definition: coordinatesystem.hpp:115
std::shared_ptr< DateTimeTemporalCS > DateTimeTemporalCSPtr
Definition: coordinatesystem.hpp:569
static const AxisDirection GEOCENTRIC_Y
Definition: coordinatesystem.hpp:83
static const AxisDirection COLUMN_NEGATIVE
Definition: coordinatesystem.hpp:86
util::nn< DateTimeTemporalCSPtr > DateTimeTemporalCSNNPtr
Definition: coordinatesystem.hpp:571
util::nn< TemporalMeasureCSPtr > TemporalMeasureCSNNPtr
Definition: coordinatesystem.hpp:643
std::shared_ptr< CartesianCS > CartesianCSPtr
Definition: coordinatesystem.hpp:421
n-dimensional coordinate system in which every axis uses integers.
Definition: coordinatesystem.hpp:481
static const AxisDirection UP
Definition: coordinatesystem.hpp:80
util::nn< SphericalCSPtr > SphericalCSNNPtr
Definition: coordinatesystem.hpp:276
util::nn< OrdinalCSPtr > OrdinalCSNNPtr
Definition: coordinatesystem.hpp:472
static const AxisDirection DISPLAY_UP
Definition: coordinatesystem.hpp:91
static const AxisDirection TOWARDS
Definition: coordinatesystem.hpp:99
std::shared_ptr< CoordinateSystemAxis > CoordinateSystemAxisPtr
Definition: coordinatesystem.hpp:160
Wrapper of a std::map<std::string, BaseObjectNNPtr>
Definition: util.hpp:410
static const AxisDirection NORTH_NORTH_WEST
Definition: coordinatesystem.hpp:79
AxisOrder
Typical axis order.
Definition: coordinatesystem.hpp:352
A one-dimensional coordinate system used to record the heights or depths of points.
Definition: coordinatesystem.hpp:394
static const AxisDirection DISPLAY_DOWN
Definition: coordinatesystem.hpp:92
static const AxisDirection GEOCENTRIC_X
Definition: coordinatesystem.hpp:82
util::nn< TemporalCountCSPtr > TemporalCountCSNNPtr
Definition: coordinatesystem.hpp:608
Numeric value, with a angular unit of measure.
Definition: common.hpp:186
static const AxisDirection STARBOARD
Definition: coordinatesystem.hpp:96
static const AxisDirection WEST_SOUTH_WEST
Definition: coordinatesystem.hpp:75
std::shared_ptr< VerticalCS > VerticalCSPtr
Definition: coordinatesystem.hpp:382
static const AxisDirection COLUMN_POSITIVE
Definition: coordinatesystem.hpp:85
util::nn< CoordinateSystemAxisPtr > CoordinateSystemAxisNNPtr
Definition: coordinatesystem.hpp:162
Unit of measure.
Definition: common.hpp:60
static const AxisDirection DISPLAY_RIGHT
Definition: coordinatesystem.hpp:89
std::shared_ptr< TemporalCS > TemporalCSPtr
Definition: coordinatesystem.hpp:538
static const AxisDirection FORWARD
Definition: coordinatesystem.hpp:93
static const AxisDirection SOUTH_WEST
Definition: coordinatesystem.hpp:73
static const AxisDirection SOUTH_SOUTH_WEST
Definition: coordinatesystem.hpp:72
static const AxisDirection EAST_SOUTH_EAST
Definition: coordinatesystem.hpp:68
static const AxisDirection ROW_NEGATIVE
Definition: coordinatesystem.hpp:88
util::nn< CartesianCSPtr > CartesianCSNNPtr
Definition: coordinatesystem.hpp:423
static const AxisDirection FUTURE
Definition: coordinatesystem.hpp:101
static const AxisDirection UNSPECIFIED
Definition: coordinatesystem.hpp:103
A one-dimensional coordinate system used to record a time as a real number.
Definition: coordinatesystem.hpp:652
Formatter to WKT strings.
Definition: io.hpp:143
Interface for an object that can be exported to WKT.
Definition: io.hpp:423
static const AxisDirection COUNTER_CLOCKWISE
Definition: coordinatesystem.hpp:98
std::shared_ptr< TemporalMeasureCS > TemporalMeasureCSPtr
Definition: coordinatesystem.hpp:641
static const AxisDirection ROW_POSITIVE
Definition: coordinatesystem.hpp:87
static const AxisDirection EAST_NORTH_EAST
Definition: coordinatesystem.hpp:66
The definition of a coordinate system axis.
Definition: coordinatesystem.hpp:168
Loose transposition of std::optional available from C++17.
Definition: util.hpp:178
std::shared_ptr< OrdinalCS > OrdinalCSPtr
Definition: coordinatesystem.hpp:470
std::shared_ptr< ParametricCS > ParametricCSPtr
Definition: coordinatesystem.hpp:505
The meridian that the axis follows from the pole, for a coordinate reference system centered on a pol...
Definition: coordinatesystem.hpp:126
util::nn< EllipsoidalCSPtr > EllipsoidalCSNNPtr
Definition: coordinatesystem.hpp:317
static const AxisDirection PAST
Definition: coordinatesystem.hpp:102
std::shared_ptr< EllipsoidalCS > EllipsoidalCSPtr
Definition: coordinatesystem.hpp:315
std::shared_ptr< CoordinateSystem > CoordinateSystemPtr
Definition: coordinatesystem.hpp:266
A one-dimensional coordinate system used to record time in dateTime representation as defined in ISO ...
Definition: coordinatesystem.hpp:582
static const AxisDirection WEST_NORTH_WEST
Definition: coordinatesystem.hpp:77
std::shared_ptr< SphericalCS > SphericalCSPtr
Definition: coordinatesystem.hpp:274
Identifications of a CRS-related object.
Definition: common.hpp:269