0

下面是我从https://astroquery.readthedocs.io/en/latest/gaia/gaia.html获得的以下代码。我得到了br时间ra并且dec是一个数字。但是,我不仅有一个数字,还有 ra 和 dec 的列表。当我尝试将列表放入 forradec下面的代码中时,我收到一条错误消息Error 500: null。有没有办法br使用raand列表查找dec

coord = SkyCoord(ra=, dec=, unit=(u.degree, u.degree), frame='icrs')
width = u.Quantity(0.0005, u.deg)
height = u.Quantity(0.0005, u.deg)
r = Gaia.query_object_async(coordinate=coord, width=width, height=height)
r.pprint()
r.columns
br=[r["phot_bp_rp_excess_factor"]]
print (br)

我是 astroquery 的新手,因此我们将不胜感激。

4

1 回答 1

1

您好,恭喜您提出第一个 StackOverflow 问题。据我了解,Astroquery 是一项社区工作,用于查询单个在线目录的模块在许多情况下是与在线查询系统一起开发和维护的,通常由同一开发人员进行。因此,Astroquery 中的不同模块有时由不同的团队开发,并且在界面上具有不同程度的功能完整性和一致性(我希望看到改进但很难协调)。

在文档的情况下Gaia.query_object_async并不完全清楚,但它甚至不支持 array 并不明显SkyCoord。它应该,或者至少如果它不应该给出一个更好的错误。

为了仔细检查,我深入研究了代码,发现了我的怀疑:它根本不允许这样做。它正在使用字符串替换(通常被认为是一个坏主意)构建 SQL 查询,并将该 SQL 查询传递给基于 Web 的服务。因为raanddec值是数组,它只是盲目地将这些数组表示传递到 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)
于 2021-05-28T08:27:50.317 回答