dmrl_prec_file_without_correction.py
3.19 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import urllib.request
import json
import os
import datetime
from imageio import imread
import cv2
import numpy as np
import loca_data
import duamel_model
import matplotlib.pyplot as plt
import sher_duam_class
import dateutil.parser
import dmrl_prec_file
class DMRLPrecFile_WOC(dmrl_prec_file.DMRLPrecFile):
# Получить результаты расчёта
def GetResult(self, _prec, _test_datetime=None):
"""
_prec это JSON вида:
{"time": "2020-03-20T10:00:00Z",
"period": 600,
"sum": 0.0,
"intensity": 0.0,
"type": 0}
"""
result = None
if _prec["sum"] == " ":
_prec = None
temp_datetime = datetime.datetime.now()
temp_cur_min = (temp_datetime.minute // 10) * 10
cur_datetime = datetime.datetime(temp_datetime.year, temp_datetime.month, temp_datetime.day, temp_datetime.hour, temp_cur_min, 0, 0)
if _prec is not None:
cur_datetime = dateutil.parser.parse(_prec["time"])
if _test_datetime is not None:
cur_datetime = _test_datetime
matrix = self.GetMatrix(cur_datetime)
# 1. Если ДМРЛ нет и нет осадков
if matrix is None:
result = dict(time = cur_datetime.__str__(),
water_volume = 0.0,
prec_square = 0.0,
all_square = -1.0,
dmrl_prec = -1.0)
return json.dumps(result)
# 3-4. Если есть ДМРЛ и есть (или нет) осадков с АГК - ОБЫЧНЫЙ АЛГОРИТМ
# Определяем коэффициент корреляции, если оба значения есть и отличны от нуля
cur_prec_value = 0
dmrl_prec = -1.0
sum_squere = 0.0
vol_water = 0.0
vol_water_wc = 0.0
pixel_counter = 0.0
for yy in matrix:
for xx in yy:
lm_value = xx[0]
m_prec = self.GetPrecByDBZ(lm_value) / 6.0
vol_local_wc = self.pixel_size * self.pixel_size * (1.0/1000.0) * m_prec
vol_water_wc = vol_water_wc + vol_local_wc
if vol_water_wc > 0.0:
sum_squere = sum_squere + 1.0
pixel_counter += 1.0
sum_squere = sum_squere * self.pixel_size * self.pixel_size
if self.squere != 0.0:
dmrl_prec = vol_water_wc / self.squere
result = dict(
time = cur_datetime.__str__(), # Дата
water_volume = vol_water_wc, # объём воды (метры в кубе)
prec_square = sum_squere, # площадь выпадения осадков
all_square = self.squere, # общая площадь водосбора
dmrl_prec = dmrl_prec) # осадки (в мм) ОБЪЕМ ПРИВЕДЕННЫЙ К ОБЩЕЙ ПЛОЩАДИ ВОДОСБОРА
return json.dumps(result)
########################################################################