[Git][debian-gis-team/proj][experimental] 5 commits: New upstream version 9.2.0~rc2
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Fri Feb 24 19:29:18 GMT 2023
Bas Couwenberg pushed to branch experimental at Debian GIS Project / proj
Commits:
047b9b34 by Bas Couwenberg at 2023-02-24T20:09:53+01:00
New upstream version 9.2.0~rc2
- - - - -
e270c415 by Bas Couwenberg at 2023-02-24T20:10:17+01:00
Update upstream source from tag 'upstream/9.2.0_rc2'
Update to upstream version '9.2.0~rc2'
with Debian dir b5351a2eb98a0eecc2f688ac24a677658914b295
- - - - -
28e6f04e by Bas Couwenberg at 2023-02-24T20:11:00+01:00
New upstream release candidate.
- - - - -
b86a4e88 by Bas Couwenberg at 2023-02-24T20:12:48+01:00
Drop pr3633.patch, included upstream.
- - - - -
27631b67 by Bas Couwenberg at 2023-02-24T20:13:10+01:00
Set distribution to experimental.
- - - - -
11 changed files:
- NEWS
- data/sql/proj_db_table_defs.sql
- debian/changelog
- − debian/patches/pr3633.patch
- − debian/patches/series
- src/iso19111/coordinates.cpp
- src/iso19111/datum.cpp
- src/iso19111/factory.cpp
- test/unit/gie_self_tests.cpp
- test/unit/test_crs.cpp
- test/unit/test_io.cpp
Changes:
=====================================
NEWS
=====================================
@@ -144,6 +144,7 @@
o WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (#3618)
+ o projinfo: fix long option name --source-crs (#3601)
9.1.1 Release Notes
@@ -208,8 +209,6 @@
o Link geodtest against libm when available (#3341)
- o projinfo: fix long option name --source-crs (#3601)
-
9.1.0 Release Notes
-------------------
=====================================
data/sql/proj_db_table_defs.sql
=====================================
@@ -1411,75 +1411,75 @@ END;
CREATE VIEW coordinate_operation_view AS
- SELECT 'grid_transformation' AS table_name, auth_name, code, name,
+ SELECT CAST('grid_transformation' AS TEXT) AS table_name, auth_name, code, name,
description,
method_auth_name, method_code, method_name, source_crs_auth_name,
source_crs_code, target_crs_auth_name, target_crs_code,
accuracy, deprecated FROM grid_transformation
UNION ALL
- SELECT 'helmert_transformation' AS table_name, auth_name, code, name,
+ SELECT CAST('helmert_transformation' AS TEXT) AS table_name, auth_name, code, name,
description,
method_auth_name, method_code, method_name, source_crs_auth_name,
source_crs_code, target_crs_auth_name, target_crs_code,
accuracy, deprecated FROM helmert_transformation
UNION ALL
- SELECT 'other_transformation' AS table_name, auth_name, code, name,
+ SELECT CAST('other_transformation' AS TEXT) AS table_name, auth_name, code, name,
description,
method_auth_name, method_code, method_name, source_crs_auth_name,
source_crs_code, target_crs_auth_name, target_crs_code,
accuracy, deprecated FROM other_transformation
UNION ALL
- SELECT 'concatenated_operation' AS table_name, auth_name, code, name,
+ SELECT CAST('concatenated_operation' AS TEXT) AS table_name, auth_name, code, name,
description,
- NULL, NULL, NULL, source_crs_auth_name,
+ CAST(NULL AS TEXT) as method_auth_name, CAST(NULL AS INTEGER_OR_TEXT) as method_code, CAST(NULL AS TEXT) as method_name, source_crs_auth_name,
source_crs_code, target_crs_auth_name, target_crs_code,
accuracy, deprecated FROM concatenated_operation
;
CREATE VIEW coordinate_operation_with_conversion_view AS
SELECT auth_name, code, table_name AS type FROM coordinate_operation_view UNION ALL
- SELECT auth_name, code, 'conversion' FROM conversion_table;
+ SELECT auth_name, code, CAST('conversion' AS TEXT) FROM conversion_table;
CREATE VIEW crs_view AS
- SELECT 'geodetic_crs' AS table_name, auth_name, code, name, type,
+ SELECT CAST('geodetic_crs' AS TEXT) AS table_name, auth_name, code, name, type,
description,
deprecated FROM geodetic_crs
UNION ALL
- SELECT 'projected_crs' AS table_name, auth_name, code, name, 'projected',
+ SELECT CAST('projected_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('projected' AS TEXT),
description,
deprecated FROM projected_crs
UNION ALL
- SELECT 'vertical_crs' AS table_name, auth_name, code, name, 'vertical',
+ SELECT CAST('vertical_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('vertical' AS TEXT),
description,
deprecated FROM vertical_crs
UNION ALL
- SELECT 'compound_crs' AS table_name, auth_name, code, name, 'compound',
+ SELECT CAST('compound_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('compound' AS TEXT),
description,
deprecated FROM compound_crs
;
CREATE VIEW object_view AS
- SELECT 'unit_of_measure' AS table_name, auth_name, code, name, NULL as type, deprecated FROM unit_of_measure
+ SELECT CAST('unit_of_measure' AS TEXT) AS table_name, auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM unit_of_measure
UNION ALL
- SELECT 'celestial_body', auth_name, code, name, NULL, 0 FROM celestial_body
+ SELECT CAST('celestial_body' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, CAST(0 AS BOOLEAN) AS deprecated FROM celestial_body
UNION ALL
- SELECT 'ellipsoid', auth_name, code, name, NULL, deprecated FROM ellipsoid
+ SELECT CAST('ellipsoid' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM ellipsoid
UNION ALL
- SELECT 'extent', auth_name, code, name, NULL, deprecated FROM extent
+ SELECT CAST('extent' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM extent
UNION ALL
- SELECT 'prime_meridian', auth_name, code, name, NULL, deprecated FROM prime_meridian
+ SELECT CAST('prime_meridian' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM prime_meridian
UNION ALL
- SELECT 'geodetic_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END, deprecated FROM geodetic_datum
+ SELECT CAST('geodetic_datum' AS TEXT), auth_name, code, name, CAST(CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END AS TEXT), deprecated FROM geodetic_datum
UNION ALL
- SELECT 'vertical_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END, deprecated FROM vertical_datum
+ SELECT CAST('vertical_datum' AS TEXT), auth_name, code, name, CAST(CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END AS TEXT), deprecated FROM vertical_datum
UNION ALL
- SELECT 'axis', auth_name, code, name, NULL, 0 as deprecated FROM axis
+ SELECT CAST('axis' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, CAST(0 AS BOOLEAN) AS deprecated FROM axis
UNION ALL
SELECT table_name, auth_name, code, name, type, deprecated FROM crs_view
UNION ALL
- SELECT 'conversion', auth_name, code, name, NULL, deprecated FROM conversion_table
+ SELECT CAST('conversion' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM conversion_table
UNION ALL
- SELECT table_name, auth_name, code, name, NULL, deprecated FROM coordinate_operation_view
+ SELECT table_name, auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM coordinate_operation_view
;
CREATE VIEW authority_list AS
=====================================
debian/changelog
=====================================
@@ -1,8 +1,10 @@
-proj (9.2.0~rc1-1~exp5) UNRELEASED; urgency=medium
+proj (9.2.0~rc2-1~exp1) experimental; urgency=medium
+ * New upstream release candidate.
* Update symbols for other architectures.
+ * Drop pr3633.patch, included upstream.
- -- Bas Couwenberg <sebastic at debian.org> Thu, 23 Feb 2023 19:24:40 +0100
+ -- Bas Couwenberg <sebastic at debian.org> Fri, 24 Feb 2023 20:12:51 +0100
proj (9.2.0~rc1-1~exp4) experimental; urgency=medium
=====================================
debian/patches/pr3633.patch deleted
=====================================
@@ -1,262 +0,0 @@
-Description: JSON/WKT: avoid precision issues on non-Intel architectures on coordinate epochs
-Author: Even Rouault <even.rouault at spatialys.com>
-Origin: https://github.com/OSGeo/PROJ/pull/3633
-Bug: https://github.com/OSGeo/PROJ/issues/3632
-
---- a/src/iso19111/coordinates.cpp
-+++ b/src/iso19111/coordinates.cpp
-@@ -40,6 +40,7 @@
-
- #include "proj_json_streaming_writer.hpp"
-
-+#include <cmath>
- #include <limits>
-
- using namespace NS_PROJ::internal;
-@@ -149,6 +150,17 @@ CoordinateMetadata::coordinateEpoch() PR
-
- // ---------------------------------------------------------------------------
-
-+// Avoid rounding issues due to year -> second (SI unit) -> year roundtrips
-+static double getRoundedEpochInDecimalYear(double year) {
-+ // Try to see if the value is close to xxxx.yyy decimal year.
-+ if (std::fabs(1000 * year - std::round(1000 * year)) <= 1e-3) {
-+ year = std::round(1000 * year) / 1000.0;
-+ }
-+ return year;
-+}
-+
-+// ---------------------------------------------------------------------------
-+
- /** \brief Get the coordinate epoch associated with this CoordinateMetadata
- * object, as decimal year.
- *
-@@ -157,8 +169,9 @@ CoordinateMetadata::coordinateEpoch() PR
- */
- double CoordinateMetadata::coordinateEpochAsDecimalYear() PROJ_PURE_DEFN {
- if (d->coordinateEpoch_.has_value()) {
-- return d->coordinateEpoch_->coordinateEpoch().convertToUnit(
-- common::UnitOfMeasure::YEAR);
-+ return getRoundedEpochInDecimalYear(
-+ d->coordinateEpoch_->coordinateEpoch().convertToUnit(
-+ common::UnitOfMeasure::YEAR));
- }
- return std::numeric_limits<double>::quiet_NaN();
- }
---- a/src/iso19111/datum.cpp
-+++ b/src/iso19111/datum.cpp
-@@ -119,11 +119,23 @@ void Datum::Private::exportAnchorDefinit
-
- // ---------------------------------------------------------------------------
-
-+// Avoid rounding issues due to year -> second (SI unit) -> year roundtrips
-+static double getRoundedEpochInDecimalYear(double year) {
-+ // Try to see if the value is close to xxxx.yyy decimal year.
-+ if (std::fabs(1000 * year - std::round(1000 * year)) <= 1e-3) {
-+ year = std::round(1000 * year) / 1000.0;
-+ }
-+ return year;
-+}
-+
-+// ---------------------------------------------------------------------------
-+
- void Datum::Private::exportAnchorEpoch(io::WKTFormatter *formatter) const {
- if (anchorEpoch->has_value()) {
- formatter->startNode(io::WKTConstants::ANCHOREPOCH, false);
-- formatter->add(
-- (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR));
-+ const double year =
-+ (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR);
-+ formatter->add(getRoundedEpochInDecimalYear(year));
- formatter->endNode();
- }
- }
-@@ -145,7 +157,9 @@ void Datum::Private::exportAnchorEpoch(i
- if (anchorEpoch->has_value()) {
- auto writer = formatter->writer();
- writer->AddObjKey("anchor_epoch");
-- writer->Add((*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR));
-+ const double year =
-+ (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR);
-+ writer->Add(getRoundedEpochInDecimalYear(year));
- }
- }
-
---- a/test/unit/test_io.cpp
-+++ b/test/unit/test_io.cpp
-@@ -13163,11 +13163,13 @@ TEST(json_import, geodetic_reference_fra
- // ---------------------------------------------------------------------------
-
- TEST(json_import, geodetic_reference_frame_with_anchor_epoch) {
-+ // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures
-+ // (cf https://github.com/OSGeo/PROJ/issues/3632)
- auto json = "{\n"
- " \"$schema\": \"foo\",\n"
- " \"type\": \"GeodeticReferenceFrame\",\n"
- " \"name\": \"my_name\",\n"
-- " \"anchor_epoch\": 2002.5,\n"
-+ " \"anchor_epoch\": 0,\n"
- " \"ellipsoid\": {\n"
- " \"name\": \"WGS 84\",\n"
- " \"semi_major_axis\": 6378137,\n"
-@@ -15537,12 +15539,14 @@ TEST(json_import, vertical_crs_with_geoi
- // ---------------------------------------------------------------------------
-
- TEST(json_import, vertical_reference_frame_with_anchor_epoch) {
-+ // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures
-+ // (cf https://github.com/OSGeo/PROJ/issues/3632)
- auto json = "{\n"
- " \"$schema\": \"foo\",\n"
- " \"type\": \"VerticalReferenceFrame\",\n"
- " \"name\": \"my_name\",\n"
- " \"anchor\": \"my_anchor_definition\",\n"
-- " \"anchor_epoch\": 2002.5\n"
-+ " \"anchor_epoch\": 0\n"
- "}";
- auto obj = createFromUserInput(json, nullptr);
- auto vrf = nn_dynamic_pointer_cast<VerticalReferenceFrame>(obj);
---- a/test/unit/gie_self_tests.cpp
-+++ b/test/unit/gie_self_tests.cpp
-@@ -1189,13 +1189,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj
-
- // Test a point along the equator.
- // The same point, but in two different representations.
-- input.xyz.x = 0; // Lat in deg
-- input.xyz.y = 140; // Long in deg
-- input.xyz.z = 0;
--
-- input_over.xyz.x = 0; // Lat in deg
-- input_over.xyz.y = -220; // Long in deg
-- input_over.xyz.z = 0;
-+ input.xyzt.x = 0; // Lat in deg
-+ input.xyzt.y = 140; // Long in deg
-+ input.xyzt.z = 0;
-+ input.xyzt.t = HUGE_VAL;
-+
-+ input_over.xyzt.x = 0; // Lat in deg
-+ input_over.xyzt.y = -220; // Long in deg
-+ input_over.xyzt.z = 0;
-+ input_over.xyzt.t = HUGE_VAL;
-
- auto output = proj_trans(P, PJ_FWD, input);
- auto output_over = proj_trans(P, PJ_FWD, input_over);
-@@ -1230,9 +1232,10 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- ASSERT_TRUE(Pnormalized->over);
-
- PJ_COORD input_over_normalized;
-- input_over_normalized.xyz.x = -220; // Long in deg
-- input_over_normalized.xyz.y = 0; // Lat in deg
-- input_over_normalized.xyz.z = 0;
-+ input_over_normalized.xyzt.x = -220; // Long in deg
-+ input_over_normalized.xyzt.y = 0; // Lat in deg
-+ input_over_normalized.xyzt.z = 0;
-+ input_over_normalized.xyzt.t = HUGE_VAL;
- auto output_over_normalized =
- proj_trans(Pnormalized, PJ_FWD, input_over_normalized);
- EXPECT_NEAR(output_over_normalized.xyz.x, -24490287.974520184, 1e-8);
-@@ -1253,13 +1256,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- PJ_COORD input;
- PJ_COORD input_notOver;
-
-- input.xyz.x = 0; // Lat in deg
-- input.xyz.y = 140; // Long in deg
-- input.xyz.z = 0;
--
-- input_notOver.xyz.x = 0; // Lat in deg
-- input_notOver.xyz.y = -220; // Long in deg
-- input_notOver.xyz.z = 0;
-+ input.xyzt.x = 0; // Lat in deg
-+ input.xyzt.y = 140; // Long in deg
-+ input.xyzt.z = 0;
-+ input.xyzt.t = HUGE_VAL;
-+
-+ input_notOver.xyzt.x = 0; // Lat in deg
-+ input_notOver.xyzt.y = -220; // Long in deg
-+ input_notOver.xyzt.z = 0;
-+ input_notOver.xyzt.t = HUGE_VAL;
-
- auto output = proj_trans(P, PJ_FWD, input);
- auto output_notOver = proj_trans(P, PJ_FWD, input_notOver);
-@@ -1282,13 +1287,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- PJ_COORD input;
- PJ_COORD input_notOver;
-
-- input.xyz.x = 0; // Lat in deg
-- input.xyz.y = 140; // Long in deg
-- input.xyz.z = 0;
--
-- input_notOver.xyz.x = 0; // Lat in deg
-- input_notOver.xyz.y = -220; // Long in deg
-- input_notOver.xyz.z = 0;
-+ input.xyzt.x = 0; // Lat in deg
-+ input.xyzt.y = 140; // Long in deg
-+ input.xyzt.z = 0;
-+ input.xyzt.t = HUGE_VAL;
-+
-+ input_notOver.xyzt.x = 0; // Lat in deg
-+ input_notOver.xyzt.y = -220; // Long in deg
-+ input_notOver.xyzt.z = 0;
-+ input_notOver.xyzt.t = HUGE_VAL;
-
- auto output = proj_trans(P, PJ_FWD, input);
- auto output_notOver = proj_trans(P, PJ_FWD, input_notOver);
-@@ -1313,13 +1320,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- PJ_COORD input;
- PJ_COORD input_over;
-
-- input.xyz.x = 0; // Lat in deg
-- input.xyz.y = 140; // Long in deg
-- input.xyz.z = 0;
--
-- input_over.xyz.x = 0; // Lat in deg
-- input_over.xyz.y = -220; // Long in deg
-- input_over.xyz.z = 0;
-+ input.xyzt.x = 0; // Lat in deg
-+ input.xyzt.y = 140; // Long in deg
-+ input.xyzt.z = 0;
-+ input.xyzt.t = HUGE_VAL;
-+
-+ input_over.xyzt.x = 0; // Lat in deg
-+ input_over.xyzt.y = -220; // Long in deg
-+ input_over.xyzt.z = 0;
-+ input_over.xyzt.t = HUGE_VAL;
-
- auto output = proj_trans(P, PJ_FWD, input);
- auto output_over = proj_trans(P, PJ_FWD, input_over);
-@@ -1337,9 +1346,10 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- }
-
- PJ_COORD input_over_normalized;
-- input_over_normalized.xyz.x = -220; // Long in deg
-- input_over_normalized.xyz.y = 0; // Lat in deg
-- input_over_normalized.xyz.z = 0;
-+ input_over_normalized.xyzt.x = -220; // Long in deg
-+ input_over_normalized.xyzt.y = 0; // Lat in deg
-+ input_over_normalized.xyzt.z = 0;
-+ input_over_normalized.xyzt.t = HUGE_VAL;
- auto output_over_normalized =
- proj_trans(Pnormalized, PJ_FWD, input_over_normalized);
- EXPECT_NEAR(output_over_normalized.xyz.x, 4980122.749364435, 1e-8);
-@@ -1360,13 +1370,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj
- PJ_COORD input;
- PJ_COORD input_over;
-
-- input.xyz.x = 0; // Lat in deg
-- input.xyz.y = 140; // Long in deg
-- input.xyz.z = 0;
--
-- input_over.xyz.x = 0; // Lat in deg
-- input_over.xyz.y = -220; // Long in deg
-- input_over.xyz.z = 0;
-+ input.xyzt.x = 0; // Lat in deg
-+ input.xyzt.y = 140; // Long in deg
-+ input.xyzt.z = 0;
-+ input.xyzt.t = HUGE_VAL;
-+
-+ input_over.xyzt.x = 0; // Lat in deg
-+ input_over.xyzt.y = -220; // Long in deg
-+ input_over.xyzt.z = 0;
-+ input_over.xyzt.t = HUGE_VAL;
-
- auto output = proj_trans(P, PJ_FWD, input);
- auto output_over = proj_trans(P, PJ_FWD, input_over);
=====================================
debian/patches/series deleted
=====================================
@@ -1 +0,0 @@
-pr3633.patch
=====================================
src/iso19111/coordinates.cpp
=====================================
@@ -40,6 +40,7 @@
#include "proj_json_streaming_writer.hpp"
+#include <cmath>
#include <limits>
using namespace NS_PROJ::internal;
@@ -149,6 +150,17 @@ CoordinateMetadata::coordinateEpoch() PROJ_PURE_DEFN {
// ---------------------------------------------------------------------------
+// Avoid rounding issues due to year -> second (SI unit) -> year roundtrips
+static double getRoundedEpochInDecimalYear(double year) {
+ // Try to see if the value is close to xxxx.yyy decimal year.
+ if (std::fabs(1000 * year - std::round(1000 * year)) <= 1e-3) {
+ year = std::round(1000 * year) / 1000.0;
+ }
+ return year;
+}
+
+// ---------------------------------------------------------------------------
+
/** \brief Get the coordinate epoch associated with this CoordinateMetadata
* object, as decimal year.
*
@@ -157,8 +169,9 @@ CoordinateMetadata::coordinateEpoch() PROJ_PURE_DEFN {
*/
double CoordinateMetadata::coordinateEpochAsDecimalYear() PROJ_PURE_DEFN {
if (d->coordinateEpoch_.has_value()) {
- return d->coordinateEpoch_->coordinateEpoch().convertToUnit(
- common::UnitOfMeasure::YEAR);
+ return getRoundedEpochInDecimalYear(
+ d->coordinateEpoch_->coordinateEpoch().convertToUnit(
+ common::UnitOfMeasure::YEAR));
}
return std::numeric_limits<double>::quiet_NaN();
}
=====================================
src/iso19111/datum.cpp
=====================================
@@ -119,11 +119,23 @@ void Datum::Private::exportAnchorDefinition(io::WKTFormatter *formatter) const {
// ---------------------------------------------------------------------------
+// Avoid rounding issues due to year -> second (SI unit) -> year roundtrips
+static double getRoundedEpochInDecimalYear(double year) {
+ // Try to see if the value is close to xxxx.yyy decimal year.
+ if (std::fabs(1000 * year - std::round(1000 * year)) <= 1e-3) {
+ year = std::round(1000 * year) / 1000.0;
+ }
+ return year;
+}
+
+// ---------------------------------------------------------------------------
+
void Datum::Private::exportAnchorEpoch(io::WKTFormatter *formatter) const {
if (anchorEpoch->has_value()) {
formatter->startNode(io::WKTConstants::ANCHOREPOCH, false);
- formatter->add(
- (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR));
+ const double year =
+ (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR);
+ formatter->add(getRoundedEpochInDecimalYear(year));
formatter->endNode();
}
}
@@ -145,7 +157,9 @@ void Datum::Private::exportAnchorEpoch(io::JSONFormatter *formatter) const {
if (anchorEpoch->has_value()) {
auto writer = formatter->writer();
writer->AddObjKey("anchor_epoch");
- writer->Add((*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR));
+ const double year =
+ (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR);
+ writer->Add(getRoundedEpochInDecimalYear(year));
}
}
=====================================
src/iso19111/factory.cpp
=====================================
@@ -3422,7 +3422,11 @@ DatabaseContext::getAliasFromOfficialName(const std::string &officialName,
}
sql += " ORDER BY deprecated";
auto res = d->run(sql, {officialName});
- if (res.empty()) {
+ // Sorry for the hack excluding NAD83 + geographic_3D_crs, but otherwise
+ // EPSG has a weird alias from NAD83 to EPSG:4152 which happens to be
+ // NAD83(HARN), and that's definitely not desirable.
+ if (res.empty() &&
+ !(officialName == "NAD83" && tableName == "geographic_3D_crs")) {
res = d->run(
"SELECT auth_name, code FROM alias_name WHERE table_name = ? AND "
"alt_name = ? AND source IN ('EPSG', 'PROJ')",
=====================================
test/unit/gie_self_tests.cpp
=====================================
@@ -1189,13 +1189,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
// Test a point along the equator.
// The same point, but in two different representations.
- input.xyz.x = 0; // Lat in deg
- input.xyz.y = 140; // Long in deg
- input.xyz.z = 0;
+ input.xyzt.x = 0; // Lat in deg
+ input.xyzt.y = 140; // Long in deg
+ input.xyzt.z = 0;
+ input.xyzt.t = HUGE_VAL;
- input_over.xyz.x = 0; // Lat in deg
- input_over.xyz.y = -220; // Long in deg
- input_over.xyz.z = 0;
+ input_over.xyzt.x = 0; // Lat in deg
+ input_over.xyzt.y = -220; // Long in deg
+ input_over.xyzt.z = 0;
+ input_over.xyzt.t = HUGE_VAL;
auto output = proj_trans(P, PJ_FWD, input);
auto output_over = proj_trans(P, PJ_FWD, input_over);
@@ -1230,9 +1232,10 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
ASSERT_TRUE(Pnormalized->over);
PJ_COORD input_over_normalized;
- input_over_normalized.xyz.x = -220; // Long in deg
- input_over_normalized.xyz.y = 0; // Lat in deg
- input_over_normalized.xyz.z = 0;
+ input_over_normalized.xyzt.x = -220; // Long in deg
+ input_over_normalized.xyzt.y = 0; // Lat in deg
+ input_over_normalized.xyzt.z = 0;
+ input_over_normalized.xyzt.t = HUGE_VAL;
auto output_over_normalized =
proj_trans(Pnormalized, PJ_FWD, input_over_normalized);
EXPECT_NEAR(output_over_normalized.xyz.x, -24490287.974520184, 1e-8);
@@ -1253,13 +1256,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
PJ_COORD input;
PJ_COORD input_notOver;
- input.xyz.x = 0; // Lat in deg
- input.xyz.y = 140; // Long in deg
- input.xyz.z = 0;
+ input.xyzt.x = 0; // Lat in deg
+ input.xyzt.y = 140; // Long in deg
+ input.xyzt.z = 0;
+ input.xyzt.t = HUGE_VAL;
- input_notOver.xyz.x = 0; // Lat in deg
- input_notOver.xyz.y = -220; // Long in deg
- input_notOver.xyz.z = 0;
+ input_notOver.xyzt.x = 0; // Lat in deg
+ input_notOver.xyzt.y = -220; // Long in deg
+ input_notOver.xyzt.z = 0;
+ input_notOver.xyzt.t = HUGE_VAL;
auto output = proj_trans(P, PJ_FWD, input);
auto output_notOver = proj_trans(P, PJ_FWD, input_notOver);
@@ -1282,13 +1287,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
PJ_COORD input;
PJ_COORD input_notOver;
- input.xyz.x = 0; // Lat in deg
- input.xyz.y = 140; // Long in deg
- input.xyz.z = 0;
+ input.xyzt.x = 0; // Lat in deg
+ input.xyzt.y = 140; // Long in deg
+ input.xyzt.z = 0;
+ input.xyzt.t = HUGE_VAL;
- input_notOver.xyz.x = 0; // Lat in deg
- input_notOver.xyz.y = -220; // Long in deg
- input_notOver.xyz.z = 0;
+ input_notOver.xyzt.x = 0; // Lat in deg
+ input_notOver.xyzt.y = -220; // Long in deg
+ input_notOver.xyzt.z = 0;
+ input_notOver.xyzt.t = HUGE_VAL;
auto output = proj_trans(P, PJ_FWD, input);
auto output_notOver = proj_trans(P, PJ_FWD, input_notOver);
@@ -1313,13 +1320,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
PJ_COORD input;
PJ_COORD input_over;
- input.xyz.x = 0; // Lat in deg
- input.xyz.y = 140; // Long in deg
- input.xyz.z = 0;
+ input.xyzt.x = 0; // Lat in deg
+ input.xyzt.y = 140; // Long in deg
+ input.xyzt.z = 0;
+ input.xyzt.t = HUGE_VAL;
- input_over.xyz.x = 0; // Lat in deg
- input_over.xyz.y = -220; // Long in deg
- input_over.xyz.z = 0;
+ input_over.xyzt.x = 0; // Lat in deg
+ input_over.xyzt.y = -220; // Long in deg
+ input_over.xyzt.z = 0;
+ input_over.xyzt.t = HUGE_VAL;
auto output = proj_trans(P, PJ_FWD, input);
auto output_over = proj_trans(P, PJ_FWD, input_over);
@@ -1337,9 +1346,10 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
}
PJ_COORD input_over_normalized;
- input_over_normalized.xyz.x = -220; // Long in deg
- input_over_normalized.xyz.y = 0; // Lat in deg
- input_over_normalized.xyz.z = 0;
+ input_over_normalized.xyzt.x = -220; // Long in deg
+ input_over_normalized.xyzt.y = 0; // Lat in deg
+ input_over_normalized.xyzt.z = 0;
+ input_over_normalized.xyzt.t = HUGE_VAL;
auto output_over_normalized =
proj_trans(Pnormalized, PJ_FWD, input_over_normalized);
EXPECT_NEAR(output_over_normalized.xyz.x, 4980122.749364435, 1e-8);
@@ -1360,13 +1370,15 @@ TEST(gie, proj_create_crs_to_crs_from_pj_force_over) {
PJ_COORD input;
PJ_COORD input_over;
- input.xyz.x = 0; // Lat in deg
- input.xyz.y = 140; // Long in deg
- input.xyz.z = 0;
+ input.xyzt.x = 0; // Lat in deg
+ input.xyzt.y = 140; // Long in deg
+ input.xyzt.z = 0;
+ input.xyzt.t = HUGE_VAL;
- input_over.xyz.x = 0; // Lat in deg
- input_over.xyz.y = -220; // Long in deg
- input_over.xyz.z = 0;
+ input_over.xyzt.x = 0; // Lat in deg
+ input_over.xyzt.y = -220; // Long in deg
+ input_over.xyzt.z = 0;
+ input_over.xyzt.t = HUGE_VAL;
auto output = proj_trans(P, PJ_FWD, input);
auto output_over = proj_trans(P, PJ_FWD, input_over);
=====================================
test/unit/test_crs.cpp
=====================================
@@ -588,6 +588,31 @@ TEST(crs, geographic3D_crs_as_WKT1_ESRI_database) {
// ---------------------------------------------------------------------------
+TEST(crs, geographic3D_NAD83_as_WKT1_ESRI_database) {
+ auto dbContext = DatabaseContext::create();
+ auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(
+ "GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\","
+ "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],"
+ "PRIMEM[\"Greenwich\",0.0],"
+ "UNIT[\"Degree\",0.0174532925199433]],"
+ "VERTCS[\"NAD_1983\",DATUM[\"D_North_American_1983\","
+ "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],"
+ "PARAMETER[\"Vertical_Shift\",0.0],"
+ "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]");
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ WKTFormatterNNPtr f(
+ WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext));
+ const auto wkt = "GEOGCS[\"GCS_NAD83\",DATUM[\"D_North_American_1983\","
+ "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],"
+ "PRIMEM[\"Greenwich\",0.0],"
+ "UNIT[\"Degree\",0.0174532925199433],"
+ "LINUNIT[\"Meter\",1.0]]";
+ EXPECT_EQ(crs->exportToWKT(f.get()), wkt);
+}
+
+// ---------------------------------------------------------------------------
+
TEST(crs, GeographicCRS_is2DPartOf3D) {
EXPECT_TRUE(GeographicCRS::EPSG_4326->is2DPartOf3D(
NN_NO_CHECK(GeographicCRS::EPSG_4979.get())));
=====================================
test/unit/test_io.cpp
=====================================
@@ -13163,11 +13163,13 @@ TEST(json_import, geodetic_reference_frame_with_explicit_prime_meridian) {
// ---------------------------------------------------------------------------
TEST(json_import, geodetic_reference_frame_with_anchor_epoch) {
+ // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures
+ // (cf https://github.com/OSGeo/PROJ/issues/3632)
auto json = "{\n"
" \"$schema\": \"foo\",\n"
" \"type\": \"GeodeticReferenceFrame\",\n"
" \"name\": \"my_name\",\n"
- " \"anchor_epoch\": 2002.5,\n"
+ " \"anchor_epoch\": 0,\n"
" \"ellipsoid\": {\n"
" \"name\": \"WGS 84\",\n"
" \"semi_major_axis\": 6378137,\n"
@@ -15537,12 +15539,14 @@ TEST(json_import, vertical_crs_with_geoid_model_and_interpolation_crs) {
// ---------------------------------------------------------------------------
TEST(json_import, vertical_reference_frame_with_anchor_epoch) {
+ // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures
+ // (cf https://github.com/OSGeo/PROJ/issues/3632)
auto json = "{\n"
" \"$schema\": \"foo\",\n"
" \"type\": \"VerticalReferenceFrame\",\n"
" \"name\": \"my_name\",\n"
" \"anchor\": \"my_anchor_definition\",\n"
- " \"anchor_epoch\": 2002.5\n"
+ " \"anchor_epoch\": 0\n"
"}";
auto obj = createFromUserInput(json, nullptr);
auto vrf = nn_dynamic_pointer_cast<VerticalReferenceFrame>(obj);
View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/-/compare/413c3c8b9859091a08d6fd28426dfb47d4db514d...27631b678f1d7d03ec2031ea9ee49172b95176d9
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/-/compare/413c3c8b9859091a08d6fd28426dfb47d4db514d...27631b678f1d7d03ec2031ea9ee49172b95176d9
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20230224/ea7a0863/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list