Abandon Coord class in favor of shapely.Point

This commit is contained in:
XANTRONIX Industrial 2025-02-19 23:14:21 -05:00
parent 6a5a492cda
commit 029466158f
4 changed files with 19 additions and 32 deletions

View file

@ -204,3 +204,9 @@ class AFOSMessage(DatabaseTable):
event.forecaster = line
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'

View file

@ -1,22 +1 @@
import shapely
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

View file

@ -1,8 +1,9 @@
import csv
import re
import shapely
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
@ -37,7 +38,7 @@ def parse(text: str):
lon = parse_int(match[3])
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
@ -58,7 +59,7 @@ class Radar(DatabaseTable):
}
__values_read__ = {
'coord': Coord.from_wkt
'coord': shapely.from_wkt
}
__columns_write__ = {
@ -72,7 +73,7 @@ class Radar(DatabaseTable):
call: str
wban: int
name: str
coord: Coord
coord: shapely.Point
site_elevation: float
tower_height: float

View file

@ -2,9 +2,10 @@ import re
import gzip
import csv
import datetime
import shapely
from nexrad.db import DatabaseTable
from nexrad.coord import Coord, COORD_SYSTEM
from nexrad.coord import COORD_SYSTEM
from nexrad.radar import RADAR_RANGE
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 == '':
return
return Coord(float(text_lon), float(text_lat))
return shapely.Point(float(text_lon), float(text_lat))
class StormEvent(DatabaseTable):
__slots__ = (
@ -104,8 +105,8 @@ class StormEvent(DatabaseTable):
__values_read__ = {
'timestamp_start': datetime.datetime.fromisoformat,
'timestamp_end': datetime.datetime.fromisoformat,
'coord_start': Coord.from_wkt,
'coord_end': Coord.from_wkt
'coord_start': shapely.from_wkt,
'coord_end': shapely.from_wkt
}
__columns_write__ = {
@ -128,8 +129,8 @@ class StormEvent(DatabaseTable):
locale_start: str
locale_end: str
tornado_f_rating: str
coord_start: Coord
coord_end: Coord
coord_start: shapely.Point
coord_end: shapely.Point
@staticmethod
def from_csv_row(row: dict):
@ -173,7 +174,7 @@ class StormEvent(DatabaseTable):
@staticmethod
def each_matching(db,
coord: Coord=None,
coord: shapely.Point=None,
radius: float=RADAR_RANGE,
timestamp: datetime.datetime=None):
columns = StormEvent.__format_columns_select__(StormEvent)