nearest.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:EDDB_JsonAPI 作者: FuelRats 项目源码 文件源码
def nearest(request):
    try:
        x = request.params['x']
        y = request.params['y']
        z = request.params['z']
        if 'limit' in request.params:
            limit = request.params['limit']
        else:
            limit = 10
        if 'include' in request.params:
            include = True
        else:
            include = False
        if 'cubesize' in request.params:
            cubesize = request.params['cubesize']
        else:
            cubesize = 200
        if 'aggressive' in request.params:
            sql = text('SELECT *,(sqrt((systems.X - ' + x + ')^2 + (systems.Y - ' +
                        y + ')^2 + (systems.Z - ' + z + '0)^2)) as DISTANCE from '
                        'systems WHERE x BETWEEN ' + str(float(x)-cubesize) + ' AND ' +
                       str(float(x)+cubesize) + ' AND y BETWEEN ' + str(float(y)-cubesize) +
                       ' AND ' + str(float(y)+cubesize) +' AND z BETWEEN ' +
                        str(float(z)-cubesize) + ' AND '+ str(float(z)+cubesize) +
                       ' ORDER BY DISTANCE LIMIT ' + str(limit) + ';')
        else:
            sql = text('SELECT *,(sqrt((populated_systems.X - ' + x + ')^2 + (populated_systems.Y - ' +
                        y + ')^2 + (populated_systems.Z - ' + z + '0)^2)) as DISTANCE from '
                        'populated_systems ORDER BY DISTANCE LIMIT ' + str(limit) + ';')

        result = DBSession.execute(sql)
        candidates = []
        ids = []
        bodies = []
        stations = []
        for row in result:
            candidates.append({'name': row['name'], 'distance': row['distance'], 'id': row['id']})
            ids.append(row['id'])
        if include:
            query = DBSession.query(Body).filter(Body.system_id.in_(tuple(ids)))
            results = query.all()
            for row in results:
                bodies.append(object_as_dict(row))

            query = DBSession.query(Station).filter(Station.system_id.in_(tuple(ids)))
            results = query.all()
            for row in results:
                stations.append(object_as_dict(row))

    except DBAPIError:
        return Response(db_err_msg, content_type='text/plain', status=500)
    if bodies:
        return {'meta': {'query_x': x, 'query_y': y, 'query_z': z, 'limit': limit, 'cubesize': cubesize,
                         'include': include},
                'candidates': candidates, 'included': {'bodies': bodies, 'stations': stations}}
    else:
        return {'meta': {'query_x': x, 'query_y': y, 'query_z': z, 'limit': limit, 'cubesize':cubesize,
                         'included': include},
                'data': candidates}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号