PROJ C++ API
io.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 IO_HH_INCLUDED
30 #define IO_HH_INCLUDED
31 
32 #include <memory>
33 #include <set>
34 #include <string>
35 #include <utility>
36 #include <vector>
37 
38 #include "util.hpp"
39 
40 NS_PROJ_START
41 
42 namespace common {
43 class UnitOfMeasure;
44 using UnitOfMeasurePtr = std::shared_ptr<UnitOfMeasure>;
45 using UnitOfMeasureNNPtr = util::nn<UnitOfMeasurePtr>;
46 } // namespace common
47 
48 namespace cs {
49 class CoordinateSystem;
50 using CoordinateSystemPtr = std::shared_ptr<CoordinateSystem>;
51 using CoordinateSystemNNPtr = util::nn<CoordinateSystemPtr>;
52 } // namespace cs
53 
54 namespace metadata {
55 class Extent;
56 using ExtentPtr = std::shared_ptr<Extent>;
57 using ExtentNNPtr = util::nn<ExtentPtr>;
58 } // namespace metadata
59 
60 namespace datum {
61 class Datum;
62 using DatumPtr = std::shared_ptr<Datum>;
63 using DatumNNPtr = util::nn<DatumPtr>;
64 
65 class Ellipsoid;
66 using EllipsoidPtr = std::shared_ptr<Ellipsoid>;
67 using EllipsoidNNPtr = util::nn<EllipsoidPtr>;
68 
69 class PrimeMeridian;
70 using PrimeMeridianPtr = std::shared_ptr<PrimeMeridian>;
71 using PrimeMeridianNNPtr = util::nn<PrimeMeridianPtr>;
72 
73 class GeodeticReferenceFrame;
74 using GeodeticReferenceFramePtr = std::shared_ptr<GeodeticReferenceFrame>;
75 using GeodeticReferenceFrameNNPtr = util::nn<GeodeticReferenceFramePtr>;
76 
77 class VerticalReferenceFrame;
78 using VerticalReferenceFramePtr = std::shared_ptr<VerticalReferenceFrame>;
79 using VerticalReferenceFrameNNPtr = util::nn<VerticalReferenceFramePtr>;
80 } // namespace datum
81 
82 namespace crs {
83 class CRS;
84 using CRSPtr = std::shared_ptr<CRS>;
85 using CRSNNPtr = util::nn<CRSPtr>;
86 
87 class GeodeticCRS;
88 using GeodeticCRSPtr = std::shared_ptr<GeodeticCRS>;
89 using GeodeticCRSNNPtr = util::nn<GeodeticCRSPtr>;
90 
91 class GeographicCRS;
92 using GeographicCRSPtr = std::shared_ptr<GeographicCRS>;
93 using GeographicCRSNNPtr = util::nn<GeographicCRSPtr>;
94 
95 class VerticalCRS;
96 using VerticalCRSPtr = std::shared_ptr<VerticalCRS>;
97 using VerticalCRSNNPtr = util::nn<VerticalCRSPtr>;
98 
99 class ProjectedCRS;
100 using ProjectedCRSPtr = std::shared_ptr<ProjectedCRS>;
101 using ProjectedCRSNNPtr = util::nn<ProjectedCRSPtr>;
102 
103 class CompoundCRS;
104 using CompoundCRSPtr = std::shared_ptr<CompoundCRS>;
105 using CompoundCRSNNPtr = util::nn<CompoundCRSPtr>;
106 } // namespace crs
107 
108 namespace operation {
109 class Conversion;
110 using ConversionPtr = std::shared_ptr<Conversion>;
111 using ConversionNNPtr = util::nn<ConversionPtr>;
112 
113 class CoordinateOperation;
114 using CoordinateOperationPtr = std::shared_ptr<CoordinateOperation>;
115 using CoordinateOperationNNPtr = util::nn<CoordinateOperationPtr>;
116 } // namespace operation
117 
122 namespace io {
123 
124 class DatabaseContext;
126 using DatabaseContextPtr = std::shared_ptr<DatabaseContext>;
128 using DatabaseContextNNPtr = util::nn<DatabaseContextPtr>;
129 
130 // ---------------------------------------------------------------------------
131 
132 class WKTFormatter;
134 using WKTFormatterPtr = std::unique_ptr<WKTFormatter>;
136 using WKTFormatterNNPtr = util::nn<WKTFormatterPtr>;
137 
144  public:
146 
147  enum class PROJ_DLL Version {
149  WKT1,
151  WKT2
152  };
154 
156  enum class PROJ_DLL Convention {
159  WKT2,
160  WKT2_2015 = WKT2,
161 
175  WKT2_SIMPLIFIED,
176  WKT2_2015_SIMPLIFIED = WKT2_SIMPLIFIED,
177 
186  WKT2_2018,
187 
189  WKT2_2018_SIMPLIFIED,
190 
192  WKT1_GDAL
193  };
194 
195  PROJ_DLL static WKTFormatterNNPtr
196  create(Convention convention = Convention::WKT2);
197  PROJ_DLL static WKTFormatterNNPtr create(const WKTFormatterNNPtr &other);
199  PROJ_DLL ~WKTFormatter();
201 
202  PROJ_DLL WKTFormatter &setMultiLine(bool multiLine);
203  PROJ_DLL WKTFormatter &setIndendationWidth(int width);
204  PROJ_DLL WKTFormatter &setStrict(bool strict);
205  PROJ_DLL bool isStrict() const;
206 
207  PROJ_DLL const std::string &toString() const;
208 
209  PROJ_PRIVATE :
211  PROJ_DLL WKTFormatter &
212  setOutputId(bool outputIdIn);
213 
214  void enter();
215  void leave();
216 
217  void startNode(const std::string &keyword, bool hasId);
218  void endNode();
219 
220  PROJ_DLL WKTFormatter &simulCurNodeHasId();
221 
222  void addQuotedString(const char *str);
223  void addQuotedString(const std::string &str);
224  void add(const std::string &str);
225  void add(int number);
226  void add(size_t number) = delete;
227  void add(double number, int precision = 15);
228 
229  void pushOutputUnit(bool outputUnitIn);
230  void popOutputUnit();
231  bool outputUnit() const;
232 
233  void pushOutputId(bool outputIdIn);
234  void popOutputId();
235  bool outputId() const;
236 
237  void pushAxisLinearUnit(const common::UnitOfMeasureNNPtr &unit);
238  void popAxisLinearUnit();
239  const common::UnitOfMeasureNNPtr &axisLinearUnit() const;
240 
241  void pushAxisAngularUnit(const common::UnitOfMeasureNNPtr &unit);
242  void popAxisAngularUnit();
243  const common::UnitOfMeasureNNPtr &axisAngularUnit() const;
244 
245  void setAbridgedTransformation(bool abriged);
246  bool abridgedTransformation() const;
247 
248  void setUseDerivingConversion(bool useDerivingConversionIn);
249  bool useDerivingConversion() const;
250 
251  void setTOWGS84Parameters(const std::vector<double> &params);
252  const std::vector<double> &getTOWGS84Parameters() const;
253 
254  void setVDatumExtension(const std::string &filename);
255  const std::string &getVDatumExtension() const;
256 
257  void setHDatumExtension(const std::string &filename);
258  const std::string &getHDatumExtension() const;
259 
260 #ifdef unused
261  void startInversion();
262  void stopInversion();
263  bool isInverted() const;
264 #endif
265 
266  bool outputAxisOrder() const;
267  bool primeMeridianOmittedIfGreenwich() const;
268  bool ellipsoidUnitOmittedIfMetre() const;
269  bool forceUNITKeyword() const;
270  bool primeMeridianOrParameterUnitOmittedIfSameAsAxis() const;
271  bool primeMeridianInDegree() const;
272  bool outputCSUnitOnlyOnceIfSame() const;
273  Version version() const;
274  bool use2018Keywords() const;
275 
277 
278  protected:
280  explicit WKTFormatter(Convention convention);
281  WKTFormatter(const WKTFormatter &other) = delete;
282 
283  INLINED_MAKE_UNIQUE
285 
286  private:
287  PROJ_OPAQUE_PRIVATE_DATA
288 };
289 
290 // ---------------------------------------------------------------------------
291 
292 class PROJStringFormatter;
294 using PROJStringFormatterPtr = std::unique_ptr<PROJStringFormatter>;
296 using PROJStringFormatterNNPtr = util::nn<PROJStringFormatterPtr>;
297 
304  public:
306  enum class PROJ_DLL Convention {
308  PROJ_5,
309 
311  PROJ_4
312  };
313 
314  PROJ_DLL static PROJStringFormatterNNPtr
315  create(Convention conventionIn = Convention::PROJ_5,
316  DatabaseContextPtr dbContext = nullptr);
318  PROJ_DLL ~PROJStringFormatter();
320 
321  PROJ_DLL void setUseETMercForTMerc(bool flag);
322 
323  PROJ_DLL const std::string &toString() const;
324 
325  PROJ_PRIVATE :
327 
328  PROJ_DLL void
329  startInversion();
330  PROJ_DLL void stopInversion();
331  bool isInverted() const;
332  bool getUseETMercForTMerc() const;
333 
334  PROJ_DLL void
335  ingestPROJString(const std::string &str); // throw ParsingException
336 
337  PROJ_DLL void addStep(const char *step);
338  PROJ_DLL void addStep(const std::string &step);
339  PROJ_DLL void setCurrentStepInverted(bool inverted);
340  PROJ_DLL void addParam(const std::string &paramName);
341  PROJ_DLL void addParam(const char *paramName, double val);
342  PROJ_DLL void addParam(const std::string &paramName, double val);
343  PROJ_DLL void addParam(const char *paramName, int val);
344  PROJ_DLL void addParam(const std::string &paramName, int val);
345  PROJ_DLL void addParam(const char *paramName, const char *val);
346  PROJ_DLL void addParam(const char *paramName, const std::string &val);
347  PROJ_DLL void addParam(const std::string &paramName, const char *val);
348  PROJ_DLL void addParam(const std::string &paramName,
349  const std::string &val);
350  PROJ_DLL void addParam(const char *paramName,
351  const std::vector<double> &vals);
352 
353  std::set<std::string> getUsedGridNames() const;
354 
355  void setTOWGS84Parameters(const std::vector<double> &params);
356  const std::vector<double> &getTOWGS84Parameters() const;
357 
358  void setVDatumExtension(const std::string &filename);
359  const std::string &getVDatumExtension() const;
360 
361  void setHDatumExtension(const std::string &filename);
362  const std::string &getHDatumExtension() const;
363 
364  void setOmitProjLongLatIfPossible(bool omit);
365  bool omitProjLongLatIfPossible() const;
366 
367  void setOmitZUnitConversion(bool omit);
368  bool omitZUnitConversion() const;
369 
370  DatabaseContextPtr databaseContext() const;
371 
372  Convention convention() const;
373 
375 
376  protected:
378  explicit PROJStringFormatter(Convention conventionIn,
379  const DatabaseContextPtr &dbContext);
380  PROJStringFormatter(const PROJStringFormatter &other) = delete;
381 
382  INLINED_MAKE_UNIQUE
384 
385  private:
386  PROJ_OPAQUE_PRIVATE_DATA
387 };
388 
389 // ---------------------------------------------------------------------------
390 
394  public:
396  PROJ_DLL explicit FormattingException(const char *message);
397  PROJ_DLL explicit FormattingException(const std::string &message);
398  PROJ_DLL FormattingException(const FormattingException &other);
399  PROJ_DLL virtual ~FormattingException() override;
400 
401  static void Throw(const char *msg) PROJ_NO_RETURN;
402  static void Throw(const std::string &msg) PROJ_NO_RETURN;
404 };
405 
406 // ---------------------------------------------------------------------------
407 
411  public:
413  PROJ_DLL explicit ParsingException(const char *message);
414  PROJ_DLL explicit ParsingException(const std::string &message);
415  PROJ_DLL ParsingException(const ParsingException &other);
416  PROJ_DLL virtual ~ParsingException() override;
418 };
419 
420 // ---------------------------------------------------------------------------
421 
424  public:
426  PROJ_DLL virtual ~IWKTExportable();
428 
430  PROJ_DLL std::string
431  exportToWKT(WKTFormatter *formatter) const; // throw(FormattingException)
432 
433  PROJ_PRIVATE :
434 
436  virtual void
437  _exportToWKT(
438  WKTFormatter *formatter) const = 0; // throw(FormattingException)
440 };
441 
442 // ---------------------------------------------------------------------------
443 
446 using IPROJStringExportablePtr = std::shared_ptr<IPROJStringExportable>;
448 using IPROJStringExportableNNPtr = util::nn<IPROJStringExportablePtr>;
449 
452  public:
454  PROJ_DLL virtual ~IPROJStringExportable();
456 
503  PROJ_DLL std::string exportToPROJString(
504  PROJStringFormatter *formatter) const; // throw(FormattingException)
505 
506  PROJ_PRIVATE :
507 
509  virtual void
510  _exportToPROJString(PROJStringFormatter *formatter)
511  const = 0; // throw(FormattingException)
513 };
514 
515 // ---------------------------------------------------------------------------
516 
517 class WKTNode;
519 using WKTNodePtr = std::unique_ptr<WKTNode>;
521 using WKTNodeNNPtr = util::nn<WKTNodePtr>;
522 
525 class WKTNode {
526  public:
527  PROJ_DLL explicit WKTNode(const std::string &valueIn);
529  PROJ_DLL ~WKTNode();
531 
532  PROJ_DLL const std::string &value() const;
533  PROJ_DLL const std::vector<WKTNodeNNPtr> &children() const;
534 
535  PROJ_DLL void addChild(WKTNodeNNPtr &&child);
536  PROJ_DLL const WKTNodePtr &lookForChild(const std::string &childName,
537  int occurrence = 0) const noexcept;
538  PROJ_DLL int countChildrenOfName(const std::string &childName) const
539  noexcept;
540 
541  PROJ_DLL std::string toString() const;
542 
543  PROJ_DLL static WKTNodeNNPtr createFrom(const std::string &wkt,
544  size_t indexStart = 0);
545 
546  protected:
547  static WKTNodeNNPtr createFrom(const std::string &wkt, size_t indexStart,
548  int recLevel,
549  size_t &indexEnd); // throw(ParsingException)
550 
551  private:
552  friend class WKTParser;
553  PROJ_OPAQUE_PRIVATE_DATA
554 };
555 
556 // ---------------------------------------------------------------------------
557 
558 PROJ_DLL util::BaseObjectNNPtr
559 createFromUserInput(const std::string &text,
560  const DatabaseContextPtr &dbContext);
561 
562 // ---------------------------------------------------------------------------
563 
566 class WKTParser {
567  public:
568  PROJ_DLL WKTParser();
570  PROJ_DLL ~WKTParser();
572 
573  PROJ_DLL WKTParser &setStrict(bool strict);
574  PROJ_DLL std::vector<std::string> warningList() const;
575 
576  PROJ_DLL util::BaseObjectNNPtr
577  createFromWKT(const std::string &wkt); // throw(ParsingException)
578 
579  private:
580  PROJ_OPAQUE_PRIVATE_DATA
581 };
582 
583 // ---------------------------------------------------------------------------
584 
588  public:
589  PROJ_DLL PROJStringParser();
591  PROJ_DLL ~PROJStringParser();
593 
594  PROJ_DLL PROJStringParser &
595  attachDatabaseContext(const DatabaseContextPtr &dbContext);
596 
597  PROJ_DLL std::vector<std::string> warningList() const;
598 
599  PROJ_DLL util::BaseObjectNNPtr createFromPROJString(
600  const std::string &projString); // throw(ParsingException)
601 
602  private:
603  PROJ_OPAQUE_PRIVATE_DATA
604 };
605 
606 // ---------------------------------------------------------------------------
607 
613  public:
615  PROJ_DLL ~DatabaseContext();
617 
618  PROJ_DLL static DatabaseContextNNPtr create();
619 
620  PROJ_DLL static DatabaseContextNNPtr
621  create(const std::string &databasePath);
622 
623  PROJ_DLL static DatabaseContextNNPtr
624  create(const std::string &databasePath,
625  const std::vector<std::string> &auxiliaryDatabasePaths);
626 
627  PROJ_DLL const std::string &getPath() const;
628 
629  PROJ_DLL std::set<std::string> getAuthorities() const;
630 
631  PROJ_DLL std::vector<std::string> getDatabaseStructure() const;
632 
633  PROJ_PRIVATE :
635  PROJ_DLL void *
636  getSqliteHandle() const;
637 
638  PROJ_DLL static DatabaseContextNNPtr create(void *sqlite_handle);
639 
640  void attachPJContext(void *pjCtxt);
641 
642  bool lookForGridAlternative(const std::string &officialName,
643  std::string &projFilename,
644  std::string &projFormat, bool &inverse);
645 
646  PROJ_DLL bool lookForGridInfo(const std::string &projFilename,
647  std::string &fullFilename,
648  std::string &packageName, std::string &url,
649  bool &directDownload, bool &openLicense,
650  bool &gridAvailable);
652 
653  protected:
654  DatabaseContext();
655  INLINED_MAKE_SHARED
656  PROJ_FRIEND(AuthorityFactory);
657 
658  private:
659  PROJ_OPAQUE_PRIVATE_DATA
660  DatabaseContext(const DatabaseContext &) = delete;
661  DatabaseContext &operator=(const DatabaseContext &other) = delete;
662 };
663 
664 // ---------------------------------------------------------------------------
665 
666 class AuthorityFactory;
668 using AuthorityFactoryPtr = std::shared_ptr<AuthorityFactory>;
670 using AuthorityFactoryNNPtr = util::nn<AuthorityFactoryPtr>;
671 
681  public:
683  PROJ_DLL ~AuthorityFactory();
685 
686  PROJ_DLL util::BaseObjectNNPtr createObject(const std::string &code) const;
687 
689  createUnitOfMeasure(const std::string &code) const;
690 
691  PROJ_DLL metadata::ExtentNNPtr createExtent(const std::string &code) const;
692 
694  createPrimeMeridian(const std::string &code) const;
695 
696  PROJ_DLL std::string identifyBodyFromSemiMajorAxis(double a,
697  double tolerance) const;
698 
699  PROJ_DLL datum::EllipsoidNNPtr
700  createEllipsoid(const std::string &code) const;
701 
702  PROJ_DLL datum::DatumNNPtr createDatum(const std::string &code) const;
703 
705  createGeodeticDatum(const std::string &code) const;
706 
708  createVerticalDatum(const std::string &code) const;
709 
711  createCoordinateSystem(const std::string &code) const;
712 
713  PROJ_DLL crs::GeodeticCRSNNPtr
714  createGeodeticCRS(const std::string &code) const;
715 
716  PROJ_DLL crs::GeographicCRSNNPtr
717  createGeographicCRS(const std::string &code) const;
718 
719  PROJ_DLL crs::VerticalCRSNNPtr
720  createVerticalCRS(const std::string &code) const;
721 
723  createConversion(const std::string &code) const;
724 
725  PROJ_DLL crs::ProjectedCRSNNPtr
726  createProjectedCRS(const std::string &code) const;
727 
728  PROJ_DLL crs::CompoundCRSNNPtr
729  createCompoundCRS(const std::string &code) const;
730 
731  PROJ_DLL crs::CRSNNPtr
732  createCoordinateReferenceSystem(const std::string &code) const;
733 
735  createCoordinateOperation(const std::string &code,
736  bool usePROJAlternativeGridNames) const;
737 
738  PROJ_DLL std::vector<operation::CoordinateOperationNNPtr>
739  createFromCoordinateReferenceSystemCodes(
740  const std::string &sourceCRSCode,
741  const std::string &targetCRSCode) const;
742 
743  PROJ_DLL const std::string &getAuthority() PROJ_CONST_DECL;
744 
746  enum class ObjectType {
748  PRIME_MERIDIAN,
750  ELLIPSOID,
752  DATUM,
755  GEODETIC_REFERENCE_FRAME,
758  VERTICAL_REFERENCE_FRAME,
760  CRS,
762  GEODETIC_CRS,
764  GEOGRAPHIC_CRS,
766  PROJECTED_CRS,
768  VERTICAL_CRS,
770  COMPOUND_CRS,
773  COORDINATE_OPERATION,
775  CONVERSION,
778  TRANSFORMATION,
781  CONCATENATED_OPERATION,
782  };
783 
784  PROJ_DLL std::set<std::string>
785  getAuthorityCodes(const ObjectType &type,
786  bool allowDeprecated = true) const;
787 
788  PROJ_DLL std::string getDescriptionText(const std::string &code) const;
789 
790  // non-standard
791  PROJ_DLL static AuthorityFactoryNNPtr
792  create(DatabaseContextNNPtr context, const std::string &authorityName);
793 
794  PROJ_DLL DatabaseContextNNPtr databaseContext() const;
795 
796  PROJ_DLL std::vector<operation::CoordinateOperationNNPtr>
797  createFromCoordinateReferenceSystemCodes(
798  const std::string &sourceCRSAuthName, const std::string &sourceCRSCode,
799  const std::string &targetCRSAuthName, const std::string &targetCRSCode,
800  bool usePROJAlternativeGridNames, bool discardIfMissingGrid) const;
801 
802  PROJ_DLL std::vector<operation::CoordinateOperationNNPtr>
803  createFromCRSCodesWithIntermediates(
804  const std::string &sourceCRSAuthName, const std::string &sourceCRSCode,
805  const std::string &targetCRSAuthName, const std::string &targetCRSCode,
806  bool usePROJAlternativeGridNames, bool discardIfMissingGrid,
807  const std::vector<std::pair<std::string, std::string>>
808  &intermediateCRSAuthCodes) const;
809 
810  protected:
811  AuthorityFactory(const DatabaseContextNNPtr &context,
812  const std::string &authorityName);
813 
814  crs::CRSNNPtr createCoordinateReferenceSystem(const std::string &code,
815  bool allowCompound) const;
816 
817  crs::GeodeticCRSNNPtr createGeodeticCRS(const std::string &code,
818  bool geographicOnly) const;
819 
821  createCoordinateOperation(const std::string &code, bool allowConcatenated,
822  bool usePROJAlternativeGridNames) const;
823 
824  INLINED_MAKE_SHARED
825 
826  private:
827  PROJ_OPAQUE_PRIVATE_DATA
828 };
829 
830 // ---------------------------------------------------------------------------
831 
836  public:
838  PROJ_DLL explicit FactoryException(const char *message);
839  PROJ_DLL explicit FactoryException(const std::string &message);
840  PROJ_DLL
841  FactoryException(const FactoryException &other);
842  PROJ_DLL ~FactoryException() override;
844 };
845 
846 // ---------------------------------------------------------------------------
847 
852  public:
854  PROJ_DLL explicit NoSuchAuthorityCodeException(const std::string &message,
855  const std::string &authority,
856  const std::string &code);
857  PROJ_DLL
858  NoSuchAuthorityCodeException(const NoSuchAuthorityCodeException &other);
859  PROJ_DLL ~NoSuchAuthorityCodeException() override;
861 
862  PROJ_DLL const std::string &getAuthority() const;
863  PROJ_DLL const std::string &getAuthorityCode() const;
864 
865  private:
866  PROJ_OPAQUE_PRIVATE_DATA
867 };
868 
869 } // namespace io
870 
871 NS_PROJ_END
872 
873 #endif // IO_HH_INCLUDED
util::nn< UnitOfMeasurePtr > UnitOfMeasureNNPtr
Definition: common.hpp:54
util::nn< EllipsoidPtr > EllipsoidNNPtr
Definition: datum.hpp:233
BaseObjectNNPtr createFromUserInput(const std::string &text, const DatabaseContextPtr &dbContext)
Instanciate a sub-class of BaseObject from a WKT string, PROJ string or database code (like "EPSG:432...
Definition: io.cpp:3438
util::nn< CoordinateOperationPtr > CoordinateOperationNNPtr
Definition: coordinateoperation.hpp:94
Node in the tree-splitted WKT representation.
Definition: io.hpp:525
Definition: util.hpp:241
Exception thrown when an authority factory can&#39;t find the requested authority code.
Definition: io.hpp:851
util::nn< CoordinateSystemPtr > CoordinateSystemNNPtr
Definition: coordinatesystem.hpp:268
Convention
Definition: io.hpp:306
Formatter to PROJ strings.
Definition: io.hpp:303
std::shared_ptr< AuthorityFactory > AuthorityFactoryPtr
Definition: io.hpp:668
std::unique_ptr< WKTNode > WKTNodePtr
Definition: io.hpp:519
Exception thrown when a factory can&#39;t create an instance of the requested object. ...
Definition: io.hpp:835
util::nn< IPROJStringExportablePtr > IPROJStringExportableNNPtr
Definition: io.hpp:448
util::nn< CompoundCRSPtr > CompoundCRSNNPtr
Definition: crs.hpp:717
Root exception class.
Definition: util.hpp:645
util::nn< GeodeticCRSPtr > GeodeticCRSNNPtr
Definition: crs.hpp:172
Database context.
Definition: io.hpp:612
std::unique_ptr< PROJStringFormatter > PROJStringFormatterPtr
Definition: io.hpp:294
Exception possibly thrown by WKTNode::createFrom() or WKTParser::createFromWKT(). ...
Definition: io.hpp:410
std::shared_ptr< Extent > ExtentPtr
Definition: io.hpp:56
util::nn< PrimeMeridianPtr > PrimeMeridianNNPtr
Definition: datum.hpp:163
util::nn< VerticalReferenceFramePtr > VerticalReferenceFrameNNPtr
Definition: datum.hpp:514
std::unique_ptr< WKTFormatter > WKTFormatterPtr
Definition: io.hpp:134
util::nn< ProjectedCRSPtr > ProjectedCRSNNPtr
Definition: crs.hpp:483
util::nn< DatabaseContextPtr > DatabaseContextNNPtr
Definition: io.hpp:128
util::nn< WKTNodePtr > WKTNodeNNPtr
Definition: io.hpp:521
util::nn< CRSPtr > CRSNNPtr
Definition: coordinateoperation.hpp:46
std::shared_ptr< UnitOfMeasure > UnitOfMeasurePtr
Definition: common.hpp:52
Builds object from an authority database.
Definition: io.hpp:680
std::shared_ptr< DatabaseContext > DatabaseContextPtr
Definition: io.hpp:126
util::nn< PROJStringFormatterPtr > PROJStringFormatterNNPtr
Definition: io.hpp:296
util::nn< WKTFormatterPtr > WKTFormatterNNPtr
Definition: io.hpp:136
util::nn< AuthorityFactoryPtr > AuthorityFactoryNNPtr
Definition: io.hpp:670
Interface for an object that can be exported to a PROJ string.
Definition: io.hpp:451
util::nn< GeodeticReferenceFramePtr > GeodeticReferenceFrameNNPtr
Definition: datum.hpp:350
Convention
Definition: io.hpp:156
Exception possibly thrown by IWKTExportable::exportToWKT() or IPROJStringExportable::exportToPROJStri...
Definition: io.hpp:393
util::nn< GeographicCRSPtr > GeographicCRSNNPtr
Definition: crs.hpp:57
Formatter to WKT strings.
Definition: io.hpp:143
util::nn< VerticalCRSPtr > VerticalCRSNNPtr
Definition: crs.hpp:63
Interface for an object that can be exported to WKT.
Definition: io.hpp:423
util::nn< DatumPtr > DatumNNPtr
Definition: datum.hpp:99
Parse a WKT string into the appropriate suclass of util::BaseObject.
Definition: io.hpp:566
util::nn< ConversionPtr > ConversionNNPtr
Definition: coordinateoperation.hpp:581
util::nn< ExtentPtr > ExtentNNPtr
Definition: io.hpp:57
std::shared_ptr< IPROJStringExportable > IPROJStringExportablePtr
Definition: io.hpp:446
ObjectType
Definition: io.hpp:746
std::shared_ptr< CoordinateSystem > CoordinateSystemPtr
Definition: coordinatesystem.hpp:266
Parse a PROJ string into the appropriate suclass of util::BaseObject.
Definition: io.hpp:587