catalog.py 1.97 KB
Newer Older
Wei Shoulin's avatar
Wei Shoulin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from .common import request, Result
import pickle

def search(ra: float, 
        dec: float, 
        radius: float, 
        catalog_name: str, 
        columns: tuple = ('*'), 
        min_mag: float = -1,  
        max_mag: float = -1,  
        obstime: int = 0, 
        limit: int = 0) -> Result:
    """
    根据输入的赤经、赤纬、半径、星表名称、列名、最小星等、最大星等、观测时间和限制数量,
    查询指定范围内的天体数据,并返回查询结果。
    
    Args:
        ra (float): 天体赤经(以度为单位)。
        dec (float): 天体赤纬(以度为单位)。
        radius (float): 查询半径(以度为单位)。
        catalog_name (str): 星表名称。
        columns (tuple, optional): 查询的列名,默认为 ('*')。表示查询所有列。
        min_mag (float, optional): 最小星等,默认为 -1。表示无限制。
        max_mag (float, optional): 最大星等,默认为 -1。表示无限制。
        obstime (int, optional): 观测时间,默认为 0,暂无用。
        limit (int, optional): 查询结果的数量限制,默认为 0。表示无限制。
    
    Returns:
        Result: 查询结果。
    
    Raises:
        Exception: 如果请求失败,将抛出异常。
    
    """

    if not columns:
        columns = ('*')

    try:
        datas = request.post('/api/catalog', {
                'ra': ra,
                'dec': dec,
                'radius': radius,
                'catalog_name': catalog_name,
                'columns': columns,
                'min_mag': min_mag,
                'max_mag': max_mag,
                'obstime': obstime,
                'limit': limit
            })        
        records = pickle.loads(datas._content)
        df, total_count = records['records'], records['totalCount']
        return Result.ok_data(data = df).append("totalCount", total_count)
    except Exception as e:
        return Result.error(str(e))