jefflix-website/lib/country-centroids.ts

269 lines
11 KiB
TypeScript

/**
* ISO 3166-1 alpha-2 country codes mapped to [latitude, longitude] centroids.
* Coordinates represent approximate geographic centroids of each country.
*/
export const COUNTRY_CENTROIDS: Record<string, [number, number]> = {
AD: [42.5462, 1.6016], // Andorra
AE: [23.4241, 53.8478], // United Arab Emirates
AF: [33.9391, 67.7100], // Afghanistan
AG: [17.0608, -61.7964], // Antigua and Barbuda
AI: [18.2206, -63.0686], // Anguilla
AL: [41.1533, 20.1683], // Albania
AM: [40.0691, 45.0382], // Armenia
AO: [-11.2027, 17.8739], // Angola
AQ: [-90.0000, 0.0000], // Antarctica
AR: [-38.4161, -63.6167],// Argentina
AS: [-14.2710, -170.1322],// American Samoa
AT: [47.5162, 14.5501], // Austria
AU: [-25.2744, 133.7751],// Australia
AW: [12.5211, -69.9683], // Aruba
AX: [60.1785, 19.9156], // Aland Islands
AZ: [40.1431, 47.5769], // Azerbaijan
BA: [43.9159, 17.6791], // Bosnia and Herzegovina
BB: [13.1939, -59.5432], // Barbados
BD: [23.6850, 90.3563], // Bangladesh
BE: [50.5039, 4.4699], // Belgium
BF: [12.3641, -1.5275], // Burkina Faso
BG: [42.7339, 25.4858], // Bulgaria
BH: [26.0275, 50.5500], // Bahrain
BI: [-3.3731, 29.9189], // Burundi
BJ: [9.3077, 2.3158], // Benin
BL: [17.9000, -62.8333], // Saint Barthelemy
BM: [32.3213, -64.7572], // Bermuda
BN: [4.5353, 114.7277], // Brunei
BO: [-16.2902, -63.5887],// Bolivia
BQ: [12.1784, -68.2385], // Bonaire, Saint Eustatius and Saba
BR: [-14.2350, -51.9253],// Brazil
BS: [25.0343, -77.3963], // Bahamas
BT: [27.5142, 90.4336], // Bhutan
BV: [-54.4208, 3.3464], // Bouvet Island
BW: [-22.3285, 24.6849], // Botswana
BY: [53.7098, 27.9534], // Belarus
BZ: [17.1899, -88.4976], // Belize
CA: [56.1304, -106.3468],// Canada
CC: [-12.1642, 96.8710], // Cocos (Keeling) Islands
CD: [-4.0383, 21.7587], // Democratic Republic of the Congo
CF: [6.6111, 20.9394], // Central African Republic
CG: [-0.2280, 15.8277], // Republic of the Congo
CH: [46.8182, 8.2275], // Switzerland
CI: [7.5400, -5.5471], // Ivory Coast
CK: [-21.2368, -159.7777],// Cook Islands
CL: [-35.6751, -71.5430],// Chile
CM: [3.8480, 11.5021], // Cameroon
CN: [35.8617, 104.1954], // China
CO: [4.5709, -74.2973], // Colombia
CR: [9.7489, -83.7534], // Costa Rica
CU: [21.5218, -77.7812], // Cuba
CV: [16.5388, -23.0418], // Cape Verde
CW: [12.1696, -68.9900], // Curacao
CX: [-10.4475, 105.6904],// Christmas Island
CY: [35.1264, 33.4299], // Cyprus
CZ: [49.8175, 15.4730], // Czech Republic
DE: [51.1657, 10.4515], // Germany
DJ: [11.8251, 42.5903], // Djibouti
DK: [56.2639, 9.5018], // Denmark
DM: [15.4150, -61.3710], // Dominica
DO: [18.7357, -70.1627], // Dominican Republic
DZ: [28.0339, 1.6596], // Algeria
EC: [-1.8312, -78.1834], // Ecuador
EE: [58.5953, 25.0136], // Estonia
EG: [26.8206, 30.8025], // Egypt
EH: [24.2155, -12.8858], // Western Sahara
ER: [15.1794, 39.7823], // Eritrea
ES: [40.4637, -3.7492], // Spain
ET: [9.1450, 40.4897], // Ethiopia
FI: [61.9241, 25.7482], // Finland
FJ: [-16.5782, 179.4144],// Fiji
FK: [-51.7963, -59.5236],// Falkland Islands
FM: [7.4256, 150.5508], // Micronesia
FO: [61.8926, -6.9118], // Faroe Islands
FR: [46.2276, 2.2137], // France
GA: [-0.8037, 11.6094], // Gabon
GB: [55.3781, -3.4360], // United Kingdom
GD: [12.1165, -61.6790], // Grenada
GE: [42.3154, 43.3569], // Georgia
GF: [3.9339, -53.1258], // French Guiana
GG: [49.4657, -2.5853], // Guernsey
GH: [7.9465, -1.0232], // Ghana
GI: [36.1408, -5.3536], // Gibraltar
GL: [71.7069, -42.6043], // Greenland
GM: [13.4432, -15.3101], // Gambia
GN: [9.9456, -11.2874], // Guinea
GP: [16.9950, -62.0670], // Guadeloupe
GQ: [1.6508, 10.2679], // Equatorial Guinea
GR: [39.0742, 21.8243], // Greece
GS: [-54.4296, -36.5879],// South Georgia and the South Sandwich Islands
GT: [15.7835, -90.2308], // Guatemala
GU: [13.4443, 144.7937], // Guam
GW: [11.8037, -15.1804], // Guinea-Bissau
GY: [4.8604, -58.9302], // Guyana
HK: [22.3193, 114.1694], // Hong Kong
HM: [-53.0818, 73.5042], // Heard Island and McDonald Islands
HN: [15.1999, -86.2419], // Honduras
HR: [45.1000, 15.2000], // Croatia
HT: [18.9712, -72.2852], // Haiti
HU: [47.1625, 19.5033], // Hungary
ID: [-0.7893, 113.9213], // Indonesia
IE: [53.4129, -8.2439], // Ireland
IL: [31.0461, 34.8516], // Israel
IM: [54.2361, -4.5481], // Isle of Man
IN: [20.5937, 78.9629], // India
IO: [-6.3432, 71.8765], // British Indian Ocean Territory
IQ: [33.2232, 43.6793], // Iraq
IR: [32.4279, 53.6880], // Iran
IS: [64.9631, -19.0208], // Iceland
IT: [41.8719, 12.5674], // Italy
JE: [49.2144, -2.1312], // Jersey
JM: [18.1096, -77.2975], // Jamaica
JO: [30.5852, 36.2384], // Jordan
JP: [36.2048, 138.2529], // Japan
KE: [-0.0236, 37.9062], // Kenya
KG: [41.2044, 74.7661], // Kyrgyzstan
KH: [12.5657, 104.9910], // Cambodia
KI: [-3.3704, -168.7340],// Kiribati
KM: [-11.8750, 43.8722], // Comoros
KN: [17.3578, -62.7830], // Saint Kitts and Nevis
KP: [40.3399, 127.5101], // North Korea
KR: [35.9078, 127.7669], // South Korea
KW: [29.3117, 47.4818], // Kuwait
KY: [19.3133, -81.2546], // Cayman Islands
KZ: [48.0196, 66.9237], // Kazakhstan
LA: [19.8563, 102.4955], // Laos
LB: [33.8547, 35.8623], // Lebanon
LC: [13.9094, -60.9789], // Saint Lucia
LI: [47.1660, 9.5554], // Liechtenstein
LK: [7.8731, 80.7718], // Sri Lanka
LR: [6.4281, -9.4295], // Liberia
LS: [-29.6100, 28.2336], // Lesotho
LT: [55.1694, 23.8813], // Lithuania
LU: [49.8153, 6.1296], // Luxembourg
LV: [56.8796, 24.6032], // Latvia
LY: [26.3351, 17.2283], // Libya
MA: [31.7917, -7.0926], // Morocco
MC: [43.7384, 7.4246], // Monaco
MD: [47.4116, 28.3699], // Moldova
ME: [42.7087, 19.3744], // Montenegro
MF: [18.0708, -63.0501], // Saint Martin
MG: [-18.7669, 46.8691], // Madagascar
MH: [7.1315, 171.1845], // Marshall Islands
MK: [41.6086, 21.7453], // North Macedonia
ML: [17.5707, -3.9962], // Mali
MM: [21.9162, 95.9560], // Myanmar
MN: [46.8625, 103.8467], // Mongolia
MO: [22.1987, 113.5439], // Macao
MP: [17.3308, 145.3847], // Northern Mariana Islands
MQ: [14.6415, -61.0242], // Martinique
MR: [21.0079, -10.9408], // Mauritania
MS: [16.7425, -62.1874], // Montserrat
MT: [35.9375, 14.3754], // Malta
MU: [-20.3484, 57.5522], // Mauritius
MV: [3.2028, 73.2207], // Maldives
MW: [-13.2543, 34.3015], // Malawi
MX: [23.6345, -102.5528],// Mexico
MY: [4.2105, 101.9758], // Malaysia
MZ: [-18.6657, 35.5296], // Mozambique
NA: [-22.9576, 18.4904], // Namibia
NC: [-20.9043, 165.6180],// New Caledonia
NE: [17.6078, 8.0817], // Niger
NF: [-29.0408, 167.9547],// Norfolk Island
NG: [9.0820, 8.6753], // Nigeria
NI: [12.8654, -85.2072], // Nicaragua
NL: [52.1326, 5.2913], // Netherlands
NO: [60.4720, 8.4689], // Norway
NP: [28.3949, 84.1240], // Nepal
NR: [-0.5228, 166.9315], // Nauru
NU: [-19.0544, -169.8672],// Niue
NZ: [-40.9006, 174.8860],// New Zealand
OM: [21.4735, 55.9754], // Oman
PA: [8.5380, -80.7821], // Panama
PE: [-9.1900, -75.0152], // Peru
PF: [-17.6797, -149.4068],// French Polynesia
PG: [-6.3150, 143.9555], // Papua New Guinea
PH: [12.8797, 121.7740], // Philippines
PK: [30.3753, 69.3451], // Pakistan
PL: [51.9194, 19.1451], // Poland
PM: [46.8852, -56.3159], // Saint Pierre and Miquelon
PN: [-24.7036, -127.4392],// Pitcairn
PR: [18.2208, -66.5901], // Puerto Rico
PS: [31.9522, 35.2332], // Palestinian Territory
PT: [39.3999, -8.2245], // Portugal
PW: [7.5150, 134.5825], // Palau
PY: [-23.4425, -58.4438],// Paraguay
QA: [25.3548, 51.1839], // Qatar
RE: [-21.1151, 55.5364], // Reunion
RO: [45.9432, 24.9668], // Romania
RS: [44.0165, 21.0059], // Serbia
RU: [61.5240, 105.3188], // Russia
RW: [-1.9403, 29.8739], // Rwanda
SA: [23.8859, 45.0792], // Saudi Arabia
SB: [-9.6457, 160.1562], // Solomon Islands
SC: [-4.6796, 55.4920], // Seychelles
SD: [12.8628, 30.2176], // Sudan
SE: [60.1282, 18.6435], // Sweden
SG: [1.3521, 103.8198], // Singapore
SH: [-24.1435, -10.0307],// Saint Helena
SI: [46.1512, 14.9955], // Slovenia
SJ: [77.5536, 23.6703], // Svalbard and Jan Mayen
SK: [48.6690, 19.6990], // Slovakia
SL: [8.4606, -11.7799], // Sierra Leone
SM: [43.9424, 12.4578], // San Marino
SN: [14.4974, -14.4524], // Senegal
SO: [5.1521, 46.1996], // Somalia
SR: [3.9193, -56.0278], // Suriname
SS: [4.8594, 31.5713], // South Sudan
ST: [0.1864, 6.6131], // Sao Tome and Principe
SV: [13.7942, -88.8965], // El Salvador
SX: [18.0425, -63.0548], // Sint Maarten
SY: [34.8021, 38.9968], // Syria
SZ: [-26.5225, 31.4659], // Eswatini (Swaziland)
TC: [21.6940, -71.7979], // Turks and Caicos Islands
TD: [15.4542, 18.7322], // Chad
TF: [-49.2804, 69.3486], // French Southern Territories
TG: [8.6195, 0.8248], // Togo
TH: [15.8700, 100.9925], // Thailand
TJ: [38.8610, 71.2761], // Tajikistan
TK: [-9.2000, -171.8484],// Tokelau
TL: [-8.8742, 125.7275], // Timor-Leste
TM: [38.9697, 59.5563], // Turkmenistan
TN: [33.8869, 9.5375], // Tunisia
TO: [-21.1790, -175.1982],// Tonga
TR: [38.9637, 35.2433], // Turkey
TT: [10.6918, -61.2225], // Trinidad and Tobago
TV: [-7.1095, 177.6493], // Tuvalu
TW: [23.6978, 120.9605], // Taiwan
TZ: [-6.3690, 34.8888], // Tanzania
UA: [48.3794, 31.1656], // Ukraine
UG: [1.3733, 32.2903], // Uganda
UM: [19.2823, 166.6470], // United States Minor Outlying Islands
US: [37.0902, -95.7129], // United States
UY: [-32.5228, -55.7658],// Uruguay
UZ: [41.3775, 64.5853], // Uzbekistan
VA: [41.9029, 12.4534], // Vatican City
VC: [12.9843, -61.2872], // Saint Vincent and the Grenadines
VE: [6.4238, -66.5897], // Venezuela
VG: [18.4207, -64.6400], // British Virgin Islands
VI: [18.3358, -64.8963], // U.S. Virgin Islands
VN: [14.0583, 108.2772], // Vietnam
VU: [-15.3767, 166.9592],// Vanuatu
WF: [-13.7687, -177.1561],// Wallis and Futuna
WS: [-13.7590, -172.1046],// Samoa
XK: [42.6026, 20.9030], // Kosovo
YE: [15.5527, 48.5164], // Yemen
YT: [-12.8275, 45.1662], // Mayotte
ZA: [-30.5595, 22.9375], // South Africa
ZM: [-13.1339, 27.8493], // Zambia
ZW: [-19.0154, 29.1549], // Zimbabwe
};
/**
* Returns the [latitude, longitude] centroid for a given ISO 3166-1 alpha-2
* country code, or null if the code is not recognised.
*
* The lookup is case-insensitive.
*/
export function countryToLatLng(code: string): [number, number] | null {
if (!code) return null;
const normalised = code.trim().toUpperCase();
return COUNTRY_CENTROIDS[normalised] ?? null;
}