您好,恭喜您提出第一个 StackOverflow 问题。据我了解,Astroquery 是一项社区工作,用于查询单个在线目录的模块在许多情况下是与在线查询系统一起开发和维护的,通常由同一开发人员进行。因此,Astroquery 中的不同模块有时由不同的团队开发,并且在界面上具有不同程度的功能完整性和一致性(我希望看到改进但很难协调)。
在文档的情况下Gaia.query_object_async
并不完全清楚,但它甚至不支持 array 并不明显SkyCoord
。它应该,或者至少如果它不应该给出一个更好的错误。
为了仔细检查,我深入研究了代码,发现了我的怀疑:它根本不允许这样做。它正在使用字符串替换(通常被认为是一个坏主意)构建 SQL 查询,并将该 SQL 查询传递给基于 Web 的服务。因为ra
anddec
值是数组,它只是盲目地将这些数组表示传递到 SQL 查询的模板中,导致查询无效:
SELECT
TOP 50
DISTANCE(
POINT('ICRS', ra, dec),
POINT('ICRS', [99.00000712 87.00000767], [24.99999414 24.99999461])
) as dist,
*
FROM
gaiadr2.gaia_source
WHERE
1 = CONTAINS(
POINT('ICRS', ra, dec),
BOX(
'ICRS',
[99.00000712 87.00000767],
[24.99999414 24.99999461],
0.005,
0.005
)
)
ORDER BY
dist ASC
服务器不会返回提示查询格式错误的错误消息,而是仅返回一般服务器错误。基本上它会崩溃。
长话短说,您可能应该针对 astroquery 打开一个关于此问题的错误报告,看看它是否在 Gaia 维护者的雷达上需要处理:https ://github.com/astropy/astroquery/issues/new
与此同时,听起来你最好的选择是在一个循环中进行多个查询并将它们的结果连接在一起。由于它返回 a Table
,您可以使用astropy.table.vstack
:
from astropy.table import vstack
results = []
for coord in coords:
results.append(Gaia.query_object_async(coord, width=width, height=height))
results = vstack(results)