-
Notifications
You must be signed in to change notification settings - Fork 0
/
daylight_hours_base.py
127 lines (89 loc) · 3.3 KB
/
daylight_hours_base.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# -*- coding: utf-8 -*-
"""Daylight Hours.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1ldCB3lOi4fYu83leg_xuLFuANN_5a5cK
"""
import numpy as np
#import pandas as pd
import math
import os
import matplotlib.pyplot as plt
from geopy.geocoders import Photon
def full_dark():
ha = 360
sunrise = (360-ha)/15
sunset = ha/15
UTC_sunrise = 0
UTC_sunset = 24
hrs_sunlight = 0
print("There is no sunrise. 24 hrs darkness")
def full_sun():
ha = 0
sunrise = (360-ha)/15
sunset = ha/15
UTC_sunrise = 24
UTC_sunset = 0
hrs_sunlight = 24
print("There is sunlight throughout the day. 24 hrs sunlight")
def normal_case(cos_ha):
ha = math.degrees(math.acos(cos_ha))
sunrise = (360-ha)/15
sunset = ha/15
UTC_sunrise = (sunrise + RA - 0.06571*t_rise - 6.622)%24
UTC_sunset = (sunset + RA - 0.06571*t_set - 6.622)%24
sunrise_local = (UTC_sunrise-lambda_h+tz+dst)%24
sunset_local = (UTC_sunset-lambda_h+tz+dst)%24
sunrise_hr = int(sunrise_local - sunrise_local%1)
sunrise_mins = int((sunrise_local%1)*60)
sunset_hr = int(sunset_local - sunset_local%1)
sunset_mins = int((sunset_local%1)*60)
hrs_sunlight = (sunset_local-sunrise_local)%24
print("\nSunrise happens at ",sunrise_hr%12,":","%02d" % (sunrise_mins,),"am")
print("Sunrise happens at ",sunset_hr%12,":","%02d" % (sunset_mins,),"pm")
print("\nHours of Sunlight: ",hrs_sunlight)
print("\nha: ",ha)
print("\n")
n = int(input("Enter day: "))
# Initialize Nominatim API
geolocator = Photon(user_agent="MyApp")
user_input = int(input("\nDo you want to: \n1. Enter City Name\n2. Enter latitude & longitude manually? "))
if user_input == 1:
city_name = input("\nEnter City: ")
location = geolocator.geocode(city_name)
latitude = location.latitude
longitude = location.longitude
print("\nThe latitude of the location is: ", location.latitude)
print("The longitude of the location is: ", location.longitude)
else:
latitude = float(input("\nEnter latitude(North: +ve & South: -ve): "))
longitude = float(input("Enter longitude(East: +ve & West: -ve): "))
tz = float(input("\nEnter the timezone. \nEg: If UTC+2, Enter 2\nIf UTC-4, Enter -4.\nEnter the timezone: "))
dst = int(input("\nEnter 1 if DST is followed, else 0: "))
#Calculating lambda_h
lambda_h = longitude/15
#Calculating t_rise & t_set
t_rise = n + (6-lambda_h)/24
t_set = n + (18-lambda_h)/24
#Sun's Mean Anomaly (M)
M = 0.9856*t_rise - 3.289
#Sun's True Latitude (L)
L = M + 1.916*math.sin(math.radians(M)) + 0.02*math.sin(math.radians(M)) + 282.634
L = L%360
#Right Ascension (RA)
RA = math.degrees(math.atan(0.91764*math.tan(math.radians(L))))
#L_quad & RA_quad
L_quad = L%90
RA_quad = RA%90
#Updated RA
RA = (RA + L_quad - RA_quad)/15
#Sun's Declination
Sun_Decl = math.degrees(math.asin(0.39782*math.sin(math.radians(L))))
#Sun's local hour angle (ha)
cos_ha = (math.cos(math.radians(90.833)) - (math.sin(math.radians(Sun_Decl))*math.sin(math.radians(latitude))))/(math.cos(math.radians(Sun_Decl))*math.cos(math.radians(latitude)))
if cos_ha > 1: #24 hrs darkness
full_dark()
elif cos_ha < -1: #24 hrs sunlight
full_sun()
else:
normal_case(cos_ha)