1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
// weather_mapper.go - Fixed with exported map
package main
import (
"time"
)
// WeatherMapper handles weather symbol mapping
type WeatherMapper struct {
symbolMap map[int]Weather
}
// NewWeatherMapper creates a new weather mapper
func NewWeatherMapper() *WeatherMapper {
return &WeatherMapper{
symbolMap: FmiToOwm,
}
}
// Map converts FMI weather symbol to OWM weather with day/night icon
func (wm *WeatherMapper) Map(symbol int, forecastTime, sunrise, sunset time.Time) Weather {
weather, ok := wm.symbolMap[symbol]
if !ok {
weather = Weather{800, "Clear", "clear sky", "01"}
}
// Determine day/night
isDay := !forecastTime.Before(sunrise) && forecastTime.Before(sunset)
if isDay {
weather.Icon += "d"
} else {
weather.Icon += "n"
}
return weather
}
// FmiToOwm is the global FMI to OpenWeatherMap mapping
var FmiToOwm = map[int]Weather{
1: {800, "Clear", "clear sky", "01"},
2: {801, "Clouds", "few clouds", "02"},
3: {802, "Clouds", "scattered clouds", "03"},
4: {803, "Clouds", "broken clouds", "04"},
5: {804, "Clouds", "overcast clouds", "04"},
6: {701, "Mist", "mist", "50"},
7: {701, "Mist", "mist", "50"},
8: {741, "Fog", "fog", "50"},
9: {741, "Fog", "fog", "50"},
10: {741, "Fog", "fog", "50"},
11: {300, "Drizzle", "light intensity drizzle", "09"},
12: {301, "Drizzle", "drizzle", "09"},
13: {302, "Drizzle", "heavy intensity drizzle", "09"},
21: {520, "Rain", "light intensity shower rain", "09"},
22: {521, "Rain", "shower rain", "09"},
23: {522, "Rain", "heavy intensity shower rain", "09"},
24: {511, "Rain", "freezing rain", "13"},
25: {500, "Rain", "light rain", "10"},
26: {501, "Rain", "moderate rain", "10"},
27: {502, "Rain", "heavy intensity rain", "10"},
30: {500, "Rain", "light rain", "10"},
31: {501, "Rain", "moderate rain", "10"},
32: {502, "Rain", "heavy intensity rain", "10"},
40: {600, "Snow", "light snow", "13"},
41: {600, "Snow", "light snow", "13"},
42: {601, "Snow", "snow", "13"},
43: {602, "Snow", "heavy snow", "13"},
50: {300, "Drizzle", "drizzle", "09"},
51: {300, "Drizzle", "light drizzle", "09"},
52: {301, "Drizzle", "drizzle", "09"},
53: {302, "Drizzle", "heavy drizzle", "09"},
54: {302, "Drizzle", "heavy drizzle", "09"},
55: {302, "Drizzle", "heavy drizzle", "09"},
56: {313, "Rain", "freezing drizzle", "09"},
57: {314, "Rain", "heavy freezing drizzle", "09"},
58: {314, "Rain", "freezing drizzle", "09"},
59: {314, "Rain", "freezing drizzle", "09"},
60: {500, "Rain", "light rain", "10"},
61: {501, "Rain", "moderate rain", "10"},
62: {502, "Rain", "heavy rain", "10"},
63: {503, "Rain", "very heavy rain", "10"},
64: {504, "Rain", "extreme rain", "10"},
65: {504, "Rain", "extreme rain", "10"},
66: {511, "Rain", "freezing rain", "13"},
67: {511, "Rain", "freezing rain", "13"},
68: {611, "Snow", "sleet", "13"},
69: {612, "Snow", "sleet", "13"},
70: {600, "Snow", "light snow", "13"},
71: {601, "Snow", "snow", "13"},
72: {602, "Snow", "heavy snow", "13"},
73: {615, "Snow", "rain and snow", "13"},
74: {616, "Snow", "rain and snow", "13"},
75: {620, "Snow", "light shower snow", "13"},
76: {621, "Snow", "shower snow", "13"},
77: {622, "Snow", "heavy shower snow", "13"},
78: {622, "Snow", "heavy snow", "13"},
79: {622, "Snow", "heavy snow", "13"},
80: {520, "Rain", "light intensity shower rain", "09"},
81: {521, "Rain", "shower rain", "09"},
82: {522, "Rain", "heavy intensity shower rain", "09"},
83: {611, "Rain", "sleet", "13"},
84: {612, "Rain", "sleet", "13"},
85: {621, "Snow", "shower snow", "13"},
86: {622, "Snow", "heavy shower snow", "13"},
87: {602, "Snow", "heavy snow", "13"},
88: {602, "Snow", "heavy snow", "13"},
91: {200, "Thunderstorm", "thunderstorm with light rain", "11"},
92: {202, "Thunderstorm", "thunderstorm with heavy rain", "11"},
93: {212, "Thunderstorm", "thunderstorm", "11"},
94: {221, "Thunderstorm", "ragged thunderstorm", "11"},
}
|