Initial implementation of sounding query code
This commit is contained in:
parent
28010384fb
commit
0e54cd0b14
1 changed files with 71 additions and 1 deletions
|
@ -1,7 +1,7 @@
|
|||
import datetime
|
||||
import shapely
|
||||
|
||||
from xmet.db import DatabaseTable
|
||||
from xmet.db import Database, DatabaseTable
|
||||
from xmet.coord import COORD_SYSTEM
|
||||
|
||||
LAPSE_RATE_DRY = 9.8 # degrees C per 1000m
|
||||
|
@ -117,3 +117,73 @@ class Sounding():
|
|||
def __init__(self):
|
||||
super().__init__()
|
||||
self.id = None
|
||||
|
||||
@staticmethod
|
||||
def valid_by_station(db: Database,
|
||||
station: str,
|
||||
timestamp: datetime.datetime=None):
|
||||
sql = """
|
||||
select
|
||||
*
|
||||
from
|
||||
xmet_sounding
|
||||
where
|
||||
station = :station
|
||||
and timestamp_released <= :timestamp
|
||||
order by
|
||||
timestamp_released desc
|
||||
limit 1
|
||||
"""
|
||||
|
||||
if timestamp is None:
|
||||
timestamp = datetime.datetime.now(datetime.UTC)
|
||||
|
||||
pass
|
||||
|
||||
st = db.query_sql(Sounding, sql, {
|
||||
'station': station,
|
||||
'timestamp': timestamp
|
||||
})
|
||||
|
||||
sounding = st.fetchone()
|
||||
sounding.samples = db.query(SoundingSample, {
|
||||
'sounding_id': sounding.id
|
||||
}, ['elapsed']).fetchall()
|
||||
|
||||
return sounding
|
||||
|
||||
@staticmethod
|
||||
def valid_by_location(db: Database,
|
||||
location: shapely.Point,
|
||||
radius: float,
|
||||
timestamp: datetime.datetime):
|
||||
sql = """
|
||||
select
|
||||
*,
|
||||
ST_Distance(location, MakePoint(:lon, :lat, {crs}),
|
||||
from
|
||||
xmet_sounding
|
||||
where
|
||||
distance <= :radius
|
||||
and timestamp_released <= :timestamp
|
||||
order by
|
||||
timestamp_released desc
|
||||
limit 1
|
||||
""".format(crs=COORD_SYSTEM)
|
||||
|
||||
if timestamp is None:
|
||||
timestamp = datetime.datetime.now(datetime.UTC)
|
||||
|
||||
st = db.query_sql(Sounding, sql, {
|
||||
'lon': location.x,
|
||||
'lat': location.y,
|
||||
'radius': radius,
|
||||
'timestamp': timestamp
|
||||
})
|
||||
|
||||
sounding = st.fetchone()
|
||||
sounding.samples = db.query(SoundingSample, {
|
||||
'sounding_id': sounding.id
|
||||
}, ['elapsed']).fetchall()
|
||||
|
||||
return sounding
|
||||
|
|
Loading…
Add table
Reference in a new issue