nrel-spa-dart/.github/wiki/examples/basic-usage.md

2 KiB

Basic Usage Examples

Sunrise and Sunset for a City

import 'package:nrel_spa/nrel_spa.dart';

void printSolarDay(String city, double lat, double lng, double utcOffset) {
  final now = DateTime.now().toUtc();
  final result = getSpa(now, lat, lng, utcOffset);

  String fmt(double h) {
    if (h.isNaN) return 'n/a';
    final hh = h.truncate();
    final mm = ((h - hh) * 60).round();
    return '${hh.toString().padLeft(2, '0')}:${mm.toString().padLeft(2, '0')}';
  }

  print('$city');
  print('  Sunrise:    ${fmt(result.sunrise)}');
  print('  Solar noon: ${fmt(result.solarNoon)}');
  print('  Sunset:     ${fmt(result.sunset)}');
  print('  Zenith now: ${result.zenith.toStringAsFixed(2)}°');
}

void main() {
  printSolarDay('New York',  40.7128,  -74.0060, -5.0);
  printSolarDay('London',    51.5074,   -0.1278,   0.0);
  printSolarDay('Makkah',    21.3891,   39.8579,   3.0);
  printSolarDay('Melbourne', -37.8136, 144.9631,  10.0);
}

Annual Solar Noon Curve

import 'package:nrel_spa/nrel_spa.dart';

void main() {
  const lat = 40.7128;
  const lng = -74.0060;
  const utcOffset = -5.0;

  print('Day,SolarNoon');
  for (int day = 1; day <= 365; day++) {
    final date = DateTime.utc(2024, 1, 1).add(Duration(days: day - 1));
    final result = getSpa(date.add(const Duration(hours: 12)), lat, lng, utcOffset);
    print('$day,${result.solarNoon.toStringAsFixed(6)}');
  }
}

Twilight Times for Prayer Calculation

import 'package:nrel_spa/nrel_spa.dart';

void main() {
  final date = DateTime.utc(2024, 3, 15, 12, 0, 0);
  const lat = 33.8938;   // Jerusalem
  const lng = 35.5018;
  const utcOffset = 2.0; // EET

  final result = getSpa(
    date, lat, lng, utcOffset,
    customAngles: [108.0, 107.0], // Fajr 18°, Isha 17°
  );

  print('Fajr  (18°): ${result.angles[0].sunrise.toStringAsFixed(4)} h');
  print('Isha  (17°): ${result.angles[1].sunset.toStringAsFixed(4)} h');
  print('Sunrise:     ${result.sunrise.toStringAsFixed(4)} h');
  print('Sunset:      ${result.sunset.toStringAsFixed(4)} h');
}