Abandon Coord class in favor of shapely.Point
This commit is contained in:
parent
6a5a492cda
commit
029466158f
4 changed files with 19 additions and 32 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__ = {
|
||||||
|
@ -72,7 +73,7 @@ class Radar(DatabaseTable):
|
||||||
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__ = {
|
||||||
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue