Exemplo n.º 1
0
    def get(self, request):
        '''
            根据code获取该code的溢油随着时间的平均轨迹点
        :param request:
        :return:
        '''
        code = request.GET.get('code', None)
        # TODO:[-] 20-01-16 此处修改为直接读取nc文件,不读取数据库

        track_list = []
        msg = ''
        if code is not None:
            try:
                # track_list = OilspillingAvgModel.objects(code=code)
                # TODO:[*] 20-02-03 此处需要修改当请求进来
                reader_func = create_reader('file')
                reader = reader_func(_ROOT_DIR, _RESULT_FILE)
                track_list = reader.read_avg_track('test')
            except KeyError:
                msg = '不存在的key索引/时间超出范围'
            except:
                msg = '其他错误'
        # TODO:[*] 20-01-17 此处注意一下,由于重新修改了序列化的原始data model 改为了mid model,mid model中缺少部分需要序列化的字段,序列化时会提示有错误,注意!
        json_data = OilspillingAvgModelSerializer(track_list, many=True).data
        return Response(json_data)
Exemplo n.º 2
0
    def get(self, request):
        '''
            根据指定 code 获取对应code对应的平均观测值的日期数组
        :param request:
        :return:
        '''
        code = request.GET.get('code', None)
        list_avg = []
        if code is not None:
            reader_func = create_reader('file')
            reader = reader_func(_ROOT_DIR, _RESULT_FILE)
            list_avg = reader.read_date_range(code=code)

            # TODO:[-] 20-01-21 不再使用数据库的读取这种方式,放在OilDbReader中
            # 根据time去重
            # list_avg = OilspillingAvgModel.objects(
            #     code=code).distinct(field='time')
            # if len(list_avg) > 0:
            #     list_avg = list(set(list_avg))
            #     # 排序
            #     list_avg.sort()
            temp = StartEndDateMidModel(list_avg[0], list_avg[-1])

            return Response(StartEndDateMidModelSerializer(temp).data)
        # return Response()
        return Response('未填code', status=200)
Exemplo n.º 3
0
 def handle_default(self, msg: Msg):
     '''
         -3 存在读取获取每个时刻的均值
     :param msg:
     :return:
     '''
     # 获取目标路径
     finial_file = msg.msg.other['finial_file']
     # 使用xarray读取指定文件
     # 直接调用 util.reader直接读取并写入数据库
     reader_func = create_reader('file')
     reader = reader_func(NC_OPTIONS['_ROOT_DIR'], NC_OPTIONS['_RESULT_FILE'])
     track_list = reader.read_avg_track('test')
     # 存入msg中
     msg.msg.other['track_list'] = track_list
Exemplo n.º 4
0
 def get(self, request):
     '''
         获取指定时间的散点总数
     :param request:
     :return:
     '''
     target_date_str = request.GET.get('date', None)
     code = request.GET.get('code', None)
     target_date = dateutil.parser.parse(target_date_str)
     if None in [target_date_str, code]:
         return Response()
     else:
         reader_func = create_reader('file')
         reader = reader_func(_ROOT_DIR, _RESULT_FILE)
         return Response(reader.read_track_count(target_date))
Exemplo n.º 5
0
 def handle_read_nc(self, event: Event, **kwargs):
     '''
         -3 存在读取获取每个时刻的均值
     :param msg:
     :return:
     '''
     msg: Msg = kwargs.get('msg')
     # 获取目标路径
     finial_file = msg.msg.other['finial_file']
     # 使用xarray读取指定文件
     # 直接调用 util.reader直接读取并写入数据库
     reader_func = create_reader('file')
     reader = reader_func(msg.dir_path, msg.file_name)
     track_list = reader.read_avg_track('test')
     # 存入msg中
     msg.msg.other['track_list'] = track_list
Exemplo n.º 6
0
    def get(self, request):
        '''
            根据指定的 date 获取该date的 所有溢油点
            TODO:[*] 20-01-06 此处准备重写 若重写的话,不将oil对应的数据入库,数据库中只记录文件所在路径,直接读取文件获取对应的信息
        :param request:
        :return:
        '''
        # TODO:[*] 20-01-20 最新的设计想通过分批加载的方式解决加载较慢的问题
        target_date_str = request.GET.get('date')
        code = request.GET.get('code', None)
        page_index = int(
            request.GET.get('pageindex', PAGINATION['DEFAULT_INDEX']))
        page_count = int(
            request.GET.get('pagecount', PAGINATION['DEFAULT_COUNT']))
        target_date_dt = dateutil.parser.parse(target_date_str)
        oil_track_list = []
        json_data = None
        msg = 'no error'
        if code is not None:
            try:
                reader_func = create_reader('file')
                reader = reader_func(_ROOT_DIR, _RESULT_FILE)
                oil_track_list = reader.read_current_track(
                    'test',
                    target_date_str,
                    page_index=page_index,
                    page_count=page_count)

                # oil_track_list = OilSpillingModel.objects(
                #     code=code, time=target_date_dt)
                json_data = OilSpillingTrackModelSerializer(oil_track_list,
                                                            many=True).data
            except KeyError:
                msg = '不存在的key索引/时间超出范围'
            except:
                msg = '其他错误'
        # return Response(
        #     {
        #         'data': json_data,
        #         'error': msg
        #     }
        # )
        return Response(json_data)