All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
128 lines
2.3 KiB
Go
128 lines
2.3 KiB
Go
package standards
|
|
|
|
import "gitea.maximumdirect.net/ejr/weatherfeeder/model"
|
|
|
|
// This file provides small, shared helper functions for reasoning about WMO codes.
|
|
// These are intentionally "coarse" categories that are useful for business logic,
|
|
// dashboards, and alerting decisions.
|
|
//
|
|
// Example uses:
|
|
// - jogging suitability: precipitation? thunderstorm? freezing precip?
|
|
// - quick glance: "is it cloudy?" "is there any precip?"
|
|
// - downstream normalizers / aggregators
|
|
|
|
func IsThunderstorm(code model.WMOCode) bool {
|
|
switch code {
|
|
case 95, 96, 99:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func IsHail(code model.WMOCode) bool {
|
|
switch code {
|
|
case 96, 99:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func IsFog(code model.WMOCode) bool {
|
|
switch code {
|
|
case 45, 48:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// IsPrecipitation returns true if the code represents any precipitation
|
|
// (drizzle, rain, snow, showers, etc.).
|
|
func IsPrecipitation(code model.WMOCode) bool {
|
|
switch code {
|
|
// Drizzle
|
|
case 51, 53, 55, 56, 57:
|
|
return true
|
|
|
|
// Rain
|
|
case 61, 63, 65, 66, 67:
|
|
return true
|
|
|
|
// Snow
|
|
case 71, 73, 75, 77:
|
|
return true
|
|
|
|
// Showers
|
|
case 80, 81, 82, 85, 86:
|
|
return true
|
|
|
|
// Thunderstorm (often includes rain/hail)
|
|
case 95, 96, 99:
|
|
return true
|
|
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func IsRainFamily(code model.WMOCode) bool {
|
|
switch code {
|
|
// Drizzle + freezing drizzle
|
|
case 51, 53, 55, 56, 57:
|
|
return true
|
|
|
|
// Rain + freezing rain
|
|
case 61, 63, 65, 66, 67:
|
|
return true
|
|
|
|
// Rain showers
|
|
case 80, 81, 82:
|
|
return true
|
|
|
|
// Thunderstorm often implies rain
|
|
case 95, 96, 99:
|
|
return true
|
|
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func IsSnowFamily(code model.WMOCode) bool {
|
|
switch code {
|
|
// Snow and related
|
|
case 71, 73, 75, 77:
|
|
return true
|
|
|
|
// Snow showers
|
|
case 85, 86:
|
|
return true
|
|
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// IsFreezingPrecip returns true if the code represents freezing drizzle/rain.
|
|
func IsFreezingPrecip(code model.WMOCode) bool {
|
|
switch code {
|
|
case 56, 57, 66, 67:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// IsSkyOnly returns true for codes that represent "sky condition only"
|
|
// (clear/mostly/partly/cloudy) rather than fog/precip/etc.
|
|
func IsSkyOnly(code model.WMOCode) bool {
|
|
switch code {
|
|
case 0, 1, 2, 3:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|