Skip to content

Commit 09b6aab

Browse files
committed
Фикс багов библиотки SunCalc:
- Wrong azimuth angle: mourner/suncalc#6 - Nadir shifted from past to future: mourner/suncalc#125 - Coefficient is incorrect in solarTransitJ() function: mourner/suncalc#178
1 parent f8a7181 commit 09b6aab

6 files changed

+8
-8
lines changed

Includes/SunCalc.pas

+3-3
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ function getDeclination(const l, b: Double): Double; inline;
196196

197197
function getAzimuth(const H, phi, dec: Double): Double; inline;
198198
begin
199-
Result := ArcTan2(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi));
199+
Result := Pi + ArcTan2(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi));
200200
end;
201201

202202
function getAltitude(const H, phi, dec: Double): Double; inline;
@@ -280,7 +280,7 @@ function getApproxTransit(const Ht, lw: Double; const n: Double): Double; inline
280280

281281
function getSolarTransitJ(const ds, M, L: Double): Double; inline;
282282
begin
283-
Result := J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L);
283+
Result := J2000 + ds + 0.0053 * sin(M) - 0.0068 * sin(2 * L);
284284
end;
285285

286286
function getHourAngle(const h, phi, d: Double): Double; inline;
@@ -323,7 +323,7 @@ function GetTimes(const ADate: TDateTime; const ALat, ALon: Double): TSunCalcTim
323323

324324
if not IsNan(Jnoon) then begin
325325
Result[solarNoon].Value := fromJulian(Jnoon);
326-
Result[nadir].Value := fromJulian(Jnoon - 0.5);
326+
Result[nadir].Value := fromJulian(Jnoon + 0.5);
327327
end;
328328

329329
for i := Low(Result) to High(Result) do begin

Src/MapLayers/WindowLayers/SunCalc/u_SunCalcDataProviderMoon.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ function TSunCalcDataProviderMoon.GetDayInfo(
451451
end;
452452

453453
AddRow(VRow, _('Up Time'), MinutesToStr(VUptime) );
454-
AddRow(VRow, _('Azimuth'), Format('%.0f°', [RadToDeg(VPos.Azimuth + Pi)]) );
454+
AddRow(VRow, _('Azimuth'), Format('%.0f°', [RadToDeg(VPos.Azimuth)]) );
455455
AddRow(VRow, _('Altitude'), Format('%.1f°', [RadToDeg(VPos.Altitude)]) );
456456
AddRow(VRow, _('Shadow, meters'), ShadowToStr(VPos.Altitude) );
457457
AddRow(VRow, _('Illumination'), Format('%.0f%%', [VIllumination.Fraction * 100]) );

Src/MapLayers/WindowLayers/SunCalc/u_SunCalcDataProviderSun.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ function TSunCalcDataProviderSun.GetDayInfo(
448448
end;
449449

450450
AddRow(VRow, _('Day Length'), MinutesToStr(VUptime) );
451-
AddRow(VRow, _('Azimuth'), Format('%.0f°', [RadToDeg(VPos.Azimuth + Pi)]) );
451+
AddRow(VRow, _('Azimuth'), Format('%.0f°', [RadToDeg(VPos.Azimuth)]) );
452452
AddRow(VRow, _('Altitude'), Format('%.1f°', [RadToDeg(VPos.Altitude)]) );
453453
AddRow(VRow, _('Shadow, meters'), ShadowToStr(VPos.Altitude) );
454454

Src/MapLayers/WindowLayers/SunCalc/u_SunCalcShapesGenerator.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ function TSunCalcShapesGenerator.GetPointPosition(
248248
Exit;
249249
end;
250250
VPos := FDataProvider.GetPosition(ADate, FLocation);
251-
VAngle := Pi / 2 + VPos.Azimuth;
251+
VAngle := VPos.Azimuth - Pi / 2;
252252
R := FRadius * Cos(VPos.Altitude);
253253
AAltitude := VPos.Altitude;
254254
Result.X := FCenter.X + R * Cos(VAngle);

Src/MapLayers/WindowLayers/SunCalc/u_WindowLayerSunCalcDetailsPanel.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ procedure TWindowLayerSunCalcDetailsPanel.DrawRow(
351351
if ATime <> 0 then begin
352352
if FIsDetailedView then begin
353353
VPos := FSunCalcDataProvider.GetPosition(ATime, FLocation);
354-
VAzimuth := Format('%.0f°', [RadToDeg(VPos.Azimuth + Pi)]);
354+
VAzimuth := Format('%.0f°', [RadToDeg(VPos.Azimuth)]);
355355
VAltitude := Format('%.1f°', [RadToDeg(VPos.Altitude)]);
356356
end;
357357
VLocalTime := TTimeZoneInfo.UTCToTzLocalTime(ATime, FTzOffset);

Src/MapLayers/WindowLayers/SunCalc/u_WindowLayerSunCalcTimeInfo.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ procedure TWindowLayerSunCalcTimeInfo.InvalidateLayer;
108108
if FSunCalcConfig.ShowCaptionNearSun then begin
109109
VSunPos := FSunCalcDataProvider.GetPosition(FDateTime, FLocation);
110110

111-
VAzimuth := Format('%.2f°', [RadToDeg(VSunPos.Azimuth + Pi)]);
111+
VAzimuth := Format('%.2f°', [RadToDeg(VSunPos.Azimuth)]);
112112
VAltitude := Format('%.2f°', [RadToDeg(VSunPos.Altitude)]);
113113
VText := Format('%s: %s; %s: %s', [rsAltitude, VAltitude, rsAzimuth, VAzimuth]);
114114

0 commit comments

Comments
 (0)