Python运行SOIT工具出错,求Terra/Aqua卫星过境时间获取方案
问题描述
需求:构建2001年1月1日至2021年12月31日,坐标(纬度-32.510、经度-55.800)处Terra和Aqua卫星每日过境时间数据库。
使用SOIT工具时遇到以下问题:
- 执行
python3 -m pip install json等命令安装内置模块(json、math、csv)时报错,提示无匹配版本;在PowerShell中直接输入import命令被识别为无效指令。 - 跳过模块安装运行脚本
pass_time_v2.py时,出现IndexError: list index out of range错误,报错位置为第265行aqua_closest = closest_time.split(' ')[3]。
已完成的SLTrack.ini配置内容:
[configuration] username = martinfrancia@fagro.edu.uy password = overpassanahi8camilo3 start date = 01/01/2001 end date = 12/31/2021 latitude of interest = -32.510 longitude of interest = -55.800
问题解决办法
针对问题1:内置模块安装报错
- json、math、csv是Python内置标准库,无需通过pip安装,脚本中直接写
import json、import math、import csv即可正常调用。 - PowerShell是系统命令行环境,无法直接执行Python的
import语句。若要测试模块导入,需先进入Python交互环境:在PowerShell中输入python3(或python,取决于你的Python版本),进入>>>提示符后再输入import命令。
针对问题2:IndexError索引越界
- 报错原因是
closest_time字符串按空格分割后,列表长度不足4,导致[3]索引超出范围。 - 解决步骤:
- 在报错代码行前添加打印语句,输出
closest_time的实际内容,确认其格式是否符合脚本预期:print("Debug: closest_time =", closest_time) aqua_closest = closest_time.split(' ')[3] - 根据打印出的实际格式调整索引值,或者添加长度判断避免报错:
time_parts = closest_time.split(' ') if len(time_parts) >=4: aqua_closest = time_parts[3] else: # 处理格式异常的情况,比如赋值为None或记录错误 aqua_closest = None print(f"Invalid time format: {closest_time}") - 检查SLTrack.ini中的日期格式是否符合脚本要求,部分工具对日期格式(如MM/DD/YYYY或DD/MM/YYYY)有严格要求,确认
start date和end date的格式是否与脚本预期一致。
- 在报错代码行前添加打印语句,输出
替代获取方案
方案1:使用Python skyfield库计算过境时间
- 安装skyfield库:
pip install skyfield - 获取Terra和Aqua卫星的历史TLE(两行轨道数据)文件,覆盖2001-2021年的轨道数据
- 编写脚本计算过境时间:
- 设置观测点的经纬度坐标
- 遍历目标时间范围的每一天
- 加载对应日期的TLE数据,计算卫星过境的最近时间
- 将结果保存为CSV或数据库格式
方案2:使用NASA Earthdata服务
通过NASA官方的卫星轨道查询工具,输入目标坐标、时间范围,直接获取Terra和Aqua的每日过境时间数据,导出后整理为数据库格式。
内容的提问来源于stack exchange,提问作者Martín Francia
相关产品推荐
相关产品推荐

