90 lines
3.7 KiB
Go
90 lines
3.7 KiB
Go
package spc
|
|
|
|
import "fmt"
|
|
|
|
const (
|
|
OutlookTypeCategorical = "categorical"
|
|
OutlookTypeTornado = "tornado"
|
|
OutlookTypeHail = "hail"
|
|
OutlookTypeWind = "wind"
|
|
)
|
|
|
|
// GeoJSONProduct describes one required SPC convective outlook GeoJSON product.
|
|
type GeoJSONProduct struct {
|
|
Key string
|
|
Day int
|
|
OutlookType string
|
|
URL string
|
|
}
|
|
|
|
// DiscussionProduct describes one required SPC convective outlook print page.
|
|
type DiscussionProduct struct {
|
|
Key string
|
|
Day int
|
|
URL string
|
|
}
|
|
|
|
var geoJSONProducts = []GeoJSONProduct{
|
|
{Key: "day1_categorical", Day: 1, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_cat.nolyr.geojson"},
|
|
{Key: "day1_tornado", Day: 1, OutlookType: OutlookTypeTornado, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_torn.nolyr.geojson"},
|
|
{Key: "day1_hail", Day: 1, OutlookType: OutlookTypeHail, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_hail.nolyr.geojson"},
|
|
{Key: "day1_wind", Day: 1, OutlookType: OutlookTypeWind, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_wind.nolyr.geojson"},
|
|
{Key: "day2_categorical", Day: 2, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_cat.nolyr.geojson"},
|
|
{Key: "day2_tornado", Day: 2, OutlookType: OutlookTypeTornado, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_torn.nolyr.geojson"},
|
|
{Key: "day2_hail", Day: 2, OutlookType: OutlookTypeHail, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_hail.nolyr.geojson"},
|
|
{Key: "day2_wind", Day: 2, OutlookType: OutlookTypeWind, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_wind.nolyr.geojson"},
|
|
{Key: "day3_categorical", Day: 3, OutlookType: OutlookTypeCategorical, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_cat.nolyr.geojson"},
|
|
{Key: "day3_tornado", Day: 3, OutlookType: OutlookTypeTornado, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_torn.nolyr.geojson"},
|
|
{Key: "day3_hail", Day: 3, OutlookType: OutlookTypeHail, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_hail.nolyr.geojson"},
|
|
{Key: "day3_wind", Day: 3, OutlookType: OutlookTypeWind, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_wind.nolyr.geojson"},
|
|
}
|
|
|
|
var discussionProducts = []DiscussionProduct{
|
|
{Key: "day1", Day: 1, URL: "https://www.spc.noaa.gov/products/outlook/day1otlk_prt.html"},
|
|
{Key: "day2", Day: 2, URL: "https://www.spc.noaa.gov/products/outlook/day2otlk_prt.html"},
|
|
{Key: "day3", Day: 3, URL: "https://www.spc.noaa.gov/products/outlook/day3otlk_prt.html"},
|
|
}
|
|
|
|
// GeoJSONProducts returns the required SPC convective outlook GeoJSON products
|
|
// in stable day/type order.
|
|
func GeoJSONProducts() []GeoJSONProduct {
|
|
out := make([]GeoJSONProduct, len(geoJSONProducts))
|
|
copy(out, geoJSONProducts)
|
|
return out
|
|
}
|
|
|
|
// DiscussionProducts returns the required SPC convective outlook print pages in
|
|
// stable day order.
|
|
func DiscussionProducts() []DiscussionProduct {
|
|
out := make([]DiscussionProduct, len(discussionProducts))
|
|
copy(out, discussionProducts)
|
|
return out
|
|
}
|
|
|
|
// GeoJSONProductByKey returns product metadata for a configured product key.
|
|
func GeoJSONProductByKey(key string) (GeoJSONProduct, bool) {
|
|
for _, product := range geoJSONProducts {
|
|
if product.Key == key {
|
|
return product, true
|
|
}
|
|
}
|
|
return GeoJSONProduct{}, false
|
|
}
|
|
|
|
// DiscussionProductByKey returns discussion metadata for a configured day key.
|
|
func DiscussionProductByKey(key string) (DiscussionProduct, bool) {
|
|
for _, product := range discussionProducts {
|
|
if product.Key == key {
|
|
return product, true
|
|
}
|
|
}
|
|
return DiscussionProduct{}, false
|
|
}
|
|
|
|
func validateProductDay(day int) error {
|
|
if day < 1 || day > 3 {
|
|
return fmt.Errorf("day must be 1, 2, or 3, got %d", day)
|
|
}
|
|
return nil
|
|
}
|