Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -77,24 +77,37 @@ def PLadder_ZSizes(utc_dt, lat, lon):
|
|
77 |
"""Calculate Planetary Ladder and Zone Sizes."""
|
78 |
if not 1900 <= utc_dt.year <= 2050:
|
79 |
return {"error": "Date out of range (1900–2050)."}
|
|
|
|
|
80 |
planets = load('de421.bsp')
|
81 |
earth = planets['earth']
|
82 |
-
|
|
|
83 |
planet_objects = {
|
84 |
'Sun': planets['sun'], 'Moon': planets['moon'], 'Mercury': planets['mercury'],
|
85 |
'Venus': planets['venus'], 'Mars': planets['mars'],
|
86 |
'Jupiter': planets['jupiter barycenter'], 'Saturn': planets['saturn barycenter']
|
87 |
}
|
|
|
|
|
88 |
ts = load.timescale()
|
89 |
t = ts.from_datetime(utc_dt)
|
|
|
|
|
90 |
longitudes = {}
|
91 |
for planet, obj in planet_objects.items():
|
92 |
-
|
93 |
-
|
94 |
-
|
|
|
|
|
|
|
|
|
95 |
sorted_planets = sorted(longitudes.items(), key=lambda x: x[1])
|
96 |
PLadder = [p for p, _ in sorted_planets]
|
97 |
sorted_lons = [lon for _, lon in sorted_planets]
|
|
|
|
|
98 |
zone_sizes = [sorted_lons[0]] + [sorted_lons[i+1] - sorted_lons[i] for i in range(6)] + [360 - sorted_lons[6]]
|
99 |
bordering = [[PLadder[0]]] + [[PLadder[i-1], PLadder[i]] for i in range(1, 7)] + [[PLadder[6]]]
|
100 |
ZSizes = []
|
|
|
77 |
"""Calculate Planetary Ladder and Zone Sizes."""
|
78 |
if not 1900 <= utc_dt.year <= 2050:
|
79 |
return {"error": "Date out of range (1900–2050)."}
|
80 |
+
|
81 |
+
# Load the JPL ephemeris (DE421)
|
82 |
planets = load('de421.bsp')
|
83 |
earth = planets['earth']
|
84 |
+
|
85 |
+
# Define planet objects (using barycenters for Jupiter and Saturn)
|
86 |
planet_objects = {
|
87 |
'Sun': planets['sun'], 'Moon': planets['moon'], 'Mercury': planets['mercury'],
|
88 |
'Venus': planets['venus'], 'Mars': planets['mars'],
|
89 |
'Jupiter': planets['jupiter barycenter'], 'Saturn': planets['saturn barycenter']
|
90 |
}
|
91 |
+
|
92 |
+
# Create a timescale and convert the UTC datetime to a Skyfield time object
|
93 |
ts = load.timescale()
|
94 |
t = ts.from_datetime(utc_dt)
|
95 |
+
|
96 |
+
# Calculate geocentric ecliptic longitudes for each planet
|
97 |
longitudes = {}
|
98 |
for planet, obj in planet_objects.items():
|
99 |
+
# Geocentric position from Earth's center
|
100 |
+
astrometric = earth.at(t).observe(obj)
|
101 |
+
apparent = astrometric.apparent()
|
102 |
+
_, lon, _ = apparent.ecliptic_latlon()
|
103 |
+
longitudes[planet] = lon.degrees
|
104 |
+
|
105 |
+
# Sort planets by their ecliptic longitude
|
106 |
sorted_planets = sorted(longitudes.items(), key=lambda x: x[1])
|
107 |
PLadder = [p for p, _ in sorted_planets]
|
108 |
sorted_lons = [lon for _, lon in sorted_planets]
|
109 |
+
|
110 |
+
# Calculate zone sizes (angular distances between consecutive planets)
|
111 |
zone_sizes = [sorted_lons[0]] + [sorted_lons[i+1] - sorted_lons[i] for i in range(6)] + [360 - sorted_lons[6]]
|
112 |
bordering = [[PLadder[0]]] + [[PLadder[i-1], PLadder[i]] for i in range(1, 7)] + [[PLadder[6]]]
|
113 |
ZSizes = []
|