Repository: JuliaEarth/CoordRefSystems.jl (julia)

Issue:
Addition of a Spherical Ellipsoid
Hi,

In my field (satellite communications) it is often assumed for many simulations that the earth is just a sphere as it simplifies a lot of the computations and most of the time does not impact significantly the results.

While I do believe the simplification are not really meaningful when a proper and optimized implementation of the computation is in place (like in this ecosystem), it is still often the case that one has to simulate things with a spherical ellipsoid to reproduce results done by other with less powerful means :D.

Would you be willing to add a spherical ellipsoid (I was thinking with 6371km of radius as that is the [wikipedia](https://en.wikipedia.org/wiki/Earth_radius#:~:text=Approximating%20the%20figure%20of%20Earth,polar%20radius%2C%20denoted%20b) _average_ value), or do you think this is not meant for CoordRefSystem and should live in my private package?

I am fine with either but I believe it might be of use to someone else to have a common definition of the spherical ellipsoid living in this repository.

In case you'd be willing to have this here, what would be the most idiomatic way to define the corresponding Datum to use for the various coordinates? 
Would it still be fine to have something like `Spherical6371🌎` and just `Spherical6371` for the datum? (I assume simply `Spherical` is used already for the coordinates and even if its not it would be too generic for something so niche most likely)

Pull request:
As discussed in #98, this PR adds the GRS 1980 Authalic sphere, I tried following the same style for code and tests, I also added his new datum among the exports as they all seem to be there.

In the end I did not add the NSIDC datum as I only that in case the GRS80S could not be added due to a lack of corresponding datum.
Given that I could add the GRS80 I'd avoid adding the very other niche datum/ellipsoid.

Closes #98

Patch:
diff --git a/src/CoordRefSystems.jl b/src/CoordRefSystems.jl
index 9965e69c..2b1db4ad 100644
--- a/src/CoordRefSystems.jl
+++ b/src/CoordRefSystems.jl
@@ -47,6 +47,7 @@ export
   Ire65,
   NZGD1949,
   OSGB36,
+  GRS80S,
   ellipsoid,
   epoch,
 
diff --git a/src/datums.jl b/src/datums.jl
index 5e74f154..bc9dc121 100644
--- a/src/datums.jl
+++ b/src/datums.jl
@@ -176,3 +176,12 @@ Airy 1830 datum.
 abstract type OSGB36 <: Datum end
 
 ellipsoid(::Type{OSGB36}) = Airy🌎
+
+"""
+    GRS80S
+
+GRS 1980 Authalic Sphere datum.
+"""
+abstract type GRS80S <: Datum end
+
+ellipsoid(::Type{GRS80S}) = GRS80S🌎
\ No newline at end of file
diff --git a/src/ellipsoids.jl b/src/ellipsoids.jl
index 46f51f1c..5ad1f08c 100644
--- a/src/ellipsoids.jl
+++ b/src/ellipsoids.jl
@@ -135,6 +135,17 @@ const _GRS80 = ellipfromaf⁻¹(6378137.0u"m", 298.257222101)
 
 ellipsoidparams(::Type{GRS80🌎}) = _GRS80
 
+"""
+  GRS80S🌎
+
+GRS 1980 (IUGG, 1980) Authalic Sphere.
+"""
+abstract type GRS80S🌎 <: RevolutionEllipsoid end
+
+const _GRS80S = ellipfromab(6371007.0u"m", 6371007.0u"m")
+
+ellipsoidparams(::Type{GRS80S🌎}) = _GRS80S
+
 """
   MERIT🌎
 


Test patch:
diff --git a/test/datums.jl b/test/datums.jl
index cefba428..2f3d95ea 100644
--- a/test/datums.jl
+++ b/test/datums.jl
@@ -56,6 +56,10 @@
     @test ellipsoid(OSGB36) === CoordRefSystems.Airy🌎
   end
 
+@testset "GRS80S" begin
+    @test ellipsoid(GRS80S) === CoordRefSystems.GRS80S🌎
+  end
+
   @testset "ShiftedDatum" begin
     ShiftedWGS84 = CoordRefSystems.shift(WGS84Latest, 2024.0)
     @test ellipsoid(ShiftedWGS84) === CoordRefSystems.WGS84🌎
diff --git a/test/ellipsoids.jl b/test/ellipsoids.jl
index 909770db..4a7369ac 100644
--- a/test/ellipsoids.jl
+++ b/test/ellipsoids.jl
@@ -229,6 +229,16 @@
     @test flattening⁻¹(🌎) == 298.257222101
   end
 
+  @testset "GRS80S🌎" begin
+    🌎 = CoordRefSystems.GRS80S🌎
+    @test majoraxis(🌎) == 6.371007e6u"m"
+    @test minoraxis(🌎) == 6.371007e6u"m"
+    @test eccentricity(🌎) == 0.0
+    @test eccentricity²(🌎) == 0.0
+    @test flattening(🌎) == 0.0
+    @test flattening⁻¹(🌎) == Inf
+  end
+
   @testset "GSK2011🌎" begin
     🌎 = CoordRefSystems.GSK2011🌎
     @test majoraxis(🌎) == 6.3781365e6u"m"