Abandon Coord class in favor of shapely.Point
This commit is contained in:
parent
6a5a492cda
commit
c12d250d3e
4 changed files with 26 additions and 39 deletions
|
@ -204,3 +204,9 @@ class AFOSMessage(DatabaseTable):
|
||||||
event.forecaster = line
|
event.forecaster = line
|
||||||
|
|
||||||
return event
|
return event
|
||||||
|
|
||||||
|
def is_watch(self):
|
||||||
|
return self.sig is not None and self.sig == 'A'
|
||||||
|
|
||||||
|
def is_warning(self):
|
||||||
|
return self.sig is not None and self.sig == 'W'
|
||||||
|
|
|
@ -1,22 +1 @@
|
||||||
import shapely
|
|
||||||
|
|
||||||
COORD_SYSTEM = 4326
|
COORD_SYSTEM = 4326
|
||||||
|
|
||||||
class Coord():
|
|
||||||
__slots__ = 'lon', 'lat',
|
|
||||||
|
|
||||||
def __init__(self, lon: float, lat: float):
|
|
||||||
self.lon: float = lon
|
|
||||||
self.lat: float = lat
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return '%f, %f' % (self.lon, self.lat)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def from_wkt(wkt: str):
|
|
||||||
try:
|
|
||||||
point = shapely.from_wkt(wkt)
|
|
||||||
|
|
||||||
return Coord(point.x, point.y)
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import csv
|
import csv
|
||||||
import re
|
import re
|
||||||
|
import shapely
|
||||||
|
|
||||||
from nexrad.db import DatabaseTable
|
from nexrad.db import DatabaseTable
|
||||||
from nexrad.coord import Coord, COORD_SYSTEM
|
from nexrad.coord import COORD_SYSTEM
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Implements a parser and wrapper class for the WSR-88D radar list
|
Implements a parser and wrapper class for the WSR-88D radar list
|
||||||
|
@ -37,7 +38,7 @@ def parse(text: str):
|
||||||
lon = parse_int(match[3])
|
lon = parse_int(match[3])
|
||||||
lat = parse_int(match[1])
|
lat = parse_int(match[1])
|
||||||
|
|
||||||
return Coord(sign_lon * lon, sign_lat * lat)
|
return shapely.Point(sign_lon * lon, sign_lat * lat)
|
||||||
|
|
||||||
RADAR_RANGE = 230000
|
RADAR_RANGE = 230000
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ class Radar(DatabaseTable):
|
||||||
}
|
}
|
||||||
|
|
||||||
__values_read__ = {
|
__values_read__ = {
|
||||||
'coord': Coord.from_wkt
|
'coord': shapely.from_wkt
|
||||||
}
|
}
|
||||||
|
|
||||||
__columns_write__ = {
|
__columns_write__ = {
|
||||||
|
@ -66,13 +67,13 @@ class Radar(DatabaseTable):
|
||||||
}
|
}
|
||||||
|
|
||||||
__values_write__ = {
|
__values_write__ = {
|
||||||
'coord': lambda v: {'coord_lon': v.lon, 'coord_lat': v.lat}
|
'coord': lambda v: {'coord_lon': v.x, 'coord_lat': v.y}
|
||||||
}
|
}
|
||||||
|
|
||||||
call: str
|
call: str
|
||||||
wban: int
|
wban: int
|
||||||
name: str
|
name: str
|
||||||
coord: Coord
|
coord: shapely.Point
|
||||||
site_elevation: float
|
site_elevation: float
|
||||||
tower_height: float
|
tower_height: float
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,10 @@ import re
|
||||||
import gzip
|
import gzip
|
||||||
import csv
|
import csv
|
||||||
import datetime
|
import datetime
|
||||||
|
import shapely
|
||||||
|
|
||||||
from nexrad.db import DatabaseTable
|
from nexrad.db import DatabaseTable
|
||||||
from nexrad.coord import Coord, COORD_SYSTEM
|
from nexrad.coord import COORD_SYSTEM
|
||||||
from nexrad.radar import RADAR_RANGE
|
from nexrad.radar import RADAR_RANGE
|
||||||
|
|
||||||
def time_from_str(time: str):
|
def time_from_str(time: str):
|
||||||
|
@ -78,7 +79,7 @@ def coord_from_str(text_lon: str, text_lat: str):
|
||||||
if text_lon == '' or text_lat == '':
|
if text_lon == '' or text_lat == '':
|
||||||
return
|
return
|
||||||
|
|
||||||
return Coord(float(text_lon), float(text_lat))
|
return shapely.Point(float(text_lon), float(text_lat))
|
||||||
|
|
||||||
class StormEvent(DatabaseTable):
|
class StormEvent(DatabaseTable):
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
|
@ -104,8 +105,8 @@ class StormEvent(DatabaseTable):
|
||||||
__values_read__ = {
|
__values_read__ = {
|
||||||
'timestamp_start': datetime.datetime.fromisoformat,
|
'timestamp_start': datetime.datetime.fromisoformat,
|
||||||
'timestamp_end': datetime.datetime.fromisoformat,
|
'timestamp_end': datetime.datetime.fromisoformat,
|
||||||
'coord_start': Coord.from_wkt,
|
'coord_start': shapely.from_wkt,
|
||||||
'coord_end': Coord.from_wkt
|
'coord_end': shapely.from_wkt
|
||||||
}
|
}
|
||||||
|
|
||||||
__columns_write__ = {
|
__columns_write__ = {
|
||||||
|
@ -114,8 +115,8 @@ class StormEvent(DatabaseTable):
|
||||||
}
|
}
|
||||||
|
|
||||||
__values_write__ = {
|
__values_write__ = {
|
||||||
'coord_start': lambda v: {'coord_start_lon': v.lon, 'coord_start_lat': v.lat},
|
'coord_start': lambda v: {'coord_start_lon': v.x, 'coord_start_lat': v.y},
|
||||||
'coord_end': lambda v: {'coord_end_lon': v.lon, 'coord_end_lat': v.lat}
|
'coord_end': lambda v: {'coord_end_lon': v.x, 'coord_end_lat': v.y}
|
||||||
}
|
}
|
||||||
|
|
||||||
id: int
|
id: int
|
||||||
|
@ -128,8 +129,8 @@ class StormEvent(DatabaseTable):
|
||||||
locale_start: str
|
locale_start: str
|
||||||
locale_end: str
|
locale_end: str
|
||||||
tornado_f_rating: str
|
tornado_f_rating: str
|
||||||
coord_start: Coord
|
coord_start: shapely.Point
|
||||||
coord_end: Coord
|
coord_end: shapely.Point
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_csv_row(row: dict):
|
def from_csv_row(row: dict):
|
||||||
|
@ -173,7 +174,7 @@ class StormEvent(DatabaseTable):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def each_matching(db,
|
def each_matching(db,
|
||||||
coord: Coord=None,
|
coord: shapely.Point=None,
|
||||||
radius: float=RADAR_RANGE,
|
radius: float=RADAR_RANGE,
|
||||||
timestamp: datetime.datetime=None):
|
timestamp: datetime.datetime=None):
|
||||||
columns = StormEvent.__format_columns_select__(StormEvent)
|
columns = StormEvent.__format_columns_select__(StormEvent)
|
||||||
|
@ -192,8 +193,8 @@ class StormEvent(DatabaseTable):
|
||||||
])
|
])
|
||||||
|
|
||||||
values.update({
|
values.update({
|
||||||
'lon': coord.lon,
|
'lon': coord.x,
|
||||||
'lat': coord.lat,
|
'lat': coord.y,
|
||||||
'crs': COORD_SYSTEM,
|
'crs': COORD_SYSTEM,
|
||||||
'radius': radius
|
'radius': radius
|
||||||
})
|
})
|
||||||
|
@ -271,8 +272,8 @@ class StormEvent(DatabaseTable):
|
||||||
radars = list()
|
radars = list()
|
||||||
|
|
||||||
st = db.execute(sql, (
|
st = db.execute(sql, (
|
||||||
self.coord_start.lon, self.coord_start.lat,
|
self.coord_start.x, self.coord_start.y,
|
||||||
self.coord_end.lon, self.coord_end.lat,
|
self.coord_end.x, self.coord_end.y,
|
||||||
RADAR_RANGE))
|
RADAR_RANGE))
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
|
Loading…
Add table
Reference in a new issue