diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-04-10 17:04:47 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-04-10 19:17:39 +0200 |
| commit | 35a9ffc2d147c04c3a58c48f16d7c748271e5003 (patch) | |
| tree | 45acf265ae4766d95dc11153045cc672afd14d12 /src | |
| parent | 21f0af0f8b56ab76b93aaf6ce962580ec7978fcb (diff) | |
| download | PROJ-35a9ffc2d147c04c3a58c48f16d7c748271e5003.tar.gz PROJ-35a9ffc2d147c04c3a58c48f16d7c748271e5003.zip | |
Add hard-coded definitions for OGC:AnsiDate/JulianDate/UnixTime
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/factory.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index fa2a0ef3..cf44024f 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -4951,6 +4951,76 @@ AuthorityFactory::createCoordinateReferenceSystem(const std::string &code, if (crs) { return NN_NO_CHECK(crs); } + + if (d->authority() == metadata::Identifier::OGC) { + if (code == "AnsiDate") { + // Derived from http://www.opengis.net/def/crs/OGC/0/AnsiDate + return crs::TemporalCRS::create( + util::PropertyMap() + // above URL indicates Julian Date" as name... likely wrong + .set(common::IdentifiedObject::NAME_KEY, "Ansi Date") + .set(metadata::Identifier::CODESPACE_KEY, d->authority()) + .set(metadata::Identifier::CODE_KEY, code), + datum::TemporalDatum::create( + util::PropertyMap().set( + common::IdentifiedObject::NAME_KEY, + "Epoch time for the ANSI date (1-Jan-1601, 00h00 UTC) " + "as day 1."), + common::DateTime::create("1600-12-31T00:00:00Z"), + datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), + cs::TemporalCountCS::create( + util::PropertyMap(), + cs::CoordinateSystemAxis::create( + util::PropertyMap().set( + common::IdentifiedObject::NAME_KEY, "Time"), + "T", cs::AxisDirection::FUTURE, + common::UnitOfMeasure("day", 0, + UnitOfMeasure::Type::TIME)))); + } + if (code == "JulianDate") { + // Derived from http://www.opengis.net/def/crs/OGC/0/JulianDate + return crs::TemporalCRS::create( + util::PropertyMap() + .set(common::IdentifiedObject::NAME_KEY, "Julian Date") + .set(metadata::Identifier::CODESPACE_KEY, d->authority()) + .set(metadata::Identifier::CODE_KEY, code), + datum::TemporalDatum::create( + util::PropertyMap().set( + common::IdentifiedObject::NAME_KEY, + "The beginning of the Julian period."), + common::DateTime::create("-4714-11-24T12:00:00Z"), + datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), + cs::TemporalCountCS::create( + util::PropertyMap(), + cs::CoordinateSystemAxis::create( + util::PropertyMap().set( + common::IdentifiedObject::NAME_KEY, "Time"), + "T", cs::AxisDirection::FUTURE, + common::UnitOfMeasure("day", 0, + UnitOfMeasure::Type::TIME)))); + } + if (code == "UnixTime") { + // Derived from http://www.opengis.net/def/crs/OGC/0/UnixTime + return crs::TemporalCRS::create( + util::PropertyMap() + .set(common::IdentifiedObject::NAME_KEY, "Unix Time") + .set(metadata::Identifier::CODESPACE_KEY, d->authority()) + .set(metadata::Identifier::CODE_KEY, code), + datum::TemporalDatum::create( + util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, + "Unix epoch"), + common::DateTime::create("1970-01-01T00:00:00Z"), + datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), + cs::TemporalCountCS::create( + util::PropertyMap(), + cs::CoordinateSystemAxis::create( + util::PropertyMap().set( + common::IdentifiedObject::NAME_KEY, "Time"), + "T", cs::AxisDirection::FUTURE, + common::UnitOfMeasure::SECOND))); + } + } + auto res = d->runWithCodeParam( "SELECT type FROM crs_view WHERE auth_name = ? AND code = ?", code); if (res.empty()) { |
