本服务仅支持FITS(Flexible Image Transport System)格式的星表文件。FITS是天文学领域标准的数据交换格式,可同时存储表格数据和图像数据。
为了成功处理天体图像裁剪,星表文件必须包含以下关键列:
object_id,如果使用其他列名,需要在上传星表时指定唯一索引列OBJECTID是另一种基于天体坐标自动生成的唯一标识符,其生成规则如下:
通过保留right_ascension的整数部分+小数点后七位文本+declination整数部分+小数点后七位文本,组合成一个18位或19位数字的文本。如果declination为负数,则在OBJECTID开头加上负号。
def generate_object_id(ra, dec):
"""
基于赤经(RA)和赤纬(DEC)生成OBJECTID
参数:
ra: float - 赤经(十进制度数)
dec: float - 赤纬(十进制度数)
返回:
str - 生成的OBJECTID
"""
# 处理赤经:保留整数+小数点后7位
ra_str = f"{ra:010.7f}" # 确保赤经部分为10位字符(整数+小数+小数点)
ra_part = ra_str.replace(".", "") # 移除小数点
# 处理赤纬:保留整数+小数点后7位
dec_abs = abs(dec)
dec_str = f"{dec_abs:09.7f}" # 确保赤纬部分为9位字符(整数+小数+小数点)
dec_part = dec_str.replace(".", "") # 移除小数点
# 组合生成OBJECTID
if dec < 0:
object_id = f"-{ra_part}{dec_part}"
else:
object_id = f"{ra_part}{dec_part}"
return object_id
# 使用示例
ra = 150.123456789
dec = -2.345678901
object_id = generate_object_id(ra, dec)
print(f"RA: {ra}, DEC: {dec}, OBJECTID: {object_id}")
# 输出示例: RA: 150.123456789, DEC: -2.345678901, OBJECTID: -1501234568023456789
如果您的星表不是FITS格式或坐标不是十进制度数,可以使用以下工具进行转换:
使用Astropy库:
from astropy.table import Table
import pandas as pd
# 读取CSV文件
df = pd.read_csv('your_catalog.csv')
# 转换为Astropy Table
table = Table.from_pandas(df)
# 写入FITS文件
table.write('your_catalog.fits', format='fits')
将时分秒(HH:MM:SS)或度分秒(DD:MM:SS)转换为十进制度数:
from astropy.coordinates import SkyCoord
from astropy import units as u
# 示例:将RA=10:30:45, DEC=+2:45:30转换为十进制度数
ra_str = '10h30m45s'
dec_str = '+2d45m30s'
# 创建SkyCoord对象
coord = SkyCoord(ra=ra_str, dec=dec_str, frame='icrs')
# 获取十进制度数
ra_deg = coord.ra.deg
dec_deg = coord.dec.deg
以下是一个符合要求的FITS星表结构示例(以表格形式展示):
| 列名 | 数据类型 | 示例值 | 说明 |
|---|---|---|---|
| object_id | INTEGER | 123456789 | 天体唯一标识符 |
| RA | FLOAT64 | 150.123456 | 赤经(十进制度数) |
| DEC | FLOAT64 | 2.345678 | 赤纬(十进制度数) |
| SOURCE_TYPE | STRING | 'GALAXY' | 天体类型 |
| MAG | FLOAT32 | 22.5 | 星等 |
症状:处理失败,错误信息提示坐标超出范围
解决方案:
症状:即使有缓存文件,系统仍重新处理
解决方案:
症状:上传失败或处理超时
解决方案:
本服务与以下天文数据系统的星表格式兼容:
只需确保坐标已转换为十进制度数格式,并且包含必需的列名(可通过前端界面配置)。