/*!
\page general_doc General documentation
\section general_api_design General API design
The design of the class hierarchy is strongly derived from \ref ISO_19111_2019.
Classes for which the constructors are not directly accessible have their
instances constructed with create() methods. The returned object is a non-null
shared pointer. Such objects are immutable, and thread-safe.
TODO
\section general_properties General properties
All classes deriving from IdentifiedObject have general properties that can
be defined at creation time. Those properties are:
- osgeo::proj::metadata::Identifier::DESCRIPTION_KEY ("description"): the
natural language description of the meaning of the code value, provided a a string.
- osgeo::proj::metadata::Identifier::CODE_KEY ("code"): a numeric or
alphanumeric code, provided as a integer or a string. For example 4326, for
the EPSG:4326 "WGS84" GeographicalCRS
- osgeo::proj::metadata::Identifier::CODESPACE_KEY ("codespace"): the organization
responsible for definition and maintenance of the code., provided a a string.
For example "EPSG".
- osgeo::proj::metadata::Identifier::VERSION_KEY ("version"): the version
identifier for the namespace, provided a a string.
- osgeo::proj::metadata::Identifier::AUTHORITY_KEY ("authority"): a citation for the authority,
provided as a string or a osgeo::proj::metadata::Citation object. Often unused
- osgeo::proj::metadata::Identifier::URI_KEY ("uri"): the URI of the identifier,
provided as a string. Often unused
- osgeo::proj::common::IdentifiedObject::NAME_KEY ("name"): the name of a
osgeo::proj::common::IdentifiedObject, provided as a string or
osgeo::proj::metadata::IdentifierNNPtr.
- osgeo::proj::common::IdentifiedObject::IDENTIFIERS_KEY ("identifiers"):
the identifier(s) of a osgeo::proj::common::IdentifiedObject, provided as
a osgeo::proj::common::IdentifierNNPtr or a
osgeo::proj::util::ArrayOfBaseObjectNNPtr of
osgeo::proj::metadata::IdentifierNNPtr.
- osgeo::proj::common::IdentifiedObject::ALIAS_KEY ("alias"):
the alias(es) of a osgeo::proj::common::IdentifiedObject,
provided as string, a osgeo::proj::util::GenericNameNNPtr or a
osgeo::proj::util::ArrayOfBaseObjectNNPtr
of osgeo::proj::util::GenericNameNNPtr.
- osgeo::proj::common::IdentifiedObject::REMARKS_KEY ("remarks"):
the remarks of a osgeo::proj::common::IdentifiedObject,
provided as a string.
- osgeo::proj::common::IdentifiedObject::DEPRECATED_KEY ("deprecated"):
the deprecation flag of a osgeo::proj::common::IdentifiedObject,
provided as a boolean.
- osgeo::proj::common::ObjectUsage::SCOPE_KEY ("scope"):
the scope of a osgeo::proj::common::ObjectUsage, provided as a string.
- osgeo::proj::common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY ("domainOfValidity"):
the domain of validity of a osgeo::proj::common::ObjectUsage,
provided as a osgeo::proj::metadata::ExtentNNPtr.
- osgeo::proj::common::ObjectUsage::OBJECT_DOMAIN_KEY ("objectDomain"):
the object domain(s) of a osgeo::proj::common::ObjectUsage,
provided as a osgeo::proj::common::ObjectDomainNNPtr or a
osgeo::proj::util::ArrayOfBaseObjectNNPtr
of osgeo::proj::common::ObjectDomainNNPtr.
\section standards Applicable standards
\subsection ISO_19111 ISO:19111 / OGC Topic 2 standard
Topic 2 - Spatial referencing by coordinates.
This is an Abstract Specification describes the data elements, relationships and
associated metadata required for spatial referencing by coordinates. It describes
Coordinate Reference Systems (CRS), coordinate systems (CS) and coordinate
transformation or coordinate conversion between two different coordinate
reference systems.
\subsubsection ISO_19111_2019 ISO 19111:2019
This is the revision mostly used for PROJ C++ modelling.
[OGC 18-005r4, 2019-02-08, ISO 19111:2019]
(http://docs.opengeospatial.org/as/18-005r4/18-005r4.html)
\subsubsection ISO_19111_2007 ISO 19111:2007
The precedent version of the specification was:
[OGC 08-015r2, 2010-04-27, ISO 19111:2007]
(http://portal.opengeospatial.org/files/?artifact_id=39049)
\subsection WKT2 WKT2 standard
Well-known text representation of coordinate reference systems.
Well-known Text (WKT) offers a compact machine- and human-readable
representation of the critical elements of coordinate reference system (CRS)
definitions, and coordinate operations. This is an implementation of
\ref ISO_19111
PROJ implements the two following revisions of the standard:
\subsubsection WKT2_2019 WKT2:2019
[OGC 18-010r7, 2019-06-24, WKT2-2019]
(http://docs.opengeospatial.org/is/18-010r7/18-010r7.html)
\subsubsection WKT2_2015 WKT2:2015
[OGC 12-063r5, 2015-05-01, ISO 19162:2015(E), WKT2-2015]
(http://docs.opengeospatial.org/is/12-063r5/12-063r5.html)
\subsection WKT1 WKT1 specification
Older specifications of well-known text representation of coordinate reference
systems are also supported by PROJ, mostly for compatibility with legacy
systems, or older versions of GDAL.
GDAL v2.4 and earlier mostly implements:
[OGC 01-009, 2001-01-12, OpenGIS Coordinate Transformation Service Implementation Specification]
(http://portal.opengeospatial.org/files/?artifact_id=999)
The [GDAL documentation, OGC WKT Coordinate System Issues]
(https://gdal.org/tutorials/wktproblems.html) discusses issues, and GDAL implementation
choices.
An older specification of WKT1 is/was used by some software packages:
[OGC 99-049, 1999-05-05, OpenGIS Simple Features Specification For SQL v1.1]
(http://portal.opengeospatial.org/files/?artifact_id=829)
\subsection ISO_19115 ISO 19115 (Metadata)
Defines the schema required for describing geographic information and services.
It provides information about the identification, the extent, the quality, the
spatial and temporal schema, spatial reference, and distribution of digital
geographic data.
PROJ implements a simplified subset of ISO 19115.
\subsection GeoAPI GeoAPI
A set of Java and Python language programming interfaces for geospatial
applications.
[GeoAPI main page](http://www.geoapi.org/)
[GeoAPI Javadoc](http://www.geoapi.org/3.0/javadoc/index.html)
[OGC GeoAPI Implementation Specification]
(http://www.opengeospatial.org/standards/geoapi)
*/