Skip to content

Commit ddae610

Browse files
authored
Merge pull request #258 from Tronald/develop
3.4.1.1 Fixes [Issue 256](#256)
2 parents 656ff55 + 77d4c2d commit ddae610

4 files changed

Lines changed: 69 additions & 24 deletions

File tree

CoordinateSharp.Magnetic/CoordinateSharp.Magnetic.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ For more information, please contact Signature Group, LLC at this address: sales
4747
<TargetFrameworks>net40; netstandard1.3; netstandard1.4; netstandard2.0; netstandard2.1; net50; net60; net70; net80; net90</TargetFrameworks>
4848
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
4949
<GenerateDocumentationFile>true</GenerateDocumentationFile>
50-
<Version>2.1.4.0</Version>
50+
<Version>2.1.5.0</Version>
5151
<Authors>Signature Group, LLC</Authors>
5252
<Company />
5353
<PackageProjectUrl>https://github.com/Tronald/CoordinateSharp</PackageProjectUrl>
@@ -61,7 +61,7 @@ For more information, please contact Signature Group, LLC at this address: sales
6161
<PackageIconUrl></PackageIconUrl>
6262
<PackageId>CoordinateSharp.Magnetic</PackageId>
6363
<Title>CoordinateSharp.Magnetic</Title>
64-
<AssemblyVersion>2.1.3.0</AssemblyVersion>
64+
<AssemblyVersion>2.1.5.0</AssemblyVersion>
6565
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
6666
<SignAssembly>true</SignAssembly>
6767
<PackageIcon>128x128.png</PackageIcon>

CoordinateSharp/Celestial/Solar/SunCalculations.cs

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ public static void CalculateSunTime(double lat, double lng, DateTime date, Celes
5959
{
6060
DateTime actualDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, DateTimeKind.Utc);
6161

62-
63-
6462
////Sun Time Calculations
6563
//Get solar coordinate info and feed
6664
//Get Julian
@@ -86,25 +84,32 @@ public static void CalculateSunTime(double lat, double lng, DateTime date, Celes
8684
// neither sunrise nor sunset
8785
if ((!c.SunRise.HasValue) && (!c.SunSet.HasValue))
8886
{
89-
//Check sun altitude at apex (solar noon) to ensure accurate logic.
90-
//Previous logic determined of user time passed (c.sunAltitude), but due to Meeus limitation in 15.1, it could cause a misreport.
91-
//https://github.com/Tronald/CoordinateSharp/issues/167
92-
93-
var safety = new Celestial();
94-
//Solarnoon may return null on certain days due to formula limitations in circumpolar regions.
95-
//When this occurs set noon to 00:00 because issue occurs around 0 hour.
96-
//The check is accurate enough for up or down all day determination
97-
DateTime? snoon = c.solarNoon;
98-
if (snoon == null) { snoon=actualDate.AddHours(-offset); }
99-
CalculateSunAngle(snoon.Value, lng, lat, safety, celC);
100-
101-
if (safety.sunAltitude <= -.8333)
87+
//Hemisphere check
88+
//Northern
89+
if (lat >= 0)
10290
{
103-
c.sunCondition = CelestialStatus.DownAllDay;
91+
//declination to determine if winter or summer
92+
if (c.solarCoordinates.declination > 0)
93+
{
94+
c.sunCondition = CelestialStatus.UpAllDay;
95+
}
96+
else
97+
{
98+
c.sunCondition = CelestialStatus.DownAllDay;
99+
}
104100
}
101+
//Southern
105102
else
106103
{
107-
c.sunCondition = CelestialStatus.UpAllDay;
104+
//declination to determine if winter or summer
105+
if (c.solarCoordinates.declination > 0)
106+
{
107+
c.sunCondition = CelestialStatus.DownAllDay;
108+
}
109+
else
110+
{
111+
c.sunCondition = CelestialStatus.UpAllDay; // includes d == 0
112+
}
108113
}
109114
}
110115
// sunrise or sunset

CoordinateSharp/CoordinateSharp.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,26 @@ Please visit http://coordinatesharp.com/licensing or contact Signature Group, LL
5050
<TargetFrameworks>net40; netstandard1.3; netstandard1.4; netstandard2.0; netstandard2.1; net50; net60; net70; net80; net90</TargetFrameworks>
5151
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
5252
<GenerateDocumentationFile>true</GenerateDocumentationFile>
53-
<Version>3.3.2.1</Version>
53+
<Version>3.4.1.1</Version>
5454
<Authors>Signature Group, LLC</Authors>
5555
<Company />
5656
<PackageProjectUrl>https://github.com/Tronald/CoordinateSharp</PackageProjectUrl>
5757
<PackageLicenseUrl></PackageLicenseUrl>
58-
<Copyright>Copyright 2025</Copyright>
58+
<Copyright>Copyright 2026</Copyright>
5959
<Description>CoordinateSharp is a high-performance, lightweight .NET library for working with geographical coordinates. Effortlessly convert coordinates, compute distances, and calculate location-based solar, lunar, and magnetic data — all with minimal code.</Description>
60-
<PackageReleaseNotes>- Resolves solar-eclipse leap-year handling error that triggered an exception when Feb 29 calculations occurred in a non-leap year.</PackageReleaseNotes>
60+
<PackageReleaseNotes>- Fixes an issue where all-day sunlight or darkness could be reported in the wrong direction in circumpolar regions.</PackageReleaseNotes>
6161
<PackageTags>Coordinates; Latitude; Longitude; Coordinate Conversion; Geography; Geodesy; Distance Calculation; Sun Position; Moon Position; Solar Calculator; Lunar Calculator; Magnetic Declination; MGRS; UTM; EPSG:3857; ECEF; GEOREF; Web Mercator; Geospatial; Astronomy; .NET</PackageTags>
6262
<!-- <PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>-->
6363
<PackageLicenseFile>License.txt</PackageLicenseFile> <PackageIconUrl></PackageIconUrl>
6464
<PackageId>CoordinateSharp</PackageId>
6565
<Title>CoordinateSharp</Title>
66-
<AssemblyVersion>3.3.1.1</AssemblyVersion>
66+
<AssemblyVersion>3.4.1.1</AssemblyVersion>
6767
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
6868
<SignAssembly>true</SignAssembly>
6969
<PackageIcon>128x128.png</PackageIcon>
7070
<AssemblyOriginatorKeyFile>CoordinateSharp Strong Name.snk</AssemblyOriginatorKeyFile>
7171
<DelaySign>false</DelaySign>
72-
<FileVersion>3.3.1.1</FileVersion>
72+
<FileVersion>3.4.1.1</FileVersion>
7373
<RepositoryUrl>https://github.com/Tronald/CoordinateSharp</RepositoryUrl>
7474
<PackageReadmeFile>README.md</PackageReadmeFile>
7575
<SymbolPackageFormat>snupkg</SymbolPackageFormat>

CoordinateSharp_UnitTests/Celestial.Solar.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,47 @@ public void IsSunUp()
347347
}
348348

349349
}
350+
[TestMethod]
351+
public void SunCondition_NoEventCheck()
352+
{
353+
Coordinate c = new Coordinate(69.68331, 9.955951, new DateTime(2026, 1, 14, 18, 48, 0));
354+
SunCondition_NoEventCheck(c, CelestialStatus.UpAllDay);
355+
356+
c = new Coordinate(69.716046, 11.373193, new DateTime(2026, 1, 14, 18, 48, 0));
357+
SunCondition_NoEventCheck(c, CelestialStatus.UpAllDay);
358+
359+
c = new Coordinate(69.718731, 18.484865, new DateTime(2026, 1, 14, 18, 48, 0));
360+
SunCondition_NoEventCheck(c, CelestialStatus.UpAllDay);
361+
362+
c = new Coordinate(69.687064, 19.902523, new DateTime(2026, 1, 14, 18, 48, 0));
363+
SunCondition_NoEventCheck(c, CelestialStatus.UpAllDay);
364+
365+
c = new Coordinate(-69.68331, -9.955951, new DateTime(2026, 1, 14, 18, 48, 0));
366+
SunCondition_NoEventCheck(c, CelestialStatus.DownAllDay);
367+
368+
c = new Coordinate(-69.716046, -11.373193, new DateTime(2026, 1, 14, 18, 48, 0));
369+
SunCondition_NoEventCheck(c, CelestialStatus.DownAllDay);
370+
371+
c = new Coordinate(-69.718731, -18.484865, new DateTime(2026, 1, 14, 18, 48, 0));
372+
SunCondition_NoEventCheck(c, CelestialStatus.DownAllDay);
350373

374+
c = new Coordinate(-69.687064, -19.902523, new DateTime(2026, 1, 14, 18, 48, 0));
375+
SunCondition_NoEventCheck(c, CelestialStatus.DownAllDay);
376+
377+
}
378+
private void SunCondition_NoEventCheck(Coordinate c, CelestialStatus status)
379+
{
380+
while (c.GeoDate < new DateTime(2026, 1, 17))
381+
{
382+
c.GeoDate = c.GeoDate.AddHours(.1);
383+
if (c.CelestialInfo.SunCondition == status)
384+
{
385+
Console.WriteLine(c.GeoDate.ToString());
386+
Console.WriteLine(c.CelestialInfo.SunAltitude);
387+
throw new InvalidOperationException();
388+
}
389+
}
390+
}
351391
/// <summary>
352392
/// Ensures static celestial logic works correctly.
353393
/// </summary>

0 commit comments

Comments
 (0)