diff options
| -rw-r--r-- | src/iso19111/datum.cpp | 10 | ||||
| -rw-r--r-- | test/unit/test_datum.cpp | 12 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp index 4df1b319..66717f70 100644 --- a/src/iso19111/datum.cpp +++ b/src/iso19111/datum.cpp @@ -646,7 +646,8 @@ EllipsoidNNPtr Ellipsoid::createSphere(const util::PropertyMap &properties, * @param properties See \ref general_properties. * At minimum the name should be defined. * @param semiMajorAxisIn the semi-major axis. - * @param invFlattening the inverse/reverse flattening. + * @param invFlattening the inverse/reverse flattening. If set to 0, this will + * be considered as a sphere. * @param celestialBody Name of the celestial body on which the ellipsoid refers * to. * @return new Ellipsoid. @@ -654,8 +655,11 @@ EllipsoidNNPtr Ellipsoid::createSphere(const util::PropertyMap &properties, EllipsoidNNPtr Ellipsoid::createFlattenedSphere( const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody) { - auto ellipsoid(Ellipsoid::nn_make_shared<Ellipsoid>( - semiMajorAxisIn, invFlattening, celestialBody)); + auto ellipsoid(invFlattening.value() == 0 + ? Ellipsoid::nn_make_shared<Ellipsoid>(semiMajorAxisIn, + celestialBody) + : Ellipsoid::nn_make_shared<Ellipsoid>( + semiMajorAxisIn, invFlattening, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } diff --git a/test/unit/test_datum.cpp b/test/unit/test_datum.cpp index 18cf244a..c6ccf5cf 100644 --- a/test/unit/test_datum.cpp +++ b/test/unit/test_datum.cpp @@ -127,6 +127,18 @@ TEST(datum, ellipsoid_from_inverse_flattening) { // --------------------------------------------------------------------------- +TEST(datum, ellipsoid_from_null_inverse_flattening) { + + auto ellipsoid = Ellipsoid::createFlattenedSphere( + PropertyMap(), Length(6378137), Scale(0)); + EXPECT_FALSE(ellipsoid->inverseFlattening().has_value()); + EXPECT_FALSE(ellipsoid->semiMinorAxis().has_value()); + EXPECT_FALSE(ellipsoid->semiMedianAxis().has_value()); + EXPECT_TRUE(ellipsoid->isSphere()); +} + +// --------------------------------------------------------------------------- + TEST(datum, ellipsoid_from_semi_minor_axis) { auto ellipsoid = Ellipsoid::createTwoAxis(PropertyMap(), Length(6378137), |
