29 #ifndef IO_HH_INCLUDED 30 #define IO_HH_INCLUDED 49 class CoordinateSystem;
62 using DatumPtr = std::shared_ptr<Datum>;
63 using DatumNNPtr = util::nn<DatumPtr>;
66 using EllipsoidPtr = std::shared_ptr<Ellipsoid>;
67 using EllipsoidNNPtr = util::nn<EllipsoidPtr>;
70 using PrimeMeridianPtr = std::shared_ptr<PrimeMeridian>;
71 using PrimeMeridianNNPtr = util::nn<PrimeMeridianPtr>;
73 class GeodeticReferenceFrame;
74 using GeodeticReferenceFramePtr = std::shared_ptr<GeodeticReferenceFrame>;
75 using GeodeticReferenceFrameNNPtr = util::nn<GeodeticReferenceFramePtr>;
77 class VerticalReferenceFrame;
78 using VerticalReferenceFramePtr = std::shared_ptr<VerticalReferenceFrame>;
79 using VerticalReferenceFrameNNPtr = util::nn<VerticalReferenceFramePtr>;
84 using CRSPtr = std::shared_ptr<CRS>;
85 using CRSNNPtr = util::nn<CRSPtr>;
88 using GeodeticCRSPtr = std::shared_ptr<GeodeticCRS>;
89 using GeodeticCRSNNPtr = util::nn<GeodeticCRSPtr>;
92 using GeographicCRSPtr = std::shared_ptr<GeographicCRS>;
93 using GeographicCRSNNPtr = util::nn<GeographicCRSPtr>;
96 using VerticalCRSPtr = std::shared_ptr<VerticalCRS>;
97 using VerticalCRSNNPtr = util::nn<VerticalCRSPtr>;
100 using ProjectedCRSPtr = std::shared_ptr<ProjectedCRS>;
101 using ProjectedCRSNNPtr = util::nn<ProjectedCRSPtr>;
104 using CompoundCRSPtr = std::shared_ptr<CompoundCRS>;
105 using CompoundCRSNNPtr = util::nn<CompoundCRSPtr>;
108 namespace operation {
110 using ConversionPtr = std::shared_ptr<Conversion>;
111 using ConversionNNPtr = util::nn<ConversionPtr>;
113 class CoordinateOperation;
114 using CoordinateOperationPtr = std::shared_ptr<CoordinateOperation>;
115 using CoordinateOperationNNPtr = util::nn<CoordinateOperationPtr>;
124 class DatabaseContext;
147 enum class PROJ_DLL Version {
176 WKT2_2015_SIMPLIFIED = WKT2_SIMPLIFIED,
189 WKT2_2018_SIMPLIFIED,
196 create(
Convention convention = Convention::WKT2);
205 PROJ_DLL
bool isStrict()
const;
207 PROJ_DLL
const std::string &toString()
const;
212 setOutputId(
bool outputIdIn);
217 void startNode(
const std::string &keyword,
bool hasId);
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);
229 void pushOutputUnit(
bool outputUnitIn);
230 void popOutputUnit();
231 bool outputUnit()
const;
233 void pushOutputId(
bool outputIdIn);
235 bool outputId()
const;
238 void popAxisLinearUnit();
242 void popAxisAngularUnit();
245 void setAbridgedTransformation(
bool abriged);
246 bool abridgedTransformation()
const;
248 void setUseDerivingConversion(
bool useDerivingConversionIn);
249 bool useDerivingConversion()
const;
251 void setTOWGS84Parameters(
const std::vector<double> ¶ms);
252 const std::vector<double> &getTOWGS84Parameters()
const;
254 void setVDatumExtension(
const std::string &filename);
255 const std::string &getVDatumExtension()
const;
257 void setHDatumExtension(
const std::string &filename);
258 const std::string &getHDatumExtension()
const;
261 void startInversion();
262 void stopInversion();
263 bool isInverted()
const;
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;
287 PROJ_OPAQUE_PRIVATE_DATA
315 create(
Convention conventionIn = Convention::PROJ_5,
321 PROJ_DLL
void setUseETMercForTMerc(
bool flag);
323 PROJ_DLL
const std::string &toString()
const;
330 PROJ_DLL
void stopInversion();
331 bool isInverted()
const;
332 bool getUseETMercForTMerc()
const;
335 ingestPROJString(
const std::string &str);
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 ¶mName);
341 PROJ_DLL
void addParam(
const char *paramName,
double val);
342 PROJ_DLL
void addParam(
const std::string ¶mName,
double val);
343 PROJ_DLL
void addParam(
const char *paramName,
int val);
344 PROJ_DLL
void addParam(
const std::string ¶mName,
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 ¶mName,
const char *val);
348 PROJ_DLL
void addParam(
const std::string ¶mName,
349 const std::string &val);
350 PROJ_DLL
void addParam(
const char *paramName,
351 const std::vector<double> &vals);
353 std::set<std::string> getUsedGridNames()
const;
355 void setTOWGS84Parameters(
const std::vector<double> ¶ms);
356 const std::vector<double> &getTOWGS84Parameters()
const;
358 void setVDatumExtension(
const std::string &filename);
359 const std::string &getVDatumExtension()
const;
361 void setHDatumExtension(
const std::string &filename);
362 const std::string &getHDatumExtension()
const;
364 void setOmitProjLongLatIfPossible(
bool omit);
365 bool omitProjLongLatIfPossible()
const;
367 void setOmitZUnitConversion(
bool omit);
368 bool omitZUnitConversion()
const;
386 PROJ_OPAQUE_PRIVATE_DATA
397 PROJ_DLL
explicit FormattingException(
const std::string &message);
398 PROJ_DLL FormattingException(
const FormattingException &other);
399 PROJ_DLL
virtual ~FormattingException()
override;
401 static void Throw(
const char *msg) PROJ_NO_RETURN;
402 static void Throw(
const std::string &msg) PROJ_NO_RETURN;
414 PROJ_DLL
explicit ParsingException(
const std::string &message);
415 PROJ_DLL ParsingException(
const ParsingException &other);
416 PROJ_DLL
virtual ~ParsingException()
override;
503 PROJ_DLL std::string exportToPROJString(
527 PROJ_DLL
explicit WKTNode(
const std::string &valueIn);
532 PROJ_DLL
const std::string &value()
const;
533 PROJ_DLL
const std::vector<WKTNodeNNPtr> &children()
const;
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 541 PROJ_DLL std::string toString()
const;
543 PROJ_DLL
static WKTNodeNNPtr createFrom(
const std::string &wkt,
544 size_t indexStart = 0);
547 static WKTNodeNNPtr createFrom(
const std::string &wkt,
size_t indexStart,
553 PROJ_OPAQUE_PRIVATE_DATA
570 PROJ_DLL ~WKTParser();
573 PROJ_DLL WKTParser &setStrict(
bool strict);
574 PROJ_DLL std::vector<std::string> warningList()
const;
577 createFromWKT(
const std::string &wkt);
580 PROJ_OPAQUE_PRIVATE_DATA
591 PROJ_DLL ~PROJStringParser();
594 PROJ_DLL PROJStringParser &
597 PROJ_DLL std::vector<std::string> warningList()
const;
600 const std::string &projString);
603 PROJ_OPAQUE_PRIVATE_DATA
621 create(
const std::string &databasePath);
624 create(
const std::string &databasePath,
625 const std::vector<std::string> &auxiliaryDatabasePaths);
627 PROJ_DLL
const std::string &getPath()
const;
629 PROJ_DLL std::set<std::string> getAuthorities()
const;
631 PROJ_DLL std::vector<std::string> getDatabaseStructure()
const;
636 getSqliteHandle()
const;
640 void attachPJContext(
void *pjCtxt);
642 bool lookForGridAlternative(
const std::string &officialName,
643 std::string &projFilename,
644 std::string &projFormat,
bool &inverse);
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);
659 PROJ_OPAQUE_PRIVATE_DATA
689 createUnitOfMeasure(
const std::string &code)
const;
694 createPrimeMeridian(
const std::string &code)
const;
696 PROJ_DLL std::string identifyBodyFromSemiMajorAxis(
double a,
697 double tolerance)
const;
700 createEllipsoid(
const std::string &code)
const;
705 createGeodeticDatum(
const std::string &code)
const;
708 createVerticalDatum(
const std::string &code)
const;
711 createCoordinateSystem(
const std::string &code)
const;
714 createGeodeticCRS(
const std::string &code)
const;
717 createGeographicCRS(
const std::string &code)
const;
720 createVerticalCRS(
const std::string &code)
const;
723 createConversion(
const std::string &code)
const;
726 createProjectedCRS(
const std::string &code)
const;
729 createCompoundCRS(
const std::string &code)
const;
732 createCoordinateReferenceSystem(
const std::string &code)
const;
735 createCoordinateOperation(
const std::string &code,
736 bool usePROJAlternativeGridNames)
const;
738 PROJ_DLL std::vector<operation::CoordinateOperationNNPtr>
739 createFromCoordinateReferenceSystemCodes(
740 const std::string &sourceCRSCode,
741 const std::string &targetCRSCode)
const;
743 PROJ_DLL
const std::string &getAuthority() PROJ_CONST_DECL;
755 GEODETIC_REFERENCE_FRAME,
758 VERTICAL_REFERENCE_FRAME,
773 COORDINATE_OPERATION,
781 CONCATENATED_OPERATION,
784 PROJ_DLL std::set<std::string>
786 bool allowDeprecated =
true)
const;
788 PROJ_DLL std::string getDescriptionText(
const std::string &code)
const;
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;
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;
812 const std::string &authorityName);
814 crs::CRSNNPtr createCoordinateReferenceSystem(
const std::string &code,
815 bool allowCompound)
const;
818 bool geographicOnly)
const;
821 createCoordinateOperation(
const std::string &code,
bool allowConcatenated,
822 bool usePROJAlternativeGridNames)
const;
827 PROJ_OPAQUE_PRIVATE_DATA
839 PROJ_DLL
explicit FactoryException(
const std::string &message);
841 FactoryException(
const FactoryException &other);
842 PROJ_DLL ~FactoryException()
override;
855 const std::string &authority,
856 const std::string &code);
858 NoSuchAuthorityCodeException(
const NoSuchAuthorityCodeException &other);
859 PROJ_DLL ~NoSuchAuthorityCodeException()
override;
862 PROJ_DLL
const std::string &getAuthority()
const;
863 PROJ_DLL
const std::string &getAuthorityCode()
const;
866 PROJ_OPAQUE_PRIVATE_DATA
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
Exception thrown when an authority factory can't find the requested authority code.
Definition: io.hpp:851
util::nn< CoordinateSystemPtr > CoordinateSystemNNPtr
Definition: coordinatesystem.hpp:268
std::shared_ptr< AuthorityFactory > AuthorityFactoryPtr
Definition: io.hpp:668
std::unique_ptr< WKTNode > WKTNodePtr
Definition: io.hpp:519
Exception thrown when a factory can'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
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
util::nn< GeographicCRSPtr > GeographicCRSNNPtr
Definition: crs.hpp:57
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
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