如何基于本地位置利用Astropy生成日食发生时刻?
天文摄影自动化:离线生成日食精确时刻并实现自动拍摄
我是一名天文摄影爱好者,正在开发Python脚本以自动化拍摄2024年的日全食,这样就能用肉眼欣赏日食的同时让单反相机自动拍摄。目前已经开发出基于日食偏食阶段(初亏C1)和UTC时刻的自动化脚本,使用digicamcontrol控制相机,代码如下:
import digiCamControlPython as dccp import time from datetime import datetime from astropy.time import Time local_time = Time.now() utc_time_now = local_time.utc def PartialEclipse(start_time:str, end_time:str): camera = dccp.Camera() camera.setIso(100) camera.setShutterspeed("1/50") camera.setFolder(r"C:\Users\My_Name\Pictures\digiCamControl") # 设置目标拍摄时间为astropy时间格式 partial_eclipse_start = Time(start_time, format='isot') partial_eclipse_end = Time(end_time, format='isot') # 等待到拍摄开始时间 while utc_time_now < partial_eclipse_start: time.sleep(1) # 开始拍摄图像 while utc_time_now < partial_eclipse_end: camera.capture() time.sleep(30) # 每30秒拍摄一张照片 PartialEclipse("2024-04-08T17:12:13", "2024-04-08T18:29:24") # 偏食开始时刻和全食前15秒的时刻
但我遇到一个问题:如果无法联网获取基于我所在位置的日食精确时刻,该如何生成这些时刻?有没有更高效的方法利用Astropy完成此任务?提前感谢。
后续进展
之后我自己摸索出了一些思路,写出了以下代码:
import numpy as np import astropy.units as u from astropy.coordinates import solar_system_ephemeris, AltAz, EarthLocation, SkyCoord from astropy.coordinates import get_body, get_moon, get_sun from astropy.time import Time myLocation = EarthLocation(lat=26*u.deg, lon=-80*u.deg, height=0*u.m) # 设置检查日食的时间间隔(秒) time_step = 3600 # 1小时 # 设置检查日食的天数范围 num_days = 365 # 设置检查的起始和结束时间 start_time = Time.now() end_time = start_time + num_days * u.day # 初始化存储日食时刻的列表 eclipse_times = [] # 遍历目标时间范围,每隔time_step秒检查一次日食 with solar_system_ephemeris.set('jpl'): for t in np.arange(start_time.unix, end_time.unix, time_step): time = Time(t, format='unix') moon = get_body('moon', time, myLocation) sun = get_body('sun', time, myLocation) sun_coord = SkyCoord(sun.ra, sun.dec, sun.distance, frame='icrs') moon_coord = SkyCoord(moon.ra, moon.dec, moon.distance, frame='icrs') # 检查月球和太阳的角距离是否接近0 angular_separation = moon_coord.separation(sun_coord) if angular_separation < 0.6 * u.deg: # 偏食开始的角距阈值 eclipse_times.append(time) # 输出下一次日食的时刻 if len(eclipse_times) > 0: print("下一次日食的时刻是: ", eclipse_times[0].iso) else: print("在指定时间范围内未找到日食。")
内容的提问来源于stack exchange,提问作者ked123
相关产品推荐
相关产品推荐

