#! /usr/bin/env python3 import argparse import cairo import shapely from xmet.db import Database from xmet.sounding import Sounding from xmet.skew_t import SkewTGraph, SkewTLegend IMAGE_WIDTH = 800 IMAGE_HEIGHT = 800 GRAPH_WIDTH = 800 - 128 GRAPH_HEIGHT = 800 - 128 parser = argparse.ArgumentParser( description = 'Graph most recent valid sounding for location' ) parser.add_argument('db', help='XMET SQLite3 database') parser.add_argument('lat', help='Latitude') parser.add_argument('lon', help='Longitude') parser.add_argument('timestamp', help='Timestamp in YYYY-MM-DD HH:MM:SS (UTC)') parser.add_argument('output', help='Output SVG file') args = parser.parse_args() db = Database.connect(args.db) location = shapely.Point(float(args.lon), float(args.lat)) sounding = Sounding.valid_by_location(db, location, args.timestamp) print(f"Graphing {sounding.station} sounding at {sounding.timestamp_observed}") skew_t = SkewTGraph(GRAPH_WIDTH, GRAPH_HEIGHT) with cairo.SVGSurface(args.output, IMAGE_WIDTH, IMAGE_HEIGHT) as surface: cr = cairo.Context(surface) cr.set_source_rgb(1, 1, 1) cr.rectangle(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT) cr.fill() skew_t.draw(cr, 64, 64, sounding) cr.set_source_rgb(0, 0, 0) cr.rectangle(64, 64, GRAPH_WIDTH, GRAPH_HEIGHT) cr.stroke() SkewTLegend.draw_for_graph(cr, skew_t, 64, 64)