Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | 3x 3x 26x 26x 25x 1x 1x 225x 1x | // Common IANA timezone → [latitude, longitude] mapping
// Uses major city coordinates as representative points for each timezone.
// Falls back to Greenwich (0, 0) for unknown timezones.
interface TimezoneCoord {
latitude: number;
longitude: number;
}
const TIMEZONE_COORDS: Record<string, TimezoneCoord> = {
UTC: { latitude: 51.4769, longitude: 0 },
GMT: { latitude: 51.4769, longitude: 0 },
'Europe/London': { latitude: 51.5074, longitude: -0.1278 },
'Europe/Paris': { latitude: 48.8566, longitude: 2.3522 },
'Europe/Berlin': { latitude: 52.52, longitude: 13.405 },
'Europe/Madrid': { latitude: 40.4168, longitude: -3.7038 },
'Europe/Rome': { latitude: 41.9028, longitude: 12.4964 },
'Europe/Amsterdam': { latitude: 52.3676, longitude: 4.9041 },
'Europe/Brussels': { latitude: 50.8503, longitude: 4.3517 },
'Europe/Vienna': { latitude: 48.2082, longitude: 16.3738 },
'Europe/Warsaw': { latitude: 52.2297, longitude: 21.0122 },
'Europe/Stockholm': { latitude: 59.3293, longitude: 18.0686 },
'Europe/Oslo': { latitude: 59.9139, longitude: 10.7522 },
'Europe/Copenhagen': { latitude: 55.6761, longitude: 12.5683 },
'Europe/Helsinki': { latitude: 60.1699, longitude: 24.9384 },
'Europe/Dublin': { latitude: 53.3498, longitude: -6.2603 },
'Europe/Lisbon': { latitude: 38.7223, longitude: -9.1393 },
'Europe/Zurich': { latitude: 47.3769, longitude: 8.5417 },
'Europe/Prague': { latitude: 50.0755, longitude: 14.4378 },
'Europe/Budapest': { latitude: 47.4979, longitude: 19.0402 },
'Europe/Bucharest': { latitude: 44.4268, longitude: 26.1025 },
'Europe/Athens': { latitude: 37.9838, longitude: 23.7275 },
'Europe/Moscow': { latitude: 55.7558, longitude: 37.6173 },
'Europe/Istanbul': { latitude: 41.0082, longitude: 28.9784 },
'Europe/Minsk': { latitude: 53.9045, longitude: 27.5615 },
'Europe/Kyiv': { latitude: 50.4501, longitude: 30.5234 },
'Europe/Tallinn': { latitude: 59.437, longitude: 24.7536 },
'Europe/Riga': { latitude: 56.9496, longitude: 24.1052 },
'Europe/Vilnius': { latitude: 54.6872, longitude: 25.2797 },
'Europe/Sofia': { latitude: 42.6977, longitude: 23.3219 },
'Europe/Zagreb': { latitude: 45.815, longitude: 15.9819 },
'Europe/Belgrade': { latitude: 44.7866, longitude: 20.4489 },
'Europe/Sarajevo': { latitude: 43.8563, longitude: 18.4131 },
'Europe/Tirana': { latitude: 41.3275, longitude: 19.8187 },
'Europe/Podgorica': { latitude: 42.4304, longitude: 19.2594 },
'Europe/Skopje': { latitude: 41.9973, longitude: 21.428 },
'Europe/Ljubljana': { latitude: 46.0569, longitude: 14.5058 },
'Europe/Bratislava': { latitude: 48.1486, longitude: 17.1077 },
'Europe/Kaliningrad': { latitude: 54.7104, longitude: 20.4522 },
'America/New_York': { latitude: 40.7128, longitude: -74.006 },
'America/Chicago': { latitude: 41.8781, longitude: -87.6298 },
'America/Denver': { latitude: 39.7392, longitude: -104.9903 },
'America/Los_Angeles': { latitude: 34.0522, longitude: -118.2437 },
'America/Anchorage': { latitude: 61.2181, longitude: -149.9003 },
'America/Halifax': { latitude: 44.6488, longitude: -63.5752 },
'America/Toronto': { latitude: 43.6532, longitude: -79.3832 },
'America/Vancouver': { latitude: 49.2827, longitude: -123.1207 },
'America/Montreal': { latitude: 45.5017, longitude: -73.5673 },
'America/Winnipeg': { latitude: 49.8951, longitude: -97.1384 },
'America/Regina': { latitude: 50.4452, longitude: -104.6189 },
'America/Edmonton': { latitude: 53.5461, longitude: -113.4938 },
'America/Mexico_City': { latitude: 19.4326, longitude: -99.1332 },
'America/Guadalajara': { latitude: 20.6597, longitude: -103.3496 },
'America/Havana': { latitude: 23.1136, longitude: -82.3666 },
'America/Bogota': { latitude: 4.711, longitude: -74.0721 },
'America/Lima': { latitude: -12.0464, longitude: -77.0428 },
'America/Buenos_Aires': { latitude: -34.6037, longitude: -58.3816 },
'America/Sao_Paulo': { latitude: -23.5505, longitude: -46.6333 },
'America/Santiago': { latitude: -33.4489, longitude: -70.6693 },
'America/Caracas': { latitude: 10.4806, longitude: -66.9036 },
'America/Quito': { latitude: -0.1807, longitude: -78.4678 },
'America/La_Paz': { latitude: -16.5, longitude: -68.15 },
'America/Asuncion': { latitude: -25.2637, longitude: -57.5759 },
'America/Montevideo': { latitude: -34.8921, longitude: -56.1646 },
'America/Argentina/Buenos_Aires': { latitude: -34.6037, longitude: -58.3816 },
'America/Argentina/Cordoba': { latitude: -31.4201, longitude: -64.1888 },
'America/Argentina/Salta': { latitude: -24.7859, longitude: -65.4117 },
'America/Argentina/Jujuy': { latitude: -24.1855, longitude: -65.2065 },
'America/Argentina/Tucuman': { latitude: -26.8083, longitude: -65.2176 },
'America/Argentina/Mendoza': { latitude: -32.8895, longitude: -68.8458 },
'America/Argentina/La_Rioja': { latitude: -29.4131, longitude: -66.855 },
'America/Argentina/San_Juan': { latitude: -31.5375, longitude: -68.5364 },
'America/Argentina/Del_Carmen': { latitude: -27.2585, longitude: -69.0552 },
'America/Argentina/San_Luis': { latitude: -33.295, longitude: -66.3356 },
'America/Argentina/Rio_Gallegos': { latitude: -51.623, longitude: -69.2127 },
'America/Argentina/Ushuaia': { latitude: -54.8019, longitude: -68.303 },
'America/Indiana/Indianapolis': { latitude: 39.7684, longitude: -86.1581 },
'America/Kentucky/Louisville': { latitude: 38.2527, longitude: -85.7585 },
'America/Detroit': { latitude: 42.3314, longitude: -83.0458 },
'America/Port-au-Prince': { latitude: 18.5944, longitude: -72.3074 },
'America/Jamaica': { latitude: 18.1096, longitude: -76.7975 },
'America/Grand_Turk': { latitude: 21.4604, longitude: -71.1413 },
'America/Nassau': { latitude: 25.0443, longitude: -77.3502 },
'America/Blanc-Sablon': { latitude: 51.4333, longitude: -57.1833 },
'America/Puerto_Rico': { latitude: 18.4655, longitude: -66.1057 },
'America/Glace_Bay': { latitude: 46.1569, longitude: -59.9189 },
'America/Moncton': { latitude: 46.1135, longitude: -60.078 },
'America/Goose_Bay': { latitude: 53.3394, longitude: -59.5916 },
'America/Thule': { latitude: 76.5676, longitude: -68.7319 },
'America/Martinique': { latitude: 14.6037, longitude: -61.0733 },
'America/Port_of_Spain': { latitude: 10.6596, longitude: -61.5089 },
'America/St_Johns': { latitude: 47.5615, longitude: -52.7126 },
'Africa/Cairo': { latitude: 30.0444, longitude: 31.2357 },
'Africa/Lagos': { latitude: 6.5244, longitude: 3.3792 },
'Africa/Nairobi': { latitude: -1.2921, longitude: 36.8219 },
'Africa/Johannesburg': { latitude: -26.2041, longitude: 28.0473 },
'Africa/Casablanca': { latitude: 33.5731, longitude: -7.5898 },
'Africa/Accra': { latitude: 5.6037, longitude: -0.187 },
'Africa/Addis_Ababa': { latitude: 9.025, longitude: 38.7469 },
'Africa/Ngoma': { latitude: 0, longitude: 0 },
'Africa/Dar_es_Salaam': { latitude: -6.7924, longitude: 39.2083 },
'Africa/Kampala': { latitude: 0.3476, longitude: 32.5825 },
'Africa/Khartoum': { latitude: 15.6007, longitude: 32.5313 },
'Africa/Maputo': { latitude: -15.5898, longitude: 32.5832 },
'Africa/Harare': { latitude: -17.8252, longitude: 31.0335 },
'Africa/Lubumbashi': { latitude: -11.6687, longitude: 27.4744 },
'Africa/Lusaka': { latitude: -15.3875, longitude: 28.3228 },
'Africa/Blantyre': { latitude: -15.7861, longitude: 33.9764 },
'Africa/Gaborone': { latitude: -24.6545, longitude: 25.9054 },
'Africa/Windhoek': { latitude: -22.5608, longitude: 17.0658 },
'Africa/Bamako': { latitude: 12.6392, longitude: -8.0029 },
'Africa/Abidjan': { latitude: 5.36, longitude: -4.0083 },
'Africa/Nouakchott': { latitude: 18.0735, longitude: -15.9582 },
'Africa/Dakar': { latitude: 14.7167, longitude: -17.4677 },
'Africa/Bissau': { latitude: 11.8816, longitude: -15.6178 },
'Africa/Conakry': { latitude: 9.6412, longitude: -13.5784 },
'Africa/Freetown': { latitude: 7.9619, longitude: -12.946 },
'Africa/Monrovia': { latitude: 6.3005, longitude: -10.7969 },
'Africa/Tunis': { latitude: 36.8065, longitude: 10.1815 },
'Africa/Tripoli': { latitude: 32.8872, longitude: 13.1913 },
'Africa/Bangui': { latitude: 4.3612, longitude: 18.5549 },
'Africa/Ndjamena': { latitude: 12.1348, longitude: 15.0557 },
'Africa/Ouagadougou': { latitude: 12.3714, longitude: -1.5197 },
'Africa/Douala': { latitude: 4.0511, longitude: 9.7679 },
'Africa/Libreville': { latitude: 0.4162, longitude: 9.4673 },
'Africa/Sao_Tome': { latitude: 0.3365, longitude: 6.637 },
'Africa/Brazzaville': { latitude: -4.2664, longitude: 15.2425 },
'Africa/Kinshasa': { latitude: -4.3218, longitude: 15.3126 },
'Africa/Lome': { latitude: 6.1725, longitude: 1.2314 },
'Africa/Cotonou': { latitude: 6.3703, longitude: 2.3912 },
'Asia/Tokyo': { latitude: 35.6762, longitude: 139.6503 },
'Asia/Shanghai': { latitude: 31.2304, longitude: 121.4737 },
'Asia/Hong_Kong': { latitude: 22.3193, longitude: 114.1694 },
'Asia/Singapore': { latitude: 1.3521, longitude: 103.8198 },
'Asia/Kolkata': { latitude: 19.076, longitude: 72.8777 },
'Asia/Dubai': { latitude: 25.2048, longitude: 55.2708 },
'Asia/Tehran': { latitude: 35.6892, longitude: 51.389 },
'Asia/Baghdad': { latitude: 33.3152, longitude: 44.3661 },
'Asia/Riyadh': { latitude: 24.7136, longitude: 46.6753 },
'Asia/Kabul': { latitude: 34.5553, longitude: 69.2075 },
'Asia/Karachi': { latitude: 24.8607, longitude: 67.0011 },
'Asia/Dhaka': { latitude: 23.8103, longitude: 90.4125 },
'Asia/Colombo': { latitude: 6.9271, longitude: 79.8612 },
'Asia/Kathmandu': { latitude: 27.7172, longitude: 85.324 },
'Asia/Almaty': { latitude: 43.222, longitude: 76.8512 },
'Asia/Tashkent': { latitude: 41.2995, longitude: 69.2401 },
'Asia/Bishkek': { latitude: 42.8746, longitude: 74.5698 },
'Asia/Dushanbe': { latitude: 38.5598, longitude: 68.774 },
'Asia/Ashgabat': { latitude: 37.9601, longitude: 58.3261 },
'Asia/Baku': { latitude: 40.4093, longitude: 49.8671 },
'Asia/Yerevan': { latitude: 40.1792, longitude: 44.4991 },
'Asia/Tbilisi': { latitude: 41.7151, longitude: 44.8271 },
'Asia/Beirut': { latitude: 33.8938, longitude: 35.5018 },
'Asia/Jerusalem': { latitude: 31.7683, longitude: 35.2137 },
'Asia/Amman': { latitude: 31.9454, longitude: 35.9284 },
'Asia/Damascus': { latitude: 33.5138, longitude: 36.2765 },
'Asia/Kuwait': { latitude: 29.3759, longitude: 47.9774 },
'Asia/Qatar': { latitude: 25.2854, longitude: 51.531 },
'Asia/Muscat': { latitude: 23.588, longitude: 58.3829 },
'Asia/Makassar': { latitude: -5.1477, longitude: 119.4327 },
'Asia/Jakarta': { latitude: -6.2088, longitude: 106.8456 },
'Asia/Brunei': { latitude: 4.9031, longitude: 114.9398 },
'Asia/Kuala_Lumpur': { latitude: 3.139, longitude: 101.6869 },
'Asia/Phnom_Penh': { latitude: 11.5564, longitude: 104.9282 },
'Asia/Vientiane': { latitude: 17.9757, longitude: 102.6331 },
'Asia/Bangkok': { latitude: 13.7563, longitude: 100.5018 },
'Asia/Ho_Chi_Minh': { latitude: 10.8231, longitude: 106.6297 },
'Asia/Hanoi': { latitude: 21.0278, longitude: 105.8342 },
'Asia/Pyongyang': { latitude: 39.0392, longitude: 125.7625 },
'Asia/Seoul': { latitude: 37.5665, longitude: 126.978 },
'Asia/Beijing': { latitude: 39.9042, longitude: 116.4074 },
'Asia/Chongqing': { latitude: 29.563, longitude: 106.5516 },
'Asia/Harbin': { latitude: 45.8038, longitude: 126.5349 },
'Asia/Urumqi': { latitude: 43.8256, longitude: 87.6168 },
'Asia/Kashgar': { latitude: 39.4679, longitude: 75.9898 },
'Asia/Taipei': { latitude: 25.033, longitude: 121.5654 },
'Asia/Macau': { latitude: 22.1987, longitude: 113.5439 },
'Asia/Macao': { latitude: 22.1987, longitude: 113.5439 },
'Asia/Manila': { latitude: 14.5995, longitude: 120.9842 },
'Asia/Yangon': { latitude: 16.8661, longitude: 96.1951 },
'Asia/Rangoon': { latitude: 16.8661, longitude: 96.1951 },
'Asia/Kalkutta': { latitude: 28.6139, longitude: 77.209 },
'Australia/Sydney': { latitude: -33.8688, longitude: 151.2093 },
'Australia/Brisbane': { latitude: -27.4698, longitude: 153.0251 },
'Australia/Perth': { latitude: -31.9505, longitude: 115.8605 },
'Australia/Adelaide': { latitude: -34.9285, longitude: 138.6007 },
'Australia/Darwin': { latitude: -12.4634, longitude: 130.8456 },
'Australia/Hobart': { latitude: -42.8821, longitude: 147.3272 },
'Australia/Currie': { latitude: -42.7301, longitude: 147.2804 },
'Australia/Lord_Howe': { latitude: -31.55, longitude: 159.0833 },
'Australia/Eucla': { latitude: -31.55, longitude: 128.8333 },
'Pacific/Auckland': { latitude: -36.8485, longitude: 174.7633 },
'Pacific/Fiji': { latitude: -18.1416, longitude: 178.4419 },
'Pacific/Port_Moresby': { latitude: -6.7255, longitude: 147.1773 },
'Pacific/Honolulu': { latitude: 21.3069, longitude: -157.8583 },
'Pacific/Guam': { latitude: 13.4443, longitude: 144.7937 },
'Pacific/Saipan': { latitude: 15.1833, longitude: 145.75 },
'Pacific/Noumea': { latitude: -22.2758, longitude: 166.4572 },
'Pacific/Tarawa': { latitude: 1.3278, longitude: 172.9769 },
'Pacific/Enderbury': { latitude: -3.2333, longitude: 171.0833 },
'Pacific/Kiritimati': { latitude: 1.8667, longitude: -157.45 },
'Pacific/Wake': { latitude: 19.2833, longitude: 166.65 },
'Pacific/Funafuti': { latitude: -8.521, longitude: 179.1965 },
'Pacific/Tongatapu': { latitude: -21.1789, longitude: -175.2018 },
'Pacific/Apia': { latitude: -13.8333, longitude: -171.7667 },
'Pacific/Norfolk': { latitude: -29.0408, longitude: 167.9547 },
'Pacific/Chatham': { latitude: -43.95, longitude: -176.5333 },
'Atlantic/Azores': { latitude: 37.7412, longitude: -25.6756 },
'Atlantic/Cape_Verde': { latitude: 14.933, longitude: -23.5133 },
'Atlantic/Reykjavik': { latitude: 64.1466, longitude: -21.9426 },
'Atlantic/Stanley': { latitude: -51.6948, longitude: -57.8582 },
'Atlantic/South_Georgia': { latitude: -54.2833, longitude: -36.5 },
'Atlantic/St_Helena': { latitude: -15.9648, longitude: -5.7151 },
'Atlantic/Madeira': { latitude: 32.6669, longitude: -16.9241 },
'Atlantic/Canary': { latitude: 28.1235, longitude: -15.436 },
'Atlantic/Faroe': { latitude: 62.0095, longitude: -6.7581 },
'Etc/UTC': { latitude: 51.4769, longitude: 0 },
'Etc/GMT': { latitude: 51.4769, longitude: 0 },
'Etc/GMT+0': { latitude: 51.4769, longitude: 0 },
'Etc/GMT-0': { latitude: 51.4769, longitude: 0 },
'Etc/Greenwich': { latitude: 51.4769, longitude: 0 },
'Etc/UCT': { latitude: 51.4769, longitude: 0 },
'Etc/Universal': { latitude: 51.4769, longitude: 0 },
'Etc/Zulu': { latitude: 51.4769, longitude: 0 },
LST: { latitude: 51.4769, longitude: 0 }
};
// Default fallback coordinates (Greenwich)
const DEFAULT_COORDS = { latitude: 51.4769, longitude: 0 };
/**
* Get representative latitude/longitude for an IANA timezone.
* Returns Greenwich (0, 0) for unknown timezones.
*/
export function getTimezoneCoords(timezone: string): { latitude: number; longitude: number } {
const key = timezone;
if (key in TIMEZONE_COORDS) {
return TIMEZONE_COORDS[key];
}
// Try case-insensitive match
const lowerKey = key.toLowerCase();
for (const [tzKey, coords] of Object.entries(TIMEZONE_COORDS)) {
Iif (tzKey.toLowerCase() === lowerKey) {
return coords;
}
}
return DEFAULT_COORDS;
}
|