ario_server/pkg/countryCenter/county_center.go
2025-10-10 07:13:36 -07:00

1176 lines
57 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package countryCenter
import (
"fmt"
"strings"
)
var countryCenter = map[string][2]float64{
"Afghanistan": {33.93911, 67.709953},
"Albania": {41.153332, 20.168331},
"Algeria": {28.033886, 1.659626},
"Andorra": {42.546245, 1.601554},
"Angola": {-11.202692, 17.873887},
"Antigua and Barbuda": {17.060816, -61.796428},
"Argentina": {-38.416097, -63.616672},
"Armenia": {40.069099, 45.038189},
"Australia": {-25.274398, 133.775136},
"Azerbaijan": {40.143105, 47.576927},
"Bahamas": {25.03428, -77.39628},
"Bahrain": {26.0667, 50.5577},
"Bangladesh": {23.684994, 90.356331},
"Barbados": {13.193887, -59.543198},
"Belarus": {53.709807, 27.953389},
"Belgium": {50.503887, 4.469936},
"Belize": {17.189877, -88.49765},
"Benin": {9.30769, 2.315834},
"Bhutan": {27.514162, 90.433601},
"Bolivia": {-16.290154, -63.588653},
"Bosnia and Herzegovina": {43.915886, 17.679076},
"Botswana": {-22.328474, 24.684866},
"Brazil": {-14.235004, -51.92528},
"Brunei": {4.535277, 114.727669},
"Bulgaria": {42.733883, 25.48583},
"Burkina Faso": {12.238333, -1.561593},
"Burundi": {-3.373056, 29.918886},
"Cabo Verde": {16.5388, -23.0418},
"Cambodia": {12.565679, 104.990963},
"Cameroon": {7.369722, 12.354722},
"Canada": {56.130366, -106.346771},
"Central African Republic": {6.611111, 20.939444},
"Chad": {15.454166, 18.732207},
"Chile": {-35.675147, -71.542969},
"China": {35.86166, 104.195397},
"Colombia": {4.570868, -74.297333},
"Comoros": {-11.6455, 43.3333},
"Congo": {-0.228021, 15.827659},
"Costa Rica": {9.748917, -83.753428},
"Croatia": {45.1, 15.2},
"Cuba": {21.521757, -77.781167},
"Cyprus": {35.126413, 33.429859},
"Czechia": {49.817492, 15.472962},
"Denmark": {56.26392, 9.501785},
"Djibouti": {11.825138, 42.590275},
"Dominica": {15.414999, -61.370976},
"Dominican Republic": {18.735693, -70.162651},
"Ecuador": {-1.831239, -78.183406},
"Egypt": {26.820553, 30.802498},
"El Salvador": {13.794185, -88.89653},
"Equatorial Guinea": {1.650801, 10.267895},
"Eritrea": {15.179384, 39.782334},
"Estonia": {58.595272, 25.013607},
"Eswatini": {-26.522503, 31.465866},
"Ethiopia": {9.145, 40.489673},
"Fiji": {-17.713371, 178.065032},
"Finland": {61.92411, 25.748151},
"France": {46.603354, 1.888334},
"Gabon": {-0.803689, 11.609444},
"Gambia": {13.443182, -15.310139},
"Georgia": {32.165622, -82.900075},
"Germany": {51.165691, 10.451526},
"Ghana": {7.946527, -1.023194},
"Greece": {39.074208, 21.824312},
"Grenada": {12.262776, -61.604171},
"Guatemala": {15.783471, -90.230759},
"Guinea": {9.945587, -9.696645},
"Guinea-Bissau": {11.803749, -15.180413},
"Guyana": {4.860416, -58.93018},
"Haiti": {18.971187, -72.285215},
"Honduras": {15.199999, -86.241905},
"Hungary": {47.162494, 19.503304},
"Iceland": {64.963051, -19.020835},
"India": {20.593684, 78.96288},
"Indonesia": {-0.789275, 113.921327},
"Iran": {32.427908, 53.688046},
"Iraq": {33.223191, 43.679291},
"Ireland": {53.41291, -8.24389},
"Israel": {31.046051, 34.851612},
"Italy": {41.87194, 12.56738},
"Jamaica": {18.109581, -77.297508},
"Japan": {36.204824, 138.252924},
"Jordan": {30.585164, 36.238414},
"Kazakhstan": {48.019573, 66.923684},
"Kenya": {-1.292066, 36.821946},
"Kiribati": {-3.370417, -168.734039},
"Kuwait": {29.31166, 47.481766},
"Kyrgyzstan": {41.20438, 74.766098},
"Laos": {19.85627, 102.495496},
"Latvia": {56.879635, 24.603189},
"Lebanon": {33.854721, 35.862285},
"Lesotho": {-29.609988, 28.233608},
"Liberia": {6.428055, -9.429499},
"Libya": {26.3351, 17.228331},
"Liechtenstein": {47.166, 9.555373},
"Lithuania": {55.169438, 23.881275},
"Luxembourg": {49.815273, 6.129583},
"Madagascar": {-18.766947, 46.869107},
"Malawi": {-13.254308, 34.301525},
"Malaysia": {4.210484, 101.975766},
"Maldives": {3.202778, 73.22068},
"Mali": {17.570692, -3.996166},
"Malta": {35.937496, 14.375416},
"Marshall Islands": {7.131474, 171.184478},
"Mauritania": {21.00789, -10.940835},
"Mauritius": {-20.348404, 57.552152},
"Mexico": {23.634501, -102.552784},
"Micronesia": {7.425554, 150.550812},
"Moldova": {47.411631, 28.369885},
"Monaco": {43.738417, 7.424616},
"Mongolia": {46.862496, 103.846656},
"Montenegro": {42.708678, 19.37439},
"Morocco": {31.791702, -7.09262},
"Mozambique": {-18.665695, 35.529562},
"Myanmar": {21.916221, 95.955974},
"Namibia": {-22.95764, 18.49041},
"Nauru": {-0.522778, 166.931503},
"Nepal": {28.394857, 84.124008},
"Netherlands": {52.132633, 5.291266},
"New Zealand": {-40.900557, 174.885971},
"Nicaragua": {12.865416, -85.207229},
"Niger": {17.607789, 8.081666},
"Nigeria": {9.081999, 8.675277},
"North Korea": {40.339852, 127.510093},
"North Macedonia": {41.608635, 21.745275},
"Norway": {60.472024, 8.468946},
"Oman": {21.512583, 55.923255},
"Pakistan": {30.375321, 69.345116},
"Palau": {7.51498, 134.58252},
"Palestine": {31.952162, 35.233154},
"Panama": {8.537981, -80.782127},
"Papua New Guinea": {-6.314993, 143.95555},
"Paraguay": {-23.442503, -58.443832},
"Peru": {-9.189967, -75.015152},
"Philippines": {12.879721, 121.774017},
"Poland": {51.919438, 19.145136},
"Portugal": {39.399872, -8.224454},
"Qatar": {25.354826, 51.183884},
"Romania": {45.943161, 24.96676},
"Russia": {61.52401, 105.318756},
"Rwanda": {-1.940278, 29.873888},
"Saint Kitts and Nevis": {17.357822, -62.782998},
"Saint Lucia": {13.909444, -60.978893},
"Saint Vincent and the Grenadines": {12.984305, -61.287228},
"Samoa": {-13.759029, -172.104629},
"San Marino": {43.94236, 12.457777},
"Sao Tome and Principe": {0.18636, 6.613081},
"Saudi Arabia": {23.885942, 45.079162},
"Senegal": {14.497401, -14.452362},
"Serbia": {44.016521, 21.005859},
"Seychelles": {-4.679574, 55.491977},
"Sierra Leone": {8.460555, -11.779889},
"Singapore": {1.352083, 103.819836},
"Slovakia": {48.669026, 19.699024},
"Slovenia": {46.151241, 14.995463},
"Solomon Islands": {-9.64571, 160.156194},
"Somalia": {5.152149, 46.199616},
"South Africa": {-30.559482, 22.937506},
"South Korea": {35.907757, 127.766922},
"South Sudan": {6.8769919, 31.3069788},
"Spain": {40.463667, -3.74922},
"Sri Lanka": {7.873054, 80.771797},
"Sudan": {12.862807, 30.217636},
"Suriname": {3.919305, -56.027783},
"Sweden": {60.128161, 18.643501},
"Switzerland": {46.818188, 8.227512},
"Syria": {34.802075, 38.996815},
"Tajikistan": {38.861034, 71.276093},
"Tanzania": {-6.369028, 34.888822},
"Thailand": {15.870032, 100.992541},
"Timor-Leste": {-8.874217, 125.727539},
"Togo": {8.619543, 0.824782},
"Tonga": {-21.178986, -175.198242},
"Trinidad and Tobago": {10.691803, -61.222503},
"Tunisia": {33.886917, 9.537499},
"Turkey": {38.963745, 35.243322},
"Turkmenistan": {38.969719, 59.556278},
"Tuvalu": {-7.109535, 177.64933},
"Uganda": {1.373333, 32.290275},
"Ukraine": {48.379433, 31.16558},
"United Arab Emirates": {23.424076, 53.847818},
"United Kingdom": {55.378051, -3.435973},
"United States": {37.09024, -95.712891},
"Uruguay": {-32.522779, -55.765835},
"Uzbekistan": {41.377491, 64.585262},
"Vanuatu": {-15.376706, 166.959158},
"Vatican City": {41.902916, 12.453389},
"Venezuela": {6.42375, -66.58973},
"Vietnam": {14.058324, 108.277199},
"Yemen": {15.552727, 48.516388},
"Zambia": {-13.133897, 27.849332},
"Zimbabwe": {-19.015438, 29.154857},
}
// 国家简称到全称的映射表
var countryAbbr = map[string]string{
// ISO 3166-1 alpha-2 codes
"AD": "Andorra",
"AE": "United Arab Emirates",
"AF": "Afghanistan",
"AG": "Antigua and Barbuda",
"AI": "Anguilla",
"AL": "Albania",
"AM": "Armenia",
"AO": "Angola",
"AQ": "Antarctica",
"AR": "Argentina",
"AS": "American Samoa",
"AT": "Austria",
"AU": "Australia",
"AW": "Aruba",
"AX": "Aland Islands",
"AZ": "Azerbaijan",
"BA": "Bosnia and Herzegovina",
"BB": "Barbados",
"BD": "Bangladesh",
"BE": "Belgium",
"BF": "Burkina Faso",
"BG": "Bulgaria",
"BH": "Bahrain",
"BI": "Burundi",
"BJ": "Benin",
"BL": "Saint Barthelemy",
"BM": "Bermuda",
"BN": "Brunei",
"BO": "Bolivia",
"BQ": "Bonaire",
"BR": "Brazil",
"BS": "Bahamas",
"BT": "Bhutan",
"BV": "Bouvet Island",
"BW": "Botswana",
"BY": "Belarus",
"BZ": "Belize",
"CA": "Canada",
"CC": "Cocos Islands",
"CD": "Congo",
"CF": "Central African Republic",
"CG": "Congo",
"CH": "Switzerland",
"CI": "Cote D'Ivoire",
"CK": "Cook Islands",
"CL": "Chile",
"CM": "Cameroon",
"CN": "China",
"CO": "Colombia",
"CR": "Costa Rica",
"CU": "Cuba",
"CV": "Cabo Verde",
"CW": "Curacao",
"CX": "Christmas Island",
"CY": "Cyprus",
"CZ": "Czechia",
"DE": "Germany",
"DJ": "Djibouti",
"DK": "Denmark",
"DM": "Dominica",
"DO": "Dominican Republic",
"DZ": "Algeria",
"EC": "Ecuador",
"EE": "Estonia",
"EG": "Egypt",
"EH": "Western Sahara",
"ER": "Eritrea",
"ES": "Spain",
"ET": "Ethiopia",
"FI": "Finland",
"FJ": "Fiji",
"FK": "Falkland Islands",
"FM": "Micronesia",
"FO": "Faroe Islands",
"FR": "France",
"GA": "Gabon",
"GB": "United Kingdom",
"GD": "Grenada",
"GE": "Georgia",
"GF": "French Guiana",
"GG": "Guernsey",
"GH": "Ghana",
"GI": "Gibraltar",
"GL": "Greenland",
"GM": "Gambia",
"GN": "Guinea",
"GP": "Guadeloupe",
"GQ": "Equatorial Guinea",
"GR": "Greece",
"GS": "South Georgia",
"GT": "Guatemala",
"GU": "Guam",
"GW": "Guinea-Bissau",
"GY": "Guyana",
"HK": "Hong Kong",
"HM": "Heard Island",
"HN": "Honduras",
"HR": "Croatia",
"HT": "Haiti",
"HU": "Hungary",
"ID": "Indonesia",
"IE": "Ireland",
"IL": "Israel",
"IM": "Isle of Man",
"IN": "India",
"IO": "British Indian Ocean Territory",
"IQ": "Iraq",
"IR": "Iran",
"IS": "Iceland",
"IT": "Italy",
"JE": "Jersey",
"JM": "Jamaica",
"JO": "Jordan",
"JP": "Japan",
"KE": "Kenya",
"KG": "Kyrgyzstan",
"KH": "Cambodia",
"KI": "Kiribati",
"KM": "Comoros",
"KN": "Saint Kitts and Nevis",
"KP": "North Korea",
"KR": "South Korea",
"KW": "Kuwait",
"KY": "Cayman Islands",
"KZ": "Kazakhstan",
"LA": "Laos",
"LB": "Lebanon",
"LC": "Saint Lucia",
"LI": "Liechtenstein",
"LK": "Sri Lanka",
"LR": "Liberia",
"LS": "Lesotho",
"LT": "Lithuania",
"LU": "Luxembourg",
"LV": "Latvia",
"LY": "Libya",
"MA": "Morocco",
"MC": "Monaco",
"MD": "Moldova",
"ME": "Montenegro",
"MF": "Saint Martin",
"MG": "Madagascar",
"MH": "Marshall Islands",
"MK": "North Macedonia",
"ML": "Mali",
"MM": "Myanmar",
"MN": "Mongolia",
"MO": "Macao",
"MP": "Northern Mariana Islands",
"MQ": "Martinique",
"MR": "Mauritania",
"MS": "Montserrat",
"MT": "Malta",
"MU": "Mauritius",
"MV": "Maldives",
"MW": "Malawi",
"MX": "Mexico",
"MY": "Malaysia",
"MZ": "Mozambique",
"NA": "Namibia",
"NC": "New Caledonia",
"NE": "Niger",
"NF": "Norfolk Island",
"NG": "Nigeria",
"NI": "Nicaragua",
"NL": "Netherlands",
"NO": "Norway",
"NP": "Nepal",
"NR": "Nauru",
"NU": "Niue",
"NZ": "New Zealand",
"OM": "Oman",
"PA": "Panama",
"PE": "Peru",
"PF": "French Polynesia",
"PG": "Papua New Guinea",
"PH": "Philippines",
"PK": "Pakistan",
"PL": "Poland",
"PM": "Saint Pierre and Miquelon",
"PN": "Pitcairn",
"PR": "Puerto Rico",
"PS": "Palestine",
"PT": "Portugal",
"PW": "Palau",
"PY": "Paraguay",
"QA": "Qatar",
"RE": "Reunion",
"RO": "Romania",
"RS": "Serbia",
"RU": "Russia",
"RW": "Rwanda",
"SA": "Saudi Arabia",
"SB": "Solomon Islands",
"SC": "Seychelles",
"SD": "Sudan",
"SE": "Sweden",
"SG": "Singapore",
"SH": "Saint Helena",
"SI": "Slovenia",
"SJ": "Svalbard and Jan Mayen",
"SK": "Slovakia",
"SL": "Sierra Leone",
"SM": "San Marino",
"SN": "Senegal",
"SO": "Somalia",
"SR": "Suriname",
"SS": "South Sudan",
"ST": "Sao Tome and Principe",
"SV": "El Salvador",
"SX": "Sint Maarten",
"SY": "Syria",
"SZ": "Eswatini",
"TC": "Turks and Caicos Islands",
"TD": "Chad",
"TF": "French Southern Territories",
"TG": "Togo",
"TH": "Thailand",
"TJ": "Tajikistan",
"TK": "Tokelau",
"TL": "Timor-Leste",
"TM": "Turkmenistan",
"TN": "Tunisia",
"TO": "Tonga",
"TR": "Turkey",
"TT": "Trinidad and Tobago",
"TV": "Tuvalu",
"TW": "Taiwan",
"TZ": "Tanzania",
"UA": "Ukraine",
"UG": "Uganda",
"UM": "United States Minor Outlying Islands",
"US": "United States",
"UY": "Uruguay",
"UZ": "Uzbekistan",
"VA": "Vatican City",
"VC": "Saint Vincent and the Grenadines",
"VE": "Venezuela",
"VG": "British Virgin Islands",
"VI": "U.S. Virgin Islands",
"VN": "Vietnam",
"VU": "Vanuatu",
"WF": "Wallis and Futuna",
"WS": "Samoa",
"YE": "Yemen",
"YT": "Mayotte",
"ZA": "South Africa",
"ZM": "Zambia",
"ZW": "Zimbabwe",
}
// 主要城市到国家的映射表
var cityToCountry = map[string]string{
// China
"Beijing": "China", "Shanghai": "China", "Guangzhou": "China", "Shenzhen": "China", "HK": "China", "Tsuen Wan": "China",
"Chengdu": "China", "Hangzhou": "China", "Wuhan": "China", "Xi'an": "China",
"Nanjing": "China", "Tianjin": "China", "Chongqing": "China", "Shenyang": "China",
"Dalian": "China", "Qingdao": "China", "Jinan": "China", "Harbin": "China",
"Changchun": "China", "Shijiazhuang": "China", "Taiyuan": "China", "Hohhot": "China",
"Yinchuan": "China", "Lanzhou": "China", "Xining": "China", "Urumqi": "China",
"Lhasa": "China", "Kunming": "China", "Guiyang": "China", "Nanning": "China",
"Haikou": "China", "Changsha": "China", "Zhengzhou": "China", "Nanchang": "China",
"Hefei": "China", "Fuzhou": "China", "Taipei": "China", "Hong Kong": "China", "Macao": "China",
// United States
"New York": "United States", "Chicago": "United States",
"Houston": "United States", "Phoenix": "United States", "Philadelphia": "United States",
"San Antonio": "United States", "San Diego": "United States", "Dallas": "United States",
"San Jose": "United States", "Austin": "United States", "Jacksonville": "United States",
"Fort Worth": "United States", "Columbus": "United States", "Indianapolis": "United States",
"Charlotte": "United States", "San Francisco": "United States", "Seattle": "United States",
"Denver": "United States", "Washington": "United States", "Boston": "United States",
"El Paso": "United States", "Detroit": "United States", "Nashville": "United States",
"Portland Oregon": "United States", "Memphis": "United States", "Oklahoma City": "United States",
"Las Vegas": "United States", "Louisville": "United States", "Baltimore": "United States",
"Milwaukee": "United States", "Albuquerque": "United States", "Tucson": "United States",
"Fresno": "United States", "Sacramento": "United States", "Mesa": "United States",
"Kansas City": "United States", "Atlanta": "United States", "Long Beach": "United States",
"Colorado Springs": "United States", "Raleigh": "United States", "Miami": "United States",
"Virginia Beach": "United States", "Omaha": "United States", "Oakland": "United States",
"Minneapolis": "United States", "Tulsa": "United States", "Arlington": "United States",
// Japan
"Tokyo": "Japan", "Osaka": "Japan", "Yokohama": "Japan", "Nagoya": "Japan",
"Sapporo": "Japan", "Fukuoka": "Japan", "Kobe": "Japan", "Kawasaki": "Japan",
"Kyoto": "Japan", "Saitama": "Japan", "Hiroshima": "Japan", "Sendai": "Japan",
"Kitakyushu": "Japan", "Chiba": "Japan", "Sakai": "Japan", "Niigata": "Japan",
"Hamamatsu": "Japan", "Okayama": "Japan", "Sagamihara": "Japan", "Kumamoto": "Japan",
// United Kingdom
"London": "United Kingdom", "Birmingham": "United Kingdom", "Manchester": "United Kingdom",
"Glasgow": "United Kingdom", "Liverpool": "United Kingdom", "Edinburgh": "United Kingdom",
"Leeds": "United Kingdom", "Sheffield": "United Kingdom", "Bristol": "United Kingdom",
"Cardiff": "United Kingdom", "Belfast": "United Kingdom", "Leicester": "United Kingdom",
"Coventry": "United Kingdom", "Bradford": "United Kingdom", "Nottingham": "United Kingdom",
"Kingston upon Hull": "United Kingdom", "Newcastle upon Tyne": "United Kingdom",
"Stoke-on-Trent": "United Kingdom", "Southampton": "United Kingdom", "Derby": "United Kingdom",
// Germany
"Berlin": "Germany", "Hamburg": "Germany", "Munich": "Germany", "Cologne": "Germany",
"Frankfurt": "Germany", "Stuttgart": "Germany", "Düsseldorf": "Germany", "Dortmund": "Germany",
"Essen": "Germany", "Leipzig": "Germany", "Bremen": "Germany", "Dresden": "Germany",
"Hanover": "Germany", "Nuremberg": "Germany", "Duisburg": "Germany", "Bochum": "Germany",
"Wuppertal": "Germany", "Bielefeld": "Germany", "Bonn": "Germany", "Münster": "Germany",
// France
"Paris": "France", "Marseille": "France", "Lyon": "France", "Toulouse": "France",
"Nice": "France", "Nantes": "France", "Strasbourg": "France", "Montpellier": "France",
"Bordeaux": "France", "Lille": "France", "Rennes": "France", "Reims": "France",
"Le Havre": "France", "Saint-Étienne": "France", "Toulon": "France", "Grenoble": "France",
"Dijon": "France", "Angers": "France", "Nîmes": "France", "Villeurbanne": "France",
// Italy
"Rome": "Italy", "Milan": "Italy", "Naples": "Italy", "Turin": "Italy",
"Palermo": "Italy", "Genoa": "Italy", "Bologna": "Italy", "Florence": "Italy",
"Bari": "Italy", "Catania": "Italy", "Venice": "Italy", "Verona": "Italy",
"Messina": "Italy", "Padua": "Italy", "Trieste": "Italy", "Taranto": "Italy",
// Spain
"Madrid": "Spain", "Seville": "Spain",
"Zaragoza": "Spain", "Málaga": "Spain", "Murcia": "Spain", "Palma": "Spain",
"Las Palmas": "Spain", "Bilbao": "Spain", "Alicante": "Spain",
"Valladolid": "Spain", "Vigo": "Spain", "Gijón": "Spain", "Hospitalet": "Spain",
"A Coruña": "Spain", "Vitoria-Gasteiz": "Spain", "Granada": "Spain", "Elche": "Spain",
// Canada
"Toronto": "Canada", "Montreal": "Canada", "Vancouver": "Canada", "Calgary": "Canada",
"Edmonton": "Canada", "Ottawa": "Canada", "Winnipeg": "Canada", "Quebec City": "Canada",
"Hamilton Canada": "Canada", "Kitchener": "Canada", "London Ontario": "Canada", "Victoria Canada": "Canada",
"Halifax": "Canada", "Oshawa": "Canada", "Windsor Canada": "Canada", "Saskatoon": "Canada",
"Regina": "Canada", "St. John's": "Canada", "Kelowna": "Canada", "Barrie": "Canada",
// Australia
"Sydney": "Australia", "Melbourne": "Australia", "Brisbane": "Australia", "Perth": "Australia",
"Adelaide": "Australia", "Gold Coast": "Australia", "Newcastle Australia": "Australia", "Canberra": "Australia",
"Sunshine Coast": "Australia", "Wollongong": "Australia", "Hobart": "Australia", "Geelong": "Australia",
"Townsville": "Australia", "Cairns": "Australia", "Toowoomba": "Australia", "Darwin": "Australia",
// India
"Mumbai": "India", "Delhi": "India", "Bangalore": "India", "Hyderabad": "India",
"Ahmedabad": "India", "Chennai": "India", "Kolkata": "India", "Surat": "India",
"Pune": "India", "Jaipur": "India", "Lucknow": "India", "Kanpur": "India",
"Nagpur": "India", "Indore": "India", "Thane": "India", "Bhopal": "India",
"Visakhapatnam": "India", "Pimpri": "India", "Patna": "India", "Vadodara": "India",
"Ludhiana": "India", "Agra": "India", "Nashik": "India", "Faridabad": "India",
"Meerut": "India", "Rajkot": "India", "Kalyan": "India", "Vasai": "India",
// Brazil
"São Paulo": "Brazil", "Rio de Janeiro": "Brazil", "Brasília": "Brazil", "Salvador": "Brazil",
"Fortaleza": "Brazil", "Belo Horizonte": "Brazil", "Manaus": "Brazil", "Curitiba": "Brazil",
"Recife": "Brazil", "Porto Alegre": "Brazil", "Belém": "Brazil", "Goiânia": "Brazil",
"Guarulhos": "Brazil", "Campinas": "Brazil", "São Luís": "Brazil", "São Gonçalo": "Brazil",
// Russia
"Moscow": "Russia", "Saint Petersburg": "Russia", "Novosibirsk": "Russia", "Yekaterinburg": "Russia",
"Nizhny Novgorod": "Russia", "Kazan": "Russia", "Chelyabinsk": "Russia", "Omsk": "Russia",
"Samara": "Russia", "Rostov-on-Don": "Russia", "Ufa": "Russia", "Krasnoyarsk": "Russia",
"Perm": "Russia", "Voronezh": "Russia", "Volgograd": "Russia", "Krasnodar": "Russia",
// South Korea
"Seoul": "South Korea", "Busan": "South Korea", "Incheon": "South Korea", "Daegu": "South Korea",
"Daejeon": "South Korea", "Gwangju": "South Korea", "Suwon": "South Korea", "Ulsan": "South Korea",
"Changwon": "South Korea", "Goyang": "South Korea", "Yongin": "South Korea", "Bucheon": "South Korea",
// Mexico
"Mexico City": "Mexico", "Guadalajara": "Mexico", "Monterrey": "Mexico", "Puebla": "Mexico",
"Tijuana": "Mexico", "León": "Mexico", "Juárez": "Mexico", "Torreón": "Mexico",
"Querétaro": "Mexico", "San Luis Potosí": "Mexico", "Mexicali": "Mexico",
// Indonesia
"Jakarta": "Indonesia", "Surabaya": "Indonesia", "Bandung": "Indonesia", "Bekasi": "Indonesia",
"Medan": "Indonesia", "Tangerang": "Indonesia", "Depok": "Indonesia", "Semarang": "Indonesia",
"Palembang": "Indonesia", "Makassar": "Indonesia", "Batam": "Indonesia", "Bogor": "Indonesia",
// Turkey
"Istanbul": "Turkey", "Ankara": "Turkey", "Izmir": "Turkey", "Bursa": "Turkey",
"Adana": "Turkey", "Gaziantep": "Turkey", "Konya": "Turkey", "Antalya": "Turkey",
"Kayseri": "Turkey", "Mersin": "Turkey", "Eskişehir": "Turkey", "Diyarbakır": "Turkey",
// Netherlands
"Amsterdam": "Netherlands", "Rotterdam": "Netherlands", "The Hague": "Netherlands", "Utrecht": "Netherlands",
"Eindhoven": "Netherlands", "Tilburg": "Netherlands", "Groningen": "Netherlands", "Almere": "Netherlands",
"Breda": "Netherlands", "Nijmegen": "Netherlands", "Enschede": "Netherlands", "Haarlem": "Netherlands",
// Saudi Arabia
"Riyadh": "Saudi Arabia", "Jeddah": "Saudi Arabia", "Mecca": "Saudi Arabia", "Medina": "Saudi Arabia",
"Dammam": "Saudi Arabia", "Khobar": "Saudi Arabia", "Tabuk": "Saudi Arabia", "Buraidah": "Saudi Arabia",
"Khamis Mushait": "Saudi Arabia", "Hafar Al-Batin": "Saudi Arabia", "Jubail": "Saudi Arabia", "Taif": "Saudi Arabia",
// Argentina
"Buenos Aires": "Argentina", "Rosario": "Argentina", "Mendoza": "Argentina",
"Tucumán": "Argentina", "La Plata": "Argentina", "Mar del Plata": "Argentina", "Salta": "Argentina",
"Santa Fe": "Argentina", "San Juan": "Argentina", "Resistencia": "Argentina", "Santiago del Estero": "Argentina",
// Poland
"Warsaw": "Poland", "Kraków": "Poland", "Łódź": "Poland", "Wrocław": "Poland",
"Poznań": "Poland", "Gdańsk": "Poland", "Szczecin": "Poland", "Bydgoszcz": "Poland",
"Lublin": "Poland", "Katowice": "Poland", "Białystok": "Poland", "Gdynia": "Poland",
// Ukraine
"Kiev": "Ukraine", "Kharkiv": "Ukraine", "Odessa": "Ukraine", "Dnipro": "Ukraine",
"Donetsk": "Ukraine", "Zaporizhzhia": "Ukraine", "Lviv": "Ukraine", "Kryvyi Rih": "Ukraine",
"Mykolaiv": "Ukraine", "Mariupol": "Ukraine", "Luhansk": "Ukraine", "Vinnytsia": "Ukraine",
// Egypt
"Cairo": "Egypt", "Alexandria": "Egypt", "Giza": "Egypt", "Shubra El Kheima": "Egypt",
"Port Said": "Egypt", "Suez": "Egypt", "Luxor": "Egypt", "Mansoura": "Egypt",
"El Mahalla El Kubra": "Egypt", "Tanta": "Egypt", "Asyut": "Egypt", "Ismailia": "Egypt",
// Nigeria
"Lagos": "Nigeria", "Kano": "Nigeria", "Ibadan": "Nigeria", "Abuja": "Nigeria",
"Port Harcourt": "Nigeria", "Benin City": "Nigeria", "Maiduguri": "Nigeria", "Zaria": "Nigeria",
"Aba": "Nigeria", "Jos": "Nigeria", "Ilorin": "Nigeria", "Oyo": "Nigeria",
// South Africa
"Johannesburg": "South Africa", "Cape Town": "South Africa", "Durban": "South Africa", "Pretoria": "South Africa",
"Soweto": "South Africa", "Port Elizabeth": "South Africa", "Pietermaritzburg": "South Africa", "Benoni": "South Africa",
"Tembisa": "South Africa", "East London": "South Africa", "Vereeniging": "South Africa", "Bloemfontein": "South Africa",
// Iran
"Tehran": "Iran", "Mashhad": "Iran", "Isfahan": "Iran", "Karaj": "Iran",
"Shiraz": "Iran", "Tabriz": "Iran", "Qom": "Iran", "Ahvaz": "Iran",
"Kermanshah": "Iran", "Urmia": "Iran", "Rasht": "Iran", "Zahedan": "Iran",
// Thailand
"Bangkok": "Thailand", "Nonthaburi": "Thailand", "Pak Kret": "Thailand", "Hat Yai": "Thailand",
"Chiang Mai": "Thailand", "Phuket": "Thailand", "Pattaya": "Thailand", "Nakhon Ratchasima": "Thailand",
"Khon Kaen": "Thailand", "Udon Thani": "Thailand", "Surat Thani": "Thailand", "Nakhon Si Thammarat": "Thailand",
// Vietnam
"Ho Chi Minh City": "Vietnam", "Hanoi": "Vietnam", "Haiphong": "Vietnam", "Da Nang": "Vietnam",
"Bien Hoa": "Vietnam", "Hue": "Vietnam", "Nha Trang": "Vietnam", "Can Tho": "Vietnam",
"Rach Gia": "Vietnam", "Qui Nhon": "Vietnam", "Vung Tau": "Vietnam", "Nam Dinh": "Vietnam",
// Philippines
"Manila": "Philippines", "Quezon City": "Philippines", "Davao": "Philippines", "Caloocan": "Philippines",
"Cebu City": "Philippines", "Zamboanga": "Philippines", "Antipolo": "Philippines", "Taguig": "Philippines",
"Pasig": "Philippines", "Cagayan de Oro": "Philippines", "Paranaque": "Philippines", "Makati": "Philippines",
// Malaysia
"Kuala Lumpur": "Malaysia", "George Town": "Malaysia", "Ipoh": "Malaysia", "Shah Alam": "Malaysia",
"Petaling Jaya": "Malaysia", "Johor Bahru": "Malaysia", "Seremban": "Malaysia", "Kuching": "Malaysia",
"Kota Kinabalu": "Malaysia", "Klang": "Malaysia", "Kajang": "Malaysia", "Subang Jaya": "Malaysia",
// Bangladesh
"Dhaka": "Bangladesh", "Chittagong": "Bangladesh", "Sylhet": "Bangladesh", "Khulna": "Bangladesh",
"Rajshahi": "Bangladesh", "Rangpur": "Bangladesh", "Barisal": "Bangladesh", "Comilla": "Bangladesh",
"Mymensingh": "Bangladesh", "Narayanganj": "Bangladesh", "Gazipur": "Bangladesh", "Tongi": "Bangladesh",
// Pakistan
"Karachi": "Pakistan", "Lahore": "Pakistan", "Faisalabad": "Pakistan", "Rawalpindi": "Pakistan",
"Gujranwala": "Pakistan", "Peshawar": "Pakistan", "Multan": "Pakistan", "Islamabad": "Pakistan",
"Quetta": "Pakistan", "Bahawalpur": "Pakistan", "Sargodha": "Pakistan", "Sialkot": "Pakistan",
// Afghanistan
"Kabul": "Afghanistan", "Kandahar": "Afghanistan", "Herat": "Afghanistan", "Mazar-i-Sharif": "Afghanistan",
"Jalalabad": "Afghanistan", "Kunduz": "Afghanistan", "Ghazni": "Afghanistan", "Bamyan": "Afghanistan",
// Israel
"Jerusalem": "Israel", "Tel Aviv": "Israel", "Haifa": "Israel", "Rishon LeZion": "Israel",
"Petah Tikva": "Israel", "Ashdod": "Israel", "Netanya": "Israel", "Beer Sheva": "Israel",
"Holon": "Israel", "Bnei Brak": "Israel", "Ramat Gan": "Israel", "Ashkelon": "Israel",
// Iraq
"Baghdad": "Iraq", "Basra": "Iraq", "Mosul": "Iraq", "Erbil": "Iraq",
"Sulaymaniyah": "Iraq", "Najaf": "Iraq", "Karbala": "Iraq", "Nasiriyah": "Iraq",
"Amarah": "Iraq", "Duhok": "Iraq", "Ramadi": "Iraq", "Fallujah": "Iraq",
// Morocco
"Casablanca": "Morocco", "Rabat": "Morocco", "Fes": "Morocco", "Marrakech": "Morocco",
"Tangier": "Morocco", "Meknes": "Morocco", "Oujda": "Morocco", "Kenitra": "Morocco",
"Tetouan": "Morocco", "Safi": "Morocco", "El Jadida": "Morocco", "Nador": "Morocco",
// Algeria
"Algiers": "Algeria", "Oran": "Algeria", "Constantine": "Algeria", "Batna": "Algeria",
"Djelfa": "Algeria", "Setif": "Algeria", "Annaba": "Algeria", "Sidi Bel Abbes": "Algeria",
"Biskra": "Algeria", "Tebessa": "Algeria", "El Oued": "Algeria", "Skikda": "Algeria",
// Kenya
"Nairobi": "Kenya", "Mombasa": "Kenya", "Kisumu": "Kenya", "Nakuru": "Kenya",
"Eldoret": "Kenya", "Kitale": "Kenya", "Malindi": "Kenya", "Garissa": "Kenya",
"Kakamega": "Kenya", "Nyeri": "Kenya", "Machakos": "Kenya", "Meru": "Kenya",
// Ethiopia
"Addis Ababa": "Ethiopia", "Dire Dawa": "Ethiopia", "Mek'ele": "Ethiopia", "Gondar": "Ethiopia",
"Adama": "Ethiopia", "Awasa": "Ethiopia", "Bahir Dar": "Ethiopia", "Dessie": "Ethiopia",
"Jimma": "Ethiopia", "Jijiga": "Ethiopia", "Shashamane": "Ethiopia", "Nekemte": "Ethiopia",
// Ghana
"Accra": "Ghana", "Kumasi": "Ghana", "Tamale": "Ghana", "Sekondi-Takoradi": "Ghana",
"Ashaiman": "Ghana", "Cape Coast": "Ghana", "Obuasi": "Ghana", "Teshie": "Ghana",
"Madina": "Ghana", "Koforidua": "Ghana", "Wa": "Ghana", "Techiman": "Ghana",
// Chile
"Santiago": "Chile", "Valparaíso": "Chile", "Concepción": "Chile", "La Serena": "Chile",
"Antofagasta": "Chile", "Temuco": "Chile", "Rancagua": "Chile", "Talca": "Chile",
"Arica": "Chile", "Chillán": "Chile", "Iquique": "Chile",
// Colombia
"Bogotá": "Colombia", "Medellín": "Colombia", "Cali": "Colombia", "Barranquilla": "Colombia",
"Cartagena": "Colombia", "Cúcuta": "Colombia", "Bucaramanga": "Colombia", "Pereira": "Colombia",
"Santa Marta": "Colombia", "Ibagué": "Colombia", "Pasto": "Colombia", "Manizales": "Colombia",
// Peru
"Lima": "Peru", "Arequipa": "Peru", "Trujillo": "Peru", "Chiclayo": "Peru",
"Piura": "Peru", "Iquitos": "Peru", "Cusco": "Peru", "Chimbote": "Peru",
"Huancayo": "Peru", "Tacna": "Peru", "Juliaca": "Peru", "Ica": "Peru",
// Venezuela
"Caracas": "Venezuela", "Maracaibo": "Venezuela", "Barquisimeto": "Venezuela",
"Maracay": "Venezuela", "Ciudad Guayana": "Venezuela", "San Cristóbal": "Venezuela", "Maturín": "Venezuela",
"Ciudad Bolívar": "Venezuela", "Cumana": "Venezuela",
// Ecuador
"Guayaquil": "Ecuador", "Quito": "Ecuador", "Cuenca": "Ecuador", "Santo Domingo": "Ecuador",
"Machala": "Ecuador", "Durán": "Ecuador", "Manta": "Ecuador", "Portoviejo": "Ecuador",
"Ambato": "Ecuador", "Riobamba": "Ecuador", "Loja": "Ecuador", "Esmeraldas": "Ecuador",
// Bolivia
"Santa Cruz": "Bolivia", "La Paz": "Bolivia", "Cochabamba": "Bolivia", "Oruro": "Bolivia",
"Sucre": "Bolivia", "Tarija": "Bolivia", "Potosí": "Bolivia", "Trinidad": "Bolivia",
// Uruguay
"Montevideo": "Uruguay", "Salto": "Uruguay", "Paysandú": "Uruguay", "Las Piedras": "Uruguay",
"Rivera": "Uruguay", "Maldonado": "Uruguay", "Tacuarembó": "Uruguay", "Melo": "Uruguay",
// Paraguay
"Asunción": "Paraguay", "Ciudad del Este": "Paraguay", "San Lorenzo": "Paraguay", "Luque": "Paraguay",
"Capiatá": "Paraguay", "Lambaré": "Paraguay", "Fernando de la Mora": "Paraguay", "Limpio": "Paraguay",
// Norway
"Oslo": "Norway", "Bergen": "Norway", "Trondheim": "Norway", "Stavanger": "Norway",
"Bærum": "Norway", "Kristiansand": "Norway", "Fredrikstad": "Norway", "Sandnes": "Norway",
"Tromsø": "Norway", "Drammen": "Norway", "Asker": "Norway", "Lillestrøm": "Norway",
// Sweden
"Stockholm": "Sweden", "Gothenburg": "Sweden", "Malmö": "Sweden", "Uppsala": "Sweden",
"Västerås": "Sweden", "Örebro": "Sweden", "Linköping": "Sweden", "Helsingborg": "Sweden",
"Jönköping": "Sweden", "Norrköping": "Sweden", "Lund": "Sweden", "Umeå": "Sweden",
// Finland
"Helsinki": "Finland", "Espoo": "Finland", "Tampere": "Finland", "Vantaa": "Finland",
"Oulu": "Finland", "Turku": "Finland", "Jyväskylä": "Finland", "Lahti": "Finland",
"Kuopio": "Finland", "Pori": "Finland", "Joensuu": "Finland", "Lappeenranta": "Finland",
// Denmark
"Copenhagen": "Denmark", "Aarhus": "Denmark", "Odense": "Denmark", "Aalborg": "Denmark",
"Esbjerg": "Denmark", "Randers": "Denmark", "Kolding": "Denmark", "Horsens": "Denmark",
"Vejle": "Denmark", "Roskilde": "Denmark", "Herning": "Denmark", "Silkeborg": "Denmark",
// Switzerland
"Zurich": "Switzerland", "Geneva": "Switzerland", "Basel": "Switzerland", "Bern": "Switzerland",
"Lausanne": "Switzerland", "Winterthur": "Switzerland", "Lucerne": "Switzerland", "St. Gallen": "Switzerland",
"Lugano": "Switzerland", "Biel": "Switzerland", "Thun": "Switzerland", "Köniz": "Switzerland",
// Austria
"Innsbruck": "Austria", "Klagenfurt": "Austria", "Villach": "Austria", "Wels": "Austria",
"Sankt Pölten": "Austria", "Dornbirn": "Austria", "Steyr": "Austria", "Wiener Neustadt": "Austria",
"Feldkirch": "Austria", "Bregenz": "Austria", "Leonding": "Austria", "Klosterneuburg": "Austria",
// Belgium
"Brussels": "Belgium", "Antwerp": "Belgium", "Ghent": "Belgium", "Charleroi": "Belgium",
"Liège": "Belgium", "Bruges": "Belgium", "Namur": "Belgium", "Leuven": "Belgium",
"Mons": "Belgium", "Aalst": "Belgium", "Mechelen": "Belgium", "La Louvière": "Belgium",
// Czech Republic (Czechia)
"Prague": "Czechia", "Brno": "Czechia", "Ostrava": "Czechia", "Plzen": "Czechia",
"Liberec": "Czechia", "Olomouc": "Czechia", "Budweis": "Czechia", "Hradec Králové": "Czechia",
"Ústí nad Labem": "Czechia", "Pardubice": "Czechia", "Zlín": "Czechia", "Havířov": "Czechia",
// Hungary
"Budapest": "Hungary", "Debrecen": "Hungary", "Szeged": "Hungary", "Miskolc": "Hungary",
"Pécs": "Hungary", "Győr": "Hungary", "Nyíregyháza": "Hungary", "Kecskemét": "Hungary",
"Székesfehérvár": "Hungary", "Szombathely": "Hungary", "Érd": "Hungary", "Tatabánya": "Hungary",
// Romania
"Bucharest": "Romania", "Cluj-Napoca": "Romania", "Timișoara": "Romania", "Iași": "Romania",
"Constanța": "Romania", "Craiova": "Romania", "Brașov": "Romania", "Galați": "Romania",
"Ploiești": "Romania", "Oradea": "Romania", "Brăila": "Romania", "Arad": "Romania",
// Serbia
"Belgrade": "Serbia", "Novi Sad": "Serbia", "Niš": "Serbia", "Kragujevac": "Serbia",
"Subotica": "Serbia", "Zrenjanin": "Serbia", "Pančevo": "Serbia", "Čačak": "Serbia",
"Novi Pazar": "Serbia", "Kraljevo": "Serbia", "Smederevo": "Serbia", "Leskovac": "Serbia",
// Croatia
"Zagreb": "Croatia", "Split": "Croatia", "Rijeka": "Croatia", "Osijek": "Croatia",
"Zadar": "Croatia", "Pula": "Croatia", "Slavonski Brod": "Croatia", "Karlovac": "Croatia",
"Varaždin": "Croatia", "Šibenik": "Croatia", "Sisak": "Croatia", "Velika Gorica": "Croatia",
// Greece
"Athens": "Greece", "Thessaloniki": "Greece", "Patras": "Greece", "Heraklion": "Greece",
"Larissa": "Greece", "Volos": "Greece", "Rhodes": "Greece", "Ioannina": "Greece",
"Chania": "Greece", "Chalcis": "Greece", "Serres": "Greece", "Alexandroupoli": "Greece",
// Portugal
"Lisbon": "Portugal", "Porto": "Portugal", "Vila Nova de Gaia": "Portugal", "Amadora": "Portugal",
"Braga": "Portugal", "Funchal": "Portugal", "Coimbra": "Portugal", "Setúbal": "Portugal",
"Almada": "Portugal", "Agualva-Cacém": "Portugal", "Queluz": "Portugal", "Rio Tinto": "Portugal",
// Bulgaria
"Sofia": "Bulgaria", "Plovdiv": "Bulgaria", "Varna": "Bulgaria", "Burgas": "Bulgaria",
"Ruse": "Bulgaria", "Stara Zagora": "Bulgaria", "Pleven": "Bulgaria", "Sliven": "Bulgaria",
"Dobrich": "Bulgaria", "Shumen": "Bulgaria", "Pernik": "Bulgaria", "Haskovo": "Bulgaria",
// Slovakia
"Bratislava": "Slovakia", "Košice": "Slovakia", "Prešov": "Slovakia", "Žilina": "Slovakia",
"Banská Bystrica": "Slovakia", "Nitra": "Slovakia", "Trnava": "Slovakia", "Martin": "Slovakia",
"Trenčín": "Slovakia", "Poprad": "Slovakia", "Prievidza": "Slovakia", "Zvolen": "Slovakia",
// Slovenia
"Ljubljana": "Slovenia", "Maribor": "Slovenia", "Celje": "Slovenia", "Kranj": "Slovenia",
"Velenje": "Slovenia", "Koper": "Slovenia", "Novo Mesto": "Slovenia", "Ptuj": "Slovenia",
"Trbovlje": "Slovenia", "Kamnik": "Slovenia", "Jesenice": "Slovenia", "Nova Gorica": "Slovenia",
// Lithuania
"Vilnius": "Lithuania", "Kaunas": "Lithuania", "Klaipėda": "Lithuania", "Šiauliai": "Lithuania",
"Panevėžys": "Lithuania", "Alytus": "Lithuania", "Marijampolė": "Lithuania", "Mažeikiai": "Lithuania",
"Jonava": "Lithuania", "Utena": "Lithuania", "Kėdainiai": "Lithuania", "Telšiai": "Lithuania",
// Latvia
"Riga": "Latvia", "Daugavpils": "Latvia", "Liepāja": "Latvia", "Jelgava": "Latvia",
"Jūrmala": "Latvia", "Ventspils": "Latvia", "Rēzekne": "Latvia", "Valmiera": "Latvia",
"Jēkabpils": "Latvia", "Ogre": "Latvia", "Tukums": "Latvia", "Salaspils": "Latvia",
// Estonia
"Tallinn": "Estonia", "Tartu": "Estonia", "Narva": "Estonia", "Pärnu": "Estonia",
"Kohtla-Järve": "Estonia", "Viljandi": "Estonia", "Rakvere": "Estonia", "Maardu": "Estonia",
"Sillamäe": "Estonia", "Kuressaare": "Estonia", "Võru": "Estonia", "Valga": "Estonia",
// New Zealand
"Auckland": "New Zealand", "Wellington": "New Zealand", "Christchurch": "New Zealand", "Hamilton": "New Zealand",
"Tauranga": "New Zealand", "Napier-Hastings": "New Zealand", "Dunedin": "New Zealand", "Palmerston North": "New Zealand",
"Nelson": "New Zealand", "Rotorua": "New Zealand", "New Plymouth": "New Zealand", "Whangarei": "New Zealand",
// Singapore
"Singapore": "Singapore",
// United Arab Emirates
"Dubai": "United Arab Emirates", "Abu Dhabi": "United Arab Emirates", "Sharjah": "United Arab Emirates", "Al Ain": "United Arab Emirates",
"Ajman": "United Arab Emirates", "Ras Al Khaimah": "United Arab Emirates", "Fujairah": "United Arab Emirates", "Umm Al Quwain": "United Arab Emirates",
// Lebanon
"Beirut": "Lebanon", "Sidon": "Lebanon", "Tyre": "Lebanon",
"Nabatieh": "Lebanon", "Jounieh": "Lebanon", "Zahle": "Lebanon", "Baalbek": "Lebanon",
// Jordan
"Amman": "Jordan", "Zarqa": "Jordan", "Irbid": "Jordan", "Russeifa": "Jordan",
"Wadi as-Sir": "Jordan", "Aqaba": "Jordan", "Madaba": "Jordan", "Salt": "Jordan",
// Yemen
"Sanaa": "Yemen", "Aden": "Yemen", "Taiz": "Yemen", "Hodeidah": "Yemen",
"Mukalla": "Yemen", "Ibb": "Yemen", "Dhamar": "Yemen", "Zinjibar": "Yemen",
// Syria
"Damascus": "Syria", "Aleppo": "Syria", "Homs": "Syria", "Latakia": "Syria",
"Hama": "Syria", "Raqqa": "Syria", "Deir ez-Zor": "Syria", "Hasakah": "Syria",
// Oman
"Muscat": "Oman", "Seeb": "Oman", "Salalah": "Oman", "Bawshar": "Oman",
"Sohar": "Oman", "Sur": "Oman", "Ibra": "Oman", "Nizwa": "Oman",
// Qatar
"Doha": "Qatar", "Al Rayyan": "Qatar", "Umm Salal": "Qatar", "Al Wakrah": "Qatar",
"Al Khor": "Qatar", "Dukhan": "Qatar", "Lusail": "Qatar", "Mesaieed": "Qatar",
// Kuwait
"Kuwait City": "Kuwait", "Al Ahmadi": "Kuwait", "Hawally": "Kuwait", "As Salimiyah": "Kuwait",
"Sabah as-Salim": "Kuwait", "Al Farwaniyah": "Kuwait", "Al Fahahil": "Kuwait", "Ar Riqqah": "Kuwait",
// Bahrain
"Manama": "Bahrain", "Riffa": "Bahrain", "Muharraq": "Bahrain", "Hamad Town": "Bahrain",
"A'ali": "Bahrain", "Isa Town": "Bahrain", "Sitra": "Bahrain", "Budaiya": "Bahrain",
// Cyprus
"Nicosia": "Cyprus", "Limassol": "Cyprus", "Larnaca": "Cyprus", "Famagusta": "Cyprus",
"Paphos": "Cyprus", "Kyrenia": "Cyprus", "Protaras": "Cyprus", "Paralimni": "Cyprus",
// Malta
"Valletta": "Malta", "Birkirkara": "Malta", "Mosta": "Malta", "Qormi": "Malta",
"Zabbar": "Malta", "San Pawl il-Bahar": "Malta", "Tarxien": "Malta", "Naxxar": "Malta",
// Iceland
"Reykjavik": "Iceland", "Kopavogur": "Iceland", "Hafnarfjordur": "Iceland", "Akureyri": "Iceland",
"Reykjanesbaer": "Iceland", "Gardabaer": "Iceland", "Mosfellsbaer": "Iceland", "Arborg": "Iceland",
// Luxembourg
"Luxembourg City": "Luxembourg", "Esch-sur-Alzette": "Luxembourg", "Dudelange": "Luxembourg", "Schifflange": "Luxembourg",
"Bettembourg": "Luxembourg", "Petange": "Luxembourg", "Ettelbruck": "Luxembourg", "Diekirch": "Luxembourg",
// Belarus
"Minsk": "Belarus", "Gomel": "Belarus", "Mogilev": "Belarus", "Vitebsk": "Belarus",
"Grodno": "Belarus", "Brest": "Belarus", "Bobruisk": "Belarus", "Baranovichi": "Belarus",
// Moldova
"Chisinau": "Moldova", "Tiraspol": "Moldova", "Balti": "Moldova", "Bender": "Moldova",
"Rybnitsa": "Moldova", "Cahul": "Moldova", "Ungheni": "Moldova", "Soroca": "Moldova",
// North Macedonia
"Skopje": "North Macedonia", "Bitola": "North Macedonia", "Kumanovo": "North Macedonia", "Prilep": "North Macedonia",
"Tetovo": "North Macedonia", "Veles": "North Macedonia", "Shtip": "North Macedonia", "Ohrid": "North Macedonia",
// Albania
"Tirana": "Albania", "Durres": "Albania", "Vlore": "Albania", "Elbasan": "Albania",
"Shkoder": "Albania", "Fier": "Albania", "Korce": "Albania", "Berat": "Albania",
// Montenegro
"Podgorica": "Montenegro", "Niksic": "Montenegro", "Pljevlja": "Montenegro", "Bijelo Polje": "Montenegro",
"Cetinje": "Montenegro", "Bar": "Montenegro", "Herceg Novi": "Montenegro", "Berane": "Montenegro",
// Bosnia and Herzegovina
"Sarajevo": "Bosnia and Herzegovina", "Banja Luka": "Bosnia and Herzegovina", "Tuzla": "Bosnia and Herzegovina", "Zenica": "Bosnia and Herzegovina",
"Mostar": "Bosnia and Herzegovina", "Prijedor": "Bosnia and Herzegovina", "Brčko": "Bosnia and Herzegovina", "Bijeljina": "Bosnia and Herzegovina",
// Armenia
"Yerevan": "Armenia", "Gyumri": "Armenia", "Vanadzor": "Armenia", "Vagharshapat": "Armenia",
"Hrazdan": "Armenia", "Abovyan": "Armenia", "Kapan": "Armenia", "Armavir": "Armenia",
// Georgia
"Tbilisi": "Georgia", "Kutaisi": "Georgia", "Batumi": "Georgia", "Rustavi": "Georgia",
"Gori": "Georgia", "Zugdidi": "Georgia", "Poti": "Georgia", "Kobuleti": "Georgia",
// Azerbaijan
"Baku": "Azerbaijan", "Ganja": "Azerbaijan", "Sumqayit": "Azerbaijan", "Mingachevir": "Azerbaijan",
"Quba": "Azerbaijan", "Lankaran": "Azerbaijan", "Shaki": "Azerbaijan", "Yevlax": "Azerbaijan",
// Kazakhstan
"Almaty": "Kazakhstan", "Nur-Sultan": "Kazakhstan", "Shymkent": "Kazakhstan", "Aktobe": "Kazakhstan",
"Taraz": "Kazakhstan", "Pavlodar": "Kazakhstan", "Ust-Kamenogorsk": "Kazakhstan", "Semey": "Kazakhstan",
"Atyrau": "Kazakhstan", "Kostanay": "Kazakhstan", "Kyzylorda": "Kazakhstan", "Oral": "Kazakhstan",
// Uzbekistan
"Tashkent": "Uzbekistan", "Namangan": "Uzbekistan", "Samarkand": "Uzbekistan", "Andijan": "Uzbekistan",
"Nukus": "Uzbekistan", "Fergana": "Uzbekistan", "Bukhara": "Uzbekistan", "Qarshi": "Uzbekistan",
"Kokand": "Uzbekistan", "Margilan": "Uzbekistan", "Chirchiq": "Uzbekistan", "Termez": "Uzbekistan",
// Kyrgyzstan
"Bishkek": "Kyrgyzstan", "Osh": "Kyrgyzstan", "Jalal-Abad": "Kyrgyzstan", "Karakol": "Kyrgyzstan",
"Tokmok": "Kyrgyzstan", "Uzgen": "Kyrgyzstan", "Naryn": "Kyrgyzstan", "Talas": "Kyrgyzstan",
// Tajikistan
"Dushanbe": "Tajikistan", "Khujand": "Tajikistan", "Kulob": "Tajikistan", "Qurghonteppa": "Tajikistan",
"Istaravshan": "Tajikistan", "Isfara": "Tajikistan", "Panjakent": "Tajikistan", "Tursunzoda": "Tajikistan",
// Turkmenistan
"Ashgabat": "Turkmenistan", "Turkmenbashi": "Turkmenistan", "Dasoguz": "Turkmenistan", "Mary": "Turkmenistan",
"Balkanabat": "Turkmenistan", "Bayramaly": "Turkmenistan", "Tejen": "Turkmenistan", "Serdar": "Turkmenistan",
// Mongolia
"Ulaanbaatar": "Mongolia", "Erdenet": "Mongolia", "Darkhan": "Mongolia", "Choibalsan": "Mongolia",
"Murun": "Mongolia", "Bayankhongor": "Mongolia", "Ulgii": "Mongolia", "Khovd": "Mongolia",
// Myanmar
"Yangon": "Myanmar", "Mandalay": "Myanmar", "Naypyidaw": "Myanmar", "Mawlamyine": "Myanmar",
"Bago": "Myanmar", "Pathein": "Myanmar", "Monywa": "Myanmar", "Meiktila": "Myanmar",
"Sittwe": "Myanmar", "Myitkyina": "Myanmar", "Dawei": "Myanmar", "Pyay": "Myanmar",
// Laos
"Vientiane": "Laos", "Pakse": "Laos", "Savannakhet": "Laos", "Luang Prabang": "Laos",
"Thakhek": "Laos", "Muang Xay": "Laos", "Phonsavan": "Laos", "Muang Pakbeng": "Laos",
// Cambodia
"Phnom Penh": "Cambodia", "Siem Reap": "Cambodia", "Battambang": "Cambodia", "Sihanoukville": "Cambodia",
"Poipet": "Cambodia", "Kampong Cham": "Cambodia", "Pursat": "Cambodia", "Kampong Speu": "Cambodia",
// Sri Lanka
"Colombo": "Sri Lanka", "Dehiwala-Mount Lavinia": "Sri Lanka", "Moratuwa": "Sri Lanka", "Negombo": "Sri Lanka",
"Kandy": "Sri Lanka", "Kalmunai": "Sri Lanka", "Galle": "Sri Lanka", "Trincomalee": "Sri Lanka",
"Batticaloa": "Sri Lanka", "Jaffna": "Sri Lanka", "Katunayake": "Sri Lanka", "Dambulla": "Sri Lanka",
// Nepal
"Kathmandu": "Nepal", "Pokhara": "Nepal", "Lalitpur": "Nepal", "Bharatpur": "Nepal",
"Biratnagar": "Nepal", "Birgunj": "Nepal", "Dharan": "Nepal", "Bhim Datta": "Nepal",
"Butwal": "Nepal", "Hetauda": "Nepal", "Dhangadhi": "Nepal", "Itahari": "Nepal",
// Bhutan
"Thimphu": "Bhutan", "Phuntsholing": "Bhutan", "Punakha": "Bhutan", "Wangdue": "Bhutan",
"Samdrup Jongkhar": "Bhutan", "Gelephu": "Bhutan", "Trongsa": "Bhutan", "Mongar": "Bhutan",
// Maldives
"Male": "Maldives", "Addu City": "Maldives", "Fuvahmulah": "Maldives", "Kulhudhuffushi": "Maldives",
"Thinadhoo": "Maldives", "Ungoofaaru": "Maldives", "Naifaru": "Maldives", "Dhidhdhoo": "Maldives",
// Madagascar
"Antananarivo": "Madagascar", "Toamasina": "Madagascar", "Antsirabe": "Madagascar", "Fianarantsoa": "Madagascar",
"Mahajanga": "Madagascar", "Toliara": "Madagascar", "Antsiranana": "Madagascar", "Ambovombe": "Madagascar",
"Morondava": "Madagascar", "Sambava": "Madagascar", "Manakara": "Madagascar", "Farafangana": "Madagascar",
// Mauritius
"Port Louis": "Mauritius", "Beau Bassin-Rose Hill": "Mauritius", "Vacoas-Phoenix": "Mauritius", "Curepipe": "Mauritius",
"Quatre Bornes": "Mauritius", "Triolet": "Mauritius", "Goodlands": "Mauritius", "Centre de Flacq": "Mauritius",
// Seychelles
"Victoria": "Seychelles", "Anse Boileau": "Seychelles", "Beau Vallon": "Seychelles", "Cascade": "Seychelles",
"Anse Royale": "Seychelles", "Takamaka": "Seychelles", "Port Glaud": "Seychelles", "Grand Anse Mahe": "Seychelles",
// Comoros
"Moroni": "Comoros", "Mutsamudu": "Comoros", "Fomboni": "Comoros", "Domoni": "Comoros",
"Sima": "Comoros", "Mitsoudje": "Comoros", "Adda-Doueni": "Comoros", "Ouani": "Comoros",
// Djibouti
"Djibouti City": "Djibouti", "Ali Sabieh": "Djibouti", "Dikhil": "Djibouti", "Tadjoura": "Djibouti",
"Obock": "Djibouti", "Arta": "Djibouti", "Holhol": "Djibouti", "Yoboki": "Djibouti",
// Eritrea
"Asmara": "Eritrea", "Assab": "Eritrea", "Massawa": "Eritrea", "Keren": "Eritrea",
"Mendefera": "Eritrea", "Barentu": "Eritrea", "Adi Keih": "Eritrea", "Adi Quala": "Eritrea",
// Somalia
"Mogadishu": "Somalia", "Hargeisa": "Somalia", "Bosaso": "Somalia", "Kismayo": "Somalia",
"Merca": "Somalia", "Galcayo": "Somalia", "Berbera": "Somalia", "Baidoa": "Somalia",
"Garowe": "Somalia", "Jowhar": "Somalia", "Borama": "Somalia", "Las Anod": "Somalia",
// Sudan
"Khartoum": "Sudan", "Omdurman": "Sudan", "Port Sudan": "Sudan", "Kassala": "Sudan",
"Obeid": "Sudan", "Nyala": "Sudan", "Gedaref": "Sudan", "Wad Medani": "Sudan",
"El Fasher": "Sudan", "Kosti": "Sudan", "Sennar": "Sudan", "Dongola": "Sudan",
// South Sudan
"Juba": "South Sudan", "Malakal": "South Sudan", "Wau": "South Sudan", "Bentiu": "South Sudan",
"Yei": "South Sudan", "Aweil": "South Sudan", "Kuacjok": "South Sudan", "Bor": "South Sudan",
// Chad
"N'Djamena": "Chad", "Moundou": "Chad", "Sarh": "Chad", "Abéché": "Chad",
"Kelo": "Chad", "Koumra": "Chad", "Pala": "Chad", "Am Timan": "Chad",
// Central African Republic
"Bangui": "Central African Republic", "Bimbo": "Central African Republic", "Berbérati": "Central African Republic", "Carnot": "Central African Republic",
"Bambari": "Central African Republic", "Bouar": "Central African Republic", "Bossangoa": "Central African Republic", "Bria": "Central African Republic",
// Democratic Republic of Congo
"Kinshasa": "Congo", "Lubumbashi": "Congo", "Mbuji-Mayi": "Congo", "Kisangani": "Congo",
"Masina": "Congo", "Kananga": "Congo", "Likasi": "Congo", "Kolwezi": "Congo",
"Tshikapa": "Congo", "Beni": "Congo", "Bukavu": "Congo", "Mwene-Ditu": "Congo",
// Republic of Congo
"Brazzaville": "Congo", "Pointe-Noire": "Congo", "Dolisie": "Congo", "Nkayi": "Congo",
"Impfondo": "Congo", "Ouesso": "Congo", "Madingou": "Congo", "Owando": "Congo",
// Gabon
"Libreville": "Gabon", "Port-Gentil": "Gabon", "Franceville": "Gabon", "Oyem": "Gabon",
"Moanda": "Gabon", "Mouila": "Gabon", "Lambaréné": "Gabon", "Tchibanga": "Gabon",
// Equatorial Guinea
"Malabo": "Equatorial Guinea", "Bata": "Equatorial Guinea", "Ebebiyin": "Equatorial Guinea", "Aconibe": "Equatorial Guinea",
"Añisoc": "Equatorial Guinea", "Luba": "Equatorial Guinea", "Evinayong": "Equatorial Guinea", "Mengomeyén": "Equatorial Guinea",
// Cameroon
"Yaoundé": "Cameroon", "Douala": "Cameroon", "Bamenda": "Cameroon", "Bafoussam": "Cameroon",
"Garoua": "Cameroon", "Maroua": "Cameroon", "Nkongsamba": "Cameroon", "Bertoua": "Cameroon",
"Edéa": "Cameroon", "Loum": "Cameroon", "Kumba": "Cameroon", "Foumban": "Cameroon",
// Angola
"Luanda": "Angola", "Huambo": "Angola", "Lobito": "Angola", "Benguela": "Angola",
"Kuito": "Angola", "Lubango": "Angola", "Malanje": "Angola", "Namibe": "Angola",
"Soyo": "Angola", "Cabinda": "Angola", "Uíge": "Angola", "Saurimo": "Angola",
// Zambia
"Lusaka": "Zambia", "Kitwe": "Zambia", "Ndola": "Zambia", "Kabwe": "Zambia",
"Chingola": "Zambia", "Mufulira": "Zambia", "Livingstone": "Zambia", "Luanshya": "Zambia",
"Kasama": "Zambia", "Chipata": "Zambia", "Mazabuka": "Zambia", "Mongu": "Zambia",
// Zimbabwe
"Harare": "Zimbabwe", "Bulawayo": "Zimbabwe", "Chitungwiza": "Zimbabwe", "Mutare": "Zimbabwe",
// Namibia
"Windhoek": "Namibia", "Rundu": "Namibia", "Walvis Bay": "Namibia", "Oshakati": "Namibia",
"Swakopmund": "Namibia", "Katima Mulilo": "Namibia", "Grootfontein": "Namibia", "Rehoboth": "Namibia",
"Otjiwarongo": "Namibia", "Okahandja": "Namibia", "Ondangwa": "Namibia", "Outapi": "Namibia",
"Conakry": "Guinea", "Nzérékoré": "Guinea", "Kankan": "Guinea", "Kindia": "Guinea",
// Botswana
"Gaborone": "Botswana", "Francistown": "Botswana", "Molepolole": "Botswana", "Maun": "Botswana",
"Serowe": "Botswana", "Selibe Phikwe": "Botswana", "Kanye": "Botswana", "Mochudi": "Botswana",
"Mahalapye": "Botswana", "Palapye": "Botswana", "Lobatse": "Botswana", "Kasane": "Botswana",
// Guinea-Bissau (补充缺失)
// Lesotho
"Maseru": "Lesotho", "Teyateyaneng": "Lesotho", "Mafeteng": "Lesotho", "Hlotse": "Lesotho",
"Mohale's Hoek": "Lesotho", "Maputsoe": "Lesotho", "Qacha's Nek": "Lesotho", "Quthing": "Lesotho",
"Freetown": "Sierra Leone", "Bo": "Sierra Leone", "Kenema": "Sierra Leone", "Koidu": "Sierra Leone",
// Eswatini (Swaziland)
"Mbabane": "Eswatini", "Manzini": "Eswatini", "Big Bend": "Eswatini", "Malkerns": "Eswatini",
"Nhlangano": "Eswatini", "Siteki": "Eswatini", "Pigg's Peak": "Eswatini", "Lobamba": "Eswatini",
"Monrovia": "Liberia", "Gbarnga": "Liberia", "Kakata": "Liberia", "Bensonville": "Liberia",
// Malawi
"Lilongwe": "Malawi", "Blantyre": "Malawi", "Mzuzu": "Malawi", "Zomba": "Malawi",
"Kasungu": "Malawi", "Mangochi": "Malawi", "Karonga": "Malawi", "Salima": "Malawi",
"Liwonde": "Malawi", "Nkhotakota": "Malawi", "Chiradzulu": "Malawi", "Nsanje": "Malawi",
"Abidjan": "Cote D'Ivoire", "Bouaké": "Cote D'Ivoire", "Daloa": "Cote D'Ivoire", "Yamoussoukro": "Cote D'Ivoire",
// Mozambique
"Maputo": "Mozambique", "Matola": "Mozambique", "Beira": "Mozambique", "Nampula": "Mozambique",
"Chimoio": "Mozambique", "Nacala": "Mozambique", "Quelimane": "Mozambique", "Tete": "Mozambique",
"Xai-Xai": "Mozambique", "Maxixe": "Mozambique", "Inhambane": "Mozambique", "Pemba": "Mozambique",
"Lomé": "Togo", "Sokodé": "Togo", "Kara": "Togo", "Palimé": "Togo",
// Tanzania
"Dar es Salaam": "Tanzania", "Mwanza": "Tanzania", "Arusha": "Tanzania", "Dodoma": "Tanzania",
"Mbeya": "Tanzania", "Morogoro": "Tanzania", "Tanga": "Tanzania", "Kahama": "Tanzania",
"Tabora": "Tanzania", "Zanzibar City": "Tanzania", "Kigoma": "Tanzania", "Sumbawanga": "Tanzania",
"Cotonou": "Benin", "Porto-Novo": "Benin", "Parakou": "Benin", "Djougou": "Benin",
// Rwanda
"Kigali": "Rwanda", "Butare": "Rwanda", "Gitarama": "Rwanda", "Ruhengeri": "Rwanda",
"Gisenyi": "Rwanda", "Byumba": "Rwanda", "Cyangugu": "Rwanda", "Kibuye": "Rwanda",
"Banjul": "Gambia", "Serekunda": "Gambia", "Brikama": "Gambia", "Bakau": "Gambia",
// Burundi
"Gitega": "Burundi", "Bujumbura": "Burundi", "Muyinga": "Burundi", "Ruyigi": "Burundi",
"Ngozi": "Burundi", "Rutana": "Burundi", "Kayanza": "Burundi", "Makamba": "Burundi",
"Nouakchott": "Mauritania", "Nouadhibou": "Mauritania", "Néma": "Mauritania", "Kaédi": "Mauritania",
// Uganda
"Kampala": "Uganda", "Gulu": "Uganda", "Lira": "Uganda", "Mbarara": "Uganda",
"Jinja": "Uganda", "Bwizibwera": "Uganda", "Mbale": "Uganda", "Mukono": "Uganda",
"Kasese": "Uganda", "Masaka": "Uganda", "Entebbe": "Uganda", "Njeru": "Uganda",
// Cabo Verde (补充缺失)
// Tunisia
"Tunis": "Tunisia", "Sfax": "Tunisia", "Sousse": "Tunisia", "Ettadhamen": "Tunisia",
"Kairouan": "Tunisia", "Bizerte": "Tunisia", "Gabès": "Tunisia", "Aryanah": "Tunisia",
"Gafsa": "Tunisia", "El Mourouj": "Tunisia", "Kasserine": "Tunisia", "Ben Arous": "Tunisia",
// São Tomé and Príncipe (补充缺失)
// Libya
"Benghazi": "Libya", "Misrata": "Libya", "Tarhuna": "Libya",
"Al Bayda": "Libya", "Zawiya": "Libya", "Zuwara": "Libya", "Ajdabiya": "Libya",
"Tobruk": "Libya", "Sabha": "Libya", "Sirte": "Libya", "Marj": "Libya",
"Dublin": "Ireland", "Cork": "Ireland", "Limerick": "Ireland", "Galway": "Ireland",
"Waterford": "Ireland", "Drogheda": "Ireland", "Dundalk": "Ireland", "Swords": "Ireland",
"Bray": "Ireland", "Navan": "Ireland", "Ennis": "Ireland", "Kilkenny": "Ireland",
// More countries and cities can be added here...
}
// GetCountryCenterByCountryOrCity 根据国家名称或城市名称获取国家中心经纬度
// countryOrAbbr: 国家名称(全称或简称)
// city: 城市名称
// 返回: 纬度, 经度, 是否找到
func GetCountryCenterByCountryOrCity(countryOrAbbr, city string) (lat, lon string, found bool) {
// 1. 首先尝试国家简称转全称(大小写不敏感)
countryOrAbbr = strings.TrimSpace(countryOrAbbr)
if countryOrAbbr != "" {
// 尝试作为简称查找
if fullName, ok := countryAbbr[strings.ToUpper(countryOrAbbr)]; ok {
countryOrAbbr = fullName
}
// 2. 直接查找国家中心点(大小写不敏感)
for country, center := range countryCenter {
if strings.EqualFold(country, countryOrAbbr) {
return fmt.Sprintf("%f", center[0]), fmt.Sprintf("%f", center[1]), true
}
}
}
// 3. 通过城市查找国家(大小写不敏感)
city = strings.TrimSpace(city)
if city != "" {
for cityName, country := range cityToCountry {
if strings.EqualFold(cityName, city) {
if center, ok := countryCenter[country]; ok {
return fmt.Sprintf("%f", center[0]), fmt.Sprintf("%f", center[1]), true
}
}
}
}
return "", "", false
}
// GetCountryCenter 根据国家名称获取中心经纬度(兼容旧接口)
func GetCountryCenter(countryName string) (lat, lon string, found bool) {
return GetCountryCenterByCountryOrCity(countryName, "")
}
// GetCountryCenterByCity 根据城市名称获取所在国家的中心经纬度
func GetCountryCenterByCity(cityName string) (lat, lon string, found bool) {
return GetCountryCenterByCountryOrCity("", cityName)
}