oxedyne/fe2o3/fe2o3_stds/src/regions.rs
184 KiB, 140 runs
created by r1870400018:914, which is this file's identity for as long as the history lasts, whatever it is later renamed to
download · who wrote it · its history
| 1 | use oxedyne_fe2o3_core::{ |
| 2 | prelude::*, |
| 3 | new_enum, |
| 4 | rand::Rand, |
| 5 | }; |
| 6 | use strum::Display; |
| 7 | |
| 8 | /// Adapted from https://textlists.info/geography/countries-of-the-world/ |
| 9 | /// See also https://en.wikipedia.org/wiki/ISO_3166-1 |
| 10 | #[derive(Clone, Copy, Debug, Display, Eq, PartialEq)] |
| 11 | #[repr(usize)] |
| 12 | pub enum Country { |
| 13 | Afghanistan, |
| 14 | Albania, |
| 15 | Algeria, |
| 16 | Andorra, |
| 17 | Angola, |
| 18 | AntiguaAndBarbuda, |
| 19 | Argentina, |
| 20 | Armenia, |
| 21 | Australia, |
| 22 | Austria, |
| 23 | Azerbaijan, |
| 24 | TheBahamas, |
| 25 | Bahrain, |
| 26 | Bangladesh, |
| 27 | Barbados, |
| 28 | Belarus, |
| 29 | Belgium, |
| 30 | Belize, |
| 31 | Benin, |
| 32 | Bhutan, |
| 33 | Bolivia, |
| 34 | BosniaAndHerzegovina, |
| 35 | Botswana, |
| 36 | Brazil, |
| 37 | Brunei, |
| 38 | Bulgaria, |
| 39 | BurkinaFaso, |
| 40 | Burundi, |
| 41 | Cambodia, |
| 42 | Cameroon, |
| 43 | Canada, |
| 44 | CapeVerde, |
| 45 | CentralAfricanRepublic, |
| 46 | Chad, |
| 47 | Chile, |
| 48 | China, |
| 49 | Colombia, |
| 50 | Comoros, |
| 51 | CostaRica, |
| 52 | CotedIvoire, |
| 53 | Croatia, |
| 54 | Cuba, |
| 55 | Cyprus, |
| 56 | CzechRepublic, |
| 57 | DemocraticRepublicOfTheCongo, |
| 58 | DemocraticRepublicOfTimorLeste, |
| 59 | Denmark, |
| 60 | Djibouti, |
| 61 | Dominica, |
| 62 | DominicanRepublic, |
| 63 | Ecuador, |
| 64 | Egypt, |
| 65 | ElSalvador, |
| 66 | EquatorialGuinea, |
| 67 | Eritrea, |
| 68 | Estonia, |
| 69 | Ethiopia, |
| 70 | FederatedStatesOfMicronesia, |
| 71 | Fiji, |
| 72 | Finland, |
| 73 | France, |
| 74 | Gabon, |
| 75 | TheGambia, |
| 76 | Georgia, |
| 77 | Germany, |
| 78 | Ghana, |
| 79 | Greece, |
| 80 | Grenada, |
| 81 | Guatemala, |
| 82 | Guinea, |
| 83 | GuineaBissau, |
| 84 | Guyana, |
| 85 | Haiti, |
| 86 | Honduras, |
| 87 | Hungary, |
| 88 | Iceland, |
| 89 | India, |
| 90 | Indonesia, |
| 91 | Iran, |
| 92 | Iraq, |
| 93 | Ireland, |
| 94 | Israel, |
| 95 | Italy, |
| 96 | Jamaica, |
| 97 | Japan, |
| 98 | Jordan, |
| 99 | Kazakhstan, |
| 100 | Kenya, |
| 101 | Kiribati, |
| 102 | Kosovo, |
| 103 | Kuwait, |
| 104 | Kyrgyzstan, |
| 105 | Laos, |
| 106 | Latvia, |
| 107 | Lebanon, |
| 108 | Lesotho, |
| 109 | Liberia, |
| 110 | Libya, |
| 111 | Liechtenstein, |
| 112 | Lithuania, |
| 113 | Luxembourg, |
| 114 | Macedonia, |
| 115 | Madagascar, |
| 116 | Malawi, |
| 117 | Malaysia, |
| 118 | Maldives, |
| 119 | Mali, |
| 120 | Malta, |
| 121 | MarshallIslands, |
| 122 | Mauritania, |
| 123 | Mauritius, |
| 124 | Mexico, |
| 125 | Moldova, |
| 126 | Monaco, |
| 127 | Mongolia, |
| 128 | Montenegro, |
| 129 | Morocco, |
| 130 | Mozambique, |
| 131 | Myanmar, |
| 132 | Namibia, |
| 133 | Nauru, |
| 134 | Nepal, |
| 135 | Netherlands, |
| 136 | NewZealand, |
| 137 | Nicaragua, |
| 138 | Niger, |
| 139 | Nigeria, |
| 140 | NorthKorea, |
| 141 | Norway, |
| 142 | Oman, |
| 143 | Pakistan, |
| 144 | Palau, |
| 145 | Panama, |
| 146 | PapuaNewGuinea, |
| 147 | Paraguay, |
| 148 | Peru, |
| 149 | Philippines, |
| 150 | Poland, |
| 151 | Portugal, |
| 152 | Qatar, |
| 153 | RepublicOfTheCongo, |
| 154 | Romania, |
| 155 | Russia, |
| 156 | Rwanda, |
| 157 | SaintKittsAndNevis, |
| 158 | SaintLucia, |
| 159 | SaintVincentAndTheGrenadines, |
| 160 | Samoa, |
| 161 | SanMarino, |
| 162 | SaoTomeAndPrincipe, |
| 163 | SaudiArabia, |
| 164 | Senegal, |
| 165 | Serbia, |
| 166 | Seychelles, |
| 167 | SierraLeone, |
| 168 | Singapore, |
| 169 | Slovakia, |
| 170 | Slovenia, |
| 171 | SolomonIslands, |
| 172 | Somalia, |
| 173 | SouthAfrica, |
| 174 | SouthKorea, |
| 175 | SouthSudan, |
| 176 | Spain, |
| 177 | SriLanka, |
| 178 | Sudan, |
| 179 | Suriname, |
| 180 | Swaziland, |
| 181 | Sweden, |
| 182 | Switzerland, |
| 183 | Syria, |
| 184 | Taiwan, |
| 185 | Tajikistan, |
| 186 | Tanzania, |
| 187 | Thailand, |
| 188 | Togo, |
| 189 | Tonga, |
| 190 | TrinidadAndTobago, |
| 191 | Tunisia, |
| 192 | Turkey, |
| 193 | Turkmenistan, |
| 194 | Tuvalu, |
| 195 | Uganda, |
| 196 | Ukraine, |
| 197 | UnitedArabEmirates, |
| 198 | UnitedKingdom, |
| 199 | UnitedStatesOfAmerica, |
| 200 | Uruguay, |
| 201 | Uzbekistan, |
| 202 | Vanuatu, |
| 203 | VaticanCity, |
| 204 | Venezuela, |
| 205 | Vietnam, |
| 206 | Yemen, |
| 207 | Zambia, |
| 208 | Zimbabwe, |
| 209 | } |
| 210 | |
| 211 | new_enum!(Country; |
| 212 | Afghanistan, |
| 213 | Albania, |
| 214 | Algeria, |
| 215 | Andorra, |
| 216 | Angola, |
| 217 | AntiguaAndBarbuda, |
| 218 | Argentina, |
| 219 | Armenia, |
| 220 | Australia, |
| 221 | Austria, |
| 222 | Azerbaijan, |
| 223 | TheBahamas, |
| 224 | Bahrain, |
| 225 | Bangladesh, |
| 226 | Barbados, |
| 227 | Belarus, |
| 228 | Belgium, |
| 229 | Belize, |
| 230 | Benin, |
| 231 | Bhutan, |
| 232 | Bolivia, |
| 233 | BosniaAndHerzegovina, |
| 234 | Botswana, |
| 235 | Brazil, |
| 236 | Brunei, |
| 237 | Bulgaria, |
| 238 | BurkinaFaso, |
| 239 | Burundi, |
| 240 | Cambodia, |
| 241 | Cameroon, |
| 242 | Canada, |
| 243 | CapeVerde, |
| 244 | CentralAfricanRepublic, |
| 245 | Chad, |
| 246 | Chile, |
| 247 | China, |
| 248 | Colombia, |
| 249 | Comoros, |
| 250 | CostaRica, |
| 251 | CotedIvoire, |
| 252 | Croatia, |
| 253 | Cuba, |
| 254 | Cyprus, |
| 255 | CzechRepublic, |
| 256 | DemocraticRepublicOfTheCongo, |
| 257 | DemocraticRepublicOfTimorLeste, |
| 258 | Denmark, |
| 259 | Djibouti, |
| 260 | Dominica, |
| 261 | DominicanRepublic, |
| 262 | Ecuador, |
| 263 | Egypt, |
| 264 | ElSalvador, |
| 265 | EquatorialGuinea, |
| 266 | Eritrea, |
| 267 | Estonia, |
| 268 | Ethiopia, |
| 269 | FederatedStatesOfMicronesia, |
| 270 | Fiji, |
| 271 | Finland, |
| 272 | France, |
| 273 | Gabon, |
| 274 | TheGambia, |
| 275 | Georgia, |
| 276 | Germany, |
| 277 | Ghana, |
| 278 | Greece, |
| 279 | Grenada, |
| 280 | Guatemala, |
| 281 | Guinea, |
| 282 | GuineaBissau, |
| 283 | Guyana, |
| 284 | Haiti, |
| 285 | Honduras, |
| 286 | Hungary, |
| 287 | Iceland, |
| 288 | India, |
| 289 | Indonesia, |
| 290 | Iran, |
| 291 | Iraq, |
| 292 | Ireland, |
| 293 | Israel, |
| 294 | Italy, |
| 295 | Jamaica, |
| 296 | Japan, |
| 297 | Jordan, |
| 298 | Kazakhstan, |
| 299 | Kenya, |
| 300 | Kiribati, |
| 301 | Kosovo, |
| 302 | Kuwait, |
| 303 | Kyrgyzstan, |
| 304 | Laos, |
| 305 | Latvia, |
| 306 | Lebanon, |
| 307 | Lesotho, |
| 308 | Liberia, |
| 309 | Libya, |
| 310 | Liechtenstein, |
| 311 | Lithuania, |
| 312 | Luxembourg, |
| 313 | Macedonia, |
| 314 | Madagascar, |
| 315 | Malawi, |
| 316 | Malaysia, |
| 317 | Maldives, |
| 318 | Mali, |
| 319 | Malta, |
| 320 | MarshallIslands, |
| 321 | Mauritania, |
| 322 | Mauritius, |
| 323 | Mexico, |
| 324 | Moldova, |
| 325 | Monaco, |
| 326 | Mongolia, |
| 327 | Montenegro, |
| 328 | Morocco, |
| 329 | Mozambique, |
| 330 | Myanmar, |
| 331 | Namibia, |
| 332 | Nauru, |
| 333 | Nepal, |
| 334 | Netherlands, |
| 335 | NewZealand, |
| 336 | Nicaragua, |
| 337 | Niger, |
| 338 | Nigeria, |
| 339 | NorthKorea, |
| 340 | Norway, |
| 341 | Oman, |
| 342 | Pakistan, |
| 343 | Palau, |
| 344 | Panama, |
| 345 | PapuaNewGuinea, |
| 346 | Paraguay, |
| 347 | Peru, |
| 348 | Philippines, |
| 349 | Poland, |
| 350 | Portugal, |
| 351 | Qatar, |
| 352 | RepublicOfTheCongo, |
| 353 | Romania, |
| 354 | Russia, |
| 355 | Rwanda, |
| 356 | SaintKittsAndNevis, |
| 357 | SaintLucia, |
| 358 | SaintVincentAndTheGrenadines, |
| 359 | Samoa, |
| 360 | SanMarino, |
| 361 | SaoTomeAndPrincipe, |
| 362 | SaudiArabia, |
| 363 | Senegal, |
| 364 | Serbia, |
| 365 | Seychelles, |
| 366 | SierraLeone, |
| 367 | Singapore, |
| 368 | Slovakia, |
| 369 | Slovenia, |
| 370 | SolomonIslands, |
| 371 | Somalia, |
| 372 | SouthAfrica, |
| 373 | SouthKorea, |
| 374 | SouthSudan, |
| 375 | Spain, |
| 376 | SriLanka, |
| 377 | Sudan, |
| 378 | Suriname, |
| 379 | Swaziland, |
| 380 | Sweden, |
| 381 | Switzerland, |
| 382 | Syria, |
| 383 | Taiwan, |
| 384 | Tajikistan, |
| 385 | Tanzania, |
| 386 | Thailand, |
| 387 | Togo, |
| 388 | Tonga, |
| 389 | TrinidadAndTobago, |
| 390 | Tunisia, |
| 391 | Turkey, |
| 392 | Turkmenistan, |
| 393 | Tuvalu, |
| 394 | Uganda, |
| 395 | Ukraine, |
| 396 | UnitedArabEmirates, |
| 397 | UnitedKingdom, |
| 398 | UnitedStatesOfAmerica, |
| 399 | Uruguay, |
| 400 | Uzbekistan, |
| 401 | Vanuatu, |
| 402 | VaticanCity, |
| 403 | Venezuela, |
| 404 | Vietnam, |
| 405 | Yemen, |
| 406 | Zambia, |
| 407 | Zimbabwe, |
| 408 | ); |
| 409 | |
| 410 | /// Population data reference year and sources. |
| 411 | /// |
| 412 | /// All population data in this type is based on: |
| 413 | /// - Reference Year: 2023 |
| 414 | /// - Primary Sources: |
| 415 | /// - UN World Population Prospects 2022 (country totals) |
| 416 | /// - World Bank Urban Population % (2022 data) |
| 417 | /// - UN World Urbanization Prospects 2018 (city populations) |
| 418 | /// - National census data where available (2020-2023) |
| 419 | /// |
| 420 | /// Notes: |
| 421 | /// - City populations represent metropolitan/urban agglomeration areas |
| 422 | /// - Rural populations are calculated as (total - sum of urban) |
| 423 | /// - Areas are approximate and may not sum exactly to country total |
| 424 | /// - Some small countries use simplified single-region models |
| 425 | /// |
| 426 | /// IMPORTANT LIMITATIONS: |
| 427 | /// - Generated coordinates use circular distributions around population centres |
| 428 | /// - Does NOT respect actual borders, coastlines, or water bodies |
| 429 | /// - Island nations (e.g., Philippines, Indonesia) will generate many ocean points |
| 430 | /// - Coastal cities often generate 30-50% of points in water |
| 431 | /// - Border regions may generate points in neighbouring countries |
| 432 | /// - For accurate land-only points, post-process with actual GIS boundary data |
| 433 | impl Country { |
| 434 | /// Generates a random location within a country, weighted by population density. |
| 435 | /// |
| 436 | /// This function returns a latitude and longitude pair that reflects actual |
| 437 | /// population distribution, including both urban centres and rural areas. |
| 438 | /// |
| 439 | /// # Arguments |
| 440 | /// |
| 441 | /// * `country` - The country to generate a location for. |
| 442 | /// |
| 443 | /// # Returns |
| 444 | /// |
| 445 | /// A `LocationPopulationRegion` containing latitude, longitude in decimal degrees and the region name. |
| 446 | pub fn random_population_location(&self) -> LocationPopulationRegion { |
| 447 | let country_data = self.get_country_population_data(); |
| 448 | |
| 449 | // Create weighted distribution based on population. |
| 450 | let weights: Vec<f64> = country_data.regions.iter().map(|r| r.population).collect(); |
| 451 | let total_weight: f64 = weights.iter().sum(); |
| 452 | |
| 453 | // Select a region based on population weights. |
| 454 | let mut selection_value = Rand::value::<f64>() * total_weight; |
| 455 | let mut selected_region = country_data.regions[0].clone(); |
| 456 | |
| 457 | for (i, region) in country_data.regions.iter().enumerate() { |
| 458 | selection_value -= weights[i]; |
| 459 | if selection_value <= 0.0 { |
| 460 | selected_region = region.clone(); |
| 461 | break; |
| 462 | } |
| 463 | } |
| 464 | |
| 465 | // Generate a random point within the selected region. |
| 466 | let (latitude, longitude) = selected_region.random_point_in_region(); |
| 467 | |
| 468 | LocationPopulationRegion { |
| 469 | latitude, |
| 470 | longitude, |
| 471 | region: selected_region, |
| 472 | } |
| 473 | } |
| 474 | |
| 475 | /// Returns population data for a given country. |
| 476 | /// |
| 477 | /// Each country is divided into non-overlapping regions (both urban and rural) |
| 478 | /// with accurate population and area data. |
| 479 | pub fn get_country_population_data(&self) -> CountryPopulationData { |
| 480 | match self { |
| 481 | Self::Afghanistan => { |
| 482 | // Afghanistan: 40.1M population, 652,860 km² area, ~26% urban. |
| 483 | CountryPopulationData::from_regions(vec![ |
| 484 | PopulationRegion::new(34.5553, 69.2075, 4_600_000.0, 275.0, AreaType::Urban, "Kabul"), |
| 485 | PopulationRegion::new(31.6100, 65.7100, 614_000.0, 54.0, AreaType::Urban, "Kandahar"), |
| 486 | PopulationRegion::new(36.7050, 67.1100, 548_000.0, 50.0, AreaType::Urban, "Mazar-i-Sharif"), |
| 487 | PopulationRegion::new(34.3480, 62.2040, 506_000.0, 45.0, AreaType::Urban, "Herat"), |
| 488 | PopulationRegion::new(34.5000, 69.1800, 30_000_000.0, 651_500.0, AreaType::Rural, "Rural Afghanistan"), |
| 489 | ], 652_860.0) |
| 490 | }, |
| 491 | |
| 492 | Self::Albania => { |
| 493 | // Albania: 2.8M population, 28,748 km² area, ~63% urban. |
| 494 | CountryPopulationData::from_regions(vec![ |
| 495 | PopulationRegion::new(41.3275, 19.8187, 610_000.0, 42.0, AreaType::Urban, "Tirana"), |
| 496 | PopulationRegion::new(40.4587, 19.4901, 140_000.0, 28.0, AreaType::Urban, "Durrës"), |
| 497 | PopulationRegion::new(40.7264, 19.5687, 95_000.0, 20.0, AreaType::Urban, "Elbasan"), |
| 498 | PopulationRegion::new(41.0, 20.0, 1_100_000.0, 28_600.0, AreaType::Rural, "Rural Albania"), |
| 499 | ], 28_748.0) |
| 500 | }, |
| 501 | |
| 502 | Self::Algeria => { |
| 503 | // Algeria: 44.7M population, 2,381,741 km² area, ~74% urban. |
| 504 | CountryPopulationData::from_regions(vec![ |
| 505 | PopulationRegion::new(36.7538, 3.0588, 2_988_000.0, 363.0, AreaType::Urban, "Algiers"), |
| 506 | PopulationRegion::new(35.6969, -0.6331, 541_000.0, 64.0, AreaType::Urban, "Oran"), |
| 507 | PopulationRegion::new(36.3650, 6.6147, 507_000.0, 80.0, AreaType::Urban, "Constantine"), |
| 508 | PopulationRegion::new(36.1900, 5.4100, 415_000.0, 127.0, AreaType::Urban, "Sétif"), |
| 509 | PopulationRegion::new(35.4000, 8.1200, 380_000.0, 40.0, AreaType::Urban, "Biskra"), |
| 510 | PopulationRegion::new(35.4028, 0.1320, 335_000.0, 85.0, AreaType::Urban, "Tiaret"), |
| 511 | PopulationRegion::new(36.7525, 5.0556, 320_000.0, 75.0, AreaType::Urban, "Béjaïa"), |
| 512 | PopulationRegion::new(36.9050, 7.7633, 295_000.0, 68.0, AreaType::Urban, "Annaba"), |
| 513 | PopulationRegion::new(35.3714, 1.3225, 280_000.0, 62.0, AreaType::Urban, "Tlemcen"), |
| 514 | PopulationRegion::new(28.0, 3.0, 10_600_000.0, 2_380_000.0, AreaType::Rural, "Rural Algeria"), |
| 515 | ], 2_381_741.0) |
| 516 | }, |
| 517 | |
| 518 | Self::Andorra => { |
| 519 | // Andorra: 79k population, 468 km² area, ~88% urban. |
| 520 | CountryPopulationData::from_regions(vec![ |
| 521 | PopulationRegion::new(42.5063, 1.5218, 23_000.0, 12.0, AreaType::Urban, "Andorra la Vella"), |
| 522 | PopulationRegion::new(42.5, 1.5, 56_000.0, 456.0, AreaType::Rural, "Rural Andorra"), |
| 523 | ], 468.0) |
| 524 | }, |
| 525 | |
| 526 | Self::Angola => { |
| 527 | // Angola: 34.5M population, 1,246,700 km² area, ~67% urban. |
| 528 | CountryPopulationData::from_regions(vec![ |
| 529 | PopulationRegion::new(-8.8390, 13.2894, 8_330_000.0, 116.0, AreaType::Urban, "Luanda"), |
| 530 | PopulationRegion::new(-12.5700, 13.4100, 810_000.0, 40.0, AreaType::Urban, "Lubango"), |
| 531 | PopulationRegion::new(-11.2000, 13.5400, 778_000.0, 35.0, AreaType::Urban, "Huambo"), |
| 532 | PopulationRegion::new(-5.9200, 12.4100, 550_000.0, 30.0, AreaType::Urban, "Cabinda"), |
| 533 | PopulationRegion::new(-11.0, 16.0, 11_400_000.0, 1_245_000.0, AreaType::Rural, "Rural Angola"), |
| 534 | ], 1_246_700.0) |
| 535 | }, |
| 536 | |
| 537 | Self::AntiguaAndBarbuda => { |
| 538 | // Antigua and Barbuda: 98k population, 442 km² area, ~24% urban. |
| 539 | CountryPopulationData::from_regions(vec![ |
| 540 | PopulationRegion::new(17.1175, -61.8456, 24_000.0, 10.0, AreaType::Urban, "St. John's"), |
| 541 | PopulationRegion::new(17.1333, -61.7833, 11_000.0, 5.0, AreaType::Urban, "All Saints"), |
| 542 | PopulationRegion::new(17.0667, -61.8667, 5_000.0, 3.0, AreaType::Urban, "Liberta"), |
| 543 | PopulationRegion::new(17.1, -61.8, 36_000.0, 280.0, AreaType::Rural, "Rural Antigua"), |
| 544 | PopulationRegion::new(17.6333, -62.0167, 22_000.0, 144.0, AreaType::Rural, "Rural Barbuda"), |
| 545 | ], 442.0) |
| 546 | }, |
| 547 | |
| 548 | Self::Argentina => { |
| 549 | // Argentina: 45.8M population, 2,780,400 km² area, ~92% urban. |
| 550 | CountryPopulationData::from_regions(vec![ |
| 551 | PopulationRegion::new(-34.6037, -58.3816, 15_370_000.0, 203.0, AreaType::Urban, "Buenos Aires Metro"), |
| 552 | PopulationRegion::new(-31.4201, -64.1888, 1_577_000.0, 576.0, AreaType::Urban, "Córdoba"), |
| 553 | PopulationRegion::new(-32.8908, -68.8272, 1_200_000.0, 57.0, AreaType::Urban, "Mendoza"), |
| 554 | PopulationRegion::new(-26.8083, -65.2176, 1_014_000.0, 91.0, AreaType::Urban, "Tucumán"), |
| 555 | PopulationRegion::new(-34.9205, -57.9536, 937_000.0, 25.0, AreaType::Urban, "La Plata"), |
| 556 | PopulationRegion::new(-24.7859, -65.4117, 792_000.0, 60.0, AreaType::Urban, "Salta"), |
| 557 | PopulationRegion::new(-32.9468, -60.6393, 743_000.0, 117.0, AreaType::Urban, "Rosario"), |
| 558 | PopulationRegion::new(-34.5711, -58.4232, 715_000.0, 52.0, AreaType::Urban, "San Justo"), |
| 559 | PopulationRegion::new(-27.7834, -64.2642, 554_000.0, 44.0, AreaType::Urban, "Santiago del Estero"), |
| 560 | PopulationRegion::new(-38.0, -63.0, 1_750_000.0, 2_778_000.0, AreaType::Rural, "Rural Argentina"), |
| 561 | ], 2_780_400.0) |
| 562 | }, |
| 563 | |
| 564 | Self::Armenia => { |
| 565 | // Armenia: 3.0M population, 29,743 km² area, ~63% urban. |
| 566 | CountryPopulationData::from_regions(vec![ |
| 567 | PopulationRegion::new(40.1792, 44.4991, 1_090_000.0, 227.0, AreaType::Urban, "Yerevan"), |
| 568 | PopulationRegion::new(40.7899, 43.8473, 123_000.0, 25.0, AreaType::Urban, "Gyumri"), |
| 569 | PopulationRegion::new(40.1833, 44.5167, 74_000.0, 18.0, AreaType::Urban, "Vanadzor"), |
| 570 | PopulationRegion::new(40.5, 44.5, 1_100_000.0, 29_400.0, AreaType::Rural, "Rural Armenia"), |
| 571 | ], 29_743.0) |
| 572 | }, |
| 573 | |
| 574 | Self::Australia => { |
| 575 | // Australia: 25.9M population, 7,692,024 km² area, ~86% urban. |
| 576 | CountryPopulationData::from_regions(vec![ |
| 577 | PopulationRegion::new(-33.8688, 151.2093, 5_367_000.0, 12_368.0, AreaType::Urban, "Sydney Metro"), |
| 578 | PopulationRegion::new(-37.8136, 144.9631, 5_078_000.0, 9_992.0, AreaType::Urban, "Melbourne Metro"), |
| 579 | PopulationRegion::new(-27.4698, 153.0251, 2_568_000.0, 15_842.0, AreaType::Urban, "Brisbane Metro"), |
| 580 | PopulationRegion::new(-31.9505, 115.8605, 2_118_000.0, 6_418.0, AreaType::Urban, "Perth Metro"), |
| 581 | PopulationRegion::new(-34.9285, 138.6007, 1_376_000.0, 3_258.0, AreaType::Urban, "Adelaide Metro"), |
| 582 | PopulationRegion::new(-28.0167, 153.4000, 693_000.0, 1_353.0, AreaType::Urban, "Gold Coast-Tweed"), |
| 583 | PopulationRegion::new(-32.9283, 151.7817, 497_000.0, 2_334.0, AreaType::Urban, "Newcastle-Maitland"), |
| 584 | PopulationRegion::new(-35.2809, 149.1300, 462_000.0, 814.0, AreaType::Urban, "Canberra"), |
| 585 | PopulationRegion::new(-30.0, 140.0, 3_600_000.0, 7_640_000.0, AreaType::Rural, "Rural Australia"), |
| 586 | ], 7_692_024.0) |
| 587 | }, |
| 588 | |
| 589 | Self::Austria => { |
| 590 | // Austria: 9.0M population, 83,879 km² area, ~59% urban. |
| 591 | CountryPopulationData::from_regions(vec![ |
| 592 | PopulationRegion::new(48.2082, 16.3738, 2_002_000.0, 414.0, AreaType::Urban, "Vienna"), |
| 593 | PopulationRegion::new(47.0707, 15.4395, 295_000.0, 128.0, AreaType::Urban, "Graz"), |
| 594 | PopulationRegion::new(47.2692, 11.4041, 133_000.0, 105.0, AreaType::Urban, "Innsbruck"), |
| 595 | PopulationRegion::new(47.8095, 13.0550, 157_000.0, 66.0, AreaType::Urban, "Salzburg"), |
| 596 | PopulationRegion::new(48.3069, 14.2858, 210_000.0, 96.0, AreaType::Urban, "Linz"), |
| 597 | PopulationRegion::new(47.5, 13.5, 3_700_000.0, 83_000.0, AreaType::Rural, "Rural Austria"), |
| 598 | ], 83_879.0) |
| 599 | }, |
| 600 | |
| 601 | Self::Azerbaijan => { |
| 602 | // Azerbaijan: 10.2M population, 86,600 km² area, ~57% urban. |
| 603 | CountryPopulationData::from_regions(vec![ |
| 604 | PopulationRegion::new(40.4093, 49.8671, 2_374_000.0, 2_140.0, AreaType::Urban, "Baku"), |
| 605 | PopulationRegion::new(40.6828, 46.3606, 337_000.0, 110.0, AreaType::Urban, "Ganja"), |
| 606 | PopulationRegion::new(40.5893, 48.8315, 218_000.0, 95.0, AreaType::Urban, "Sumqayit"), |
| 607 | PopulationRegion::new(40.5, 48.0, 4_400_000.0, 84_000.0, AreaType::Rural, "Rural Azerbaijan"), |
| 608 | ], 86_600.0) |
| 609 | }, |
| 610 | |
| 611 | Self::TheBahamas => { |
| 612 | // The Bahamas: 397k population, 13,943 km² area, ~83% urban. |
| 613 | CountryPopulationData::from_regions(vec![ |
| 614 | PopulationRegion::new(25.0480, -77.3554, 280_000.0, 207.0, AreaType::Urban, "Nassau"), |
| 615 | PopulationRegion::new(26.5333, -78.7000, 19_000.0, 23.0, AreaType::Urban, "Freeport"), |
| 616 | PopulationRegion::new(23.1085, -75.7619, 11_000.0, 15.0, AreaType::Urban, "George Town"), |
| 617 | PopulationRegion::new(24.9000, -76.1833, 9_000.0, 12.0, AreaType::Urban, "Cooper's Town"), |
| 618 | PopulationRegion::new(26.6833, -77.4000, 7_000.0, 10.0, AreaType::Urban, "Marsh Harbour"), |
| 619 | PopulationRegion::new(25.0, -77.5, 41_000.0, 13_676.0, AreaType::Rural, "Rural Bahamas"), |
| 620 | ], 13_943.0) |
| 621 | }, |
| 622 | |
| 623 | Self::Bahrain => { |
| 624 | // Bahrain: 1.7M population, 785 km² area, ~89% urban. |
| 625 | CountryPopulationData::from_regions(vec![ |
| 626 | PopulationRegion::new(26.2285, 50.5860, 635_000.0, 30.0, AreaType::Urban, "Manama"), |
| 627 | PopulationRegion::new(26.1418, 50.5579, 261_000.0, 15.0, AreaType::Urban, "Riffa"), |
| 628 | PopulationRegion::new(26.2361, 50.5481, 216_000.0, 12.0, AreaType::Urban, "Muharraq"), |
| 629 | PopulationRegion::new(26.1, 50.6, 188_000.0, 728.0, AreaType::Rural, "Rural Bahrain"), |
| 630 | ], 785.0) |
| 631 | }, |
| 632 | |
| 633 | Self::Bangladesh => { |
| 634 | // Bangladesh: 169.4M population, 147,630 km² area, ~39% urban. |
| 635 | CountryPopulationData::from_regions(vec![ |
| 636 | PopulationRegion::new(23.8103, 90.4125, 21_741_000.0, 306.0, AreaType::Urban, "Dhaka"), |
| 637 | PopulationRegion::new(22.3569, 91.7832, 5_253_000.0, 168.0, AreaType::Urban, "Chittagong"), |
| 638 | PopulationRegion::new(24.3636, 88.6241, 2_280_000.0, 65.0, AreaType::Urban, "Khulna"), |
| 639 | PopulationRegion::new(24.8465, 89.3773, 907_000.0, 25.0, AreaType::Urban, "Rajshahi"), |
| 640 | PopulationRegion::new(23.4607, 91.1809, 877_000.0, 20.0, AreaType::Urban, "Sylhet"), |
| 641 | PopulationRegion::new(25.7439, 89.2752, 774_000.0, 18.0, AreaType::Urban, "Rangpur"), |
| 642 | PopulationRegion::new(22.8456, 89.5403, 654_000.0, 15.0, AreaType::Urban, "Barisal"), |
| 643 | PopulationRegion::new(24.7471, 90.4203, 532_000.0, 12.0, AreaType::Urban, "Mymensingh"), |
| 644 | PopulationRegion::new(22.7010, 90.3535, 466_000.0, 10.0, AreaType::Urban, "Jessore"), |
| 645 | PopulationRegion::new(24.0, 90.0, 99_900_000.0, 147_000.0, AreaType::Rural, "Rural Bangladesh"), |
| 646 | ], 147_630.0) |
| 647 | }, |
| 648 | |
| 649 | Self::Barbados => { |
| 650 | // Barbados: 288k population, 439 km² area, ~31% urban. |
| 651 | CountryPopulationData::from_regions(vec![ |
| 652 | PopulationRegion::new(13.0969, -59.6145, 90_000.0, 39.0, AreaType::Urban, "Bridgetown"), |
| 653 | PopulationRegion::new(13.1, -59.6, 198_000.0, 400.0, AreaType::Rural, "Rural Barbados"), |
| 654 | ], 439.0) |
| 655 | }, |
| 656 | |
| 657 | Self::Belarus => { |
| 658 | // Belarus: 9.3M population, 207,600 km² area, ~79% urban. |
| 659 | CountryPopulationData::from_regions(vec![ |
| 660 | PopulationRegion::new(53.9006, 27.5590, 2_039_000.0, 348.0, AreaType::Urban, "Minsk"), |
| 661 | PopulationRegion::new(52.0975, 23.6877, 368_000.0, 67.0, AreaType::Urban, "Brest"), |
| 662 | PopulationRegion::new(52.4345, 30.9754, 359_000.0, 90.0, AreaType::Urban, "Gomel"), |
| 663 | PopulationRegion::new(55.1904, 30.2049, 270_000.0, 40.0, AreaType::Urban, "Vitebsk"), |
| 664 | PopulationRegion::new(53.6693, 23.8131, 231_000.0, 65.0, AreaType::Urban, "Grodno"), |
| 665 | PopulationRegion::new(53.5, 28.0, 1_950_000.0, 207_000.0, AreaType::Rural, "Rural Belarus"), |
| 666 | ], 207_600.0) |
| 667 | }, |
| 668 | |
| 669 | Self::Belgium => { |
| 670 | // Belgium: 11.6M population, 30,528 km² area, ~98% urban. |
| 671 | CountryPopulationData::from_regions(vec![ |
| 672 | PopulationRegion::new(50.8503, 4.3517, 2_110_000.0, 161.0, AreaType::Urban, "Brussels Metro"), |
| 673 | PopulationRegion::new(51.2194, 4.4025, 1_050_000.0, 204.0, AreaType::Urban, "Antwerp"), |
| 674 | PopulationRegion::new(51.0543, 3.7174, 600_000.0, 156.0, AreaType::Urban, "Ghent"), |
| 675 | PopulationRegion::new(50.6292, 5.5797, 750_000.0, 862.0, AreaType::Urban, "Liège"), |
| 676 | PopulationRegion::new(50.4669, 4.8647, 500_000.0, 194.0, AreaType::Urban, "Charleroi"), |
| 677 | PopulationRegion::new(50.5, 4.5, 240_000.0, 29_000.0, AreaType::Rural, "Rural Belgium"), |
| 678 | ], 30_528.0) |
| 679 | }, |
| 680 | |
| 681 | Self::Belize => { |
| 682 | // Belize: 412k population, 22,966 km² area, ~46% urban. |
| 683 | CountryPopulationData::from_regions(vec![ |
| 684 | PopulationRegion::new(17.4995, -88.1884, 75_000.0, 35.0, AreaType::Urban, "Belize City"), |
| 685 | PopulationRegion::new(17.2514, -88.7590, 20_000.0, 12.0, AreaType::Urban, "Belmopan"), |
| 686 | PopulationRegion::new(17.5, -88.5, 222_000.0, 22_900.0, AreaType::Rural, "Rural Belize"), |
| 687 | ], 22_966.0) |
| 688 | }, |
| 689 | |
| 690 | Self::Benin => { |
| 691 | // Benin: 12.5M population, 114,763 km² area, ~48% urban. |
| 692 | CountryPopulationData::from_regions(vec![ |
| 693 | PopulationRegion::new(6.3654, 2.4183, 761_000.0, 79.0, AreaType::Urban, "Cotonou"), |
| 694 | PopulationRegion::new(6.4968, 2.6288, 492_000.0, 52.0, AreaType::Urban, "Porto-Novo"), |
| 695 | PopulationRegion::new(9.3419, 2.6286, 287_000.0, 40.0, AreaType::Urban, "Parakou"), |
| 696 | PopulationRegion::new(7.0, 2.0, 6_500_000.0, 114_600.0, AreaType::Rural, "Rural Benin"), |
| 697 | ], 114_763.0) |
| 698 | }, |
| 699 | |
| 700 | Self::Bhutan => { |
| 701 | // Bhutan: 777k population, 38,394 km² area, ~42% urban. |
| 702 | CountryPopulationData::from_regions(vec![ |
| 703 | PopulationRegion::new(27.4728, 89.6393, 115_000.0, 26.0, AreaType::Urban, "Thimphu"), |
| 704 | PopulationRegion::new(27.2515, 91.5264, 19_000.0, 18.0, AreaType::Urban, "Samdrup Jongkhar"), |
| 705 | PopulationRegion::new(27.5, 90.0, 450_000.0, 38_350.0, AreaType::Rural, "Rural Bhutan"), |
| 706 | ], 38_394.0) |
| 707 | }, |
| 708 | |
| 709 | Self::Bolivia => { |
| 710 | // Bolivia: 11.8M population, 1,098,581 km² area, ~70% urban. |
| 711 | CountryPopulationData::from_regions(vec![ |
| 712 | PopulationRegion::new(-17.8146, -63.1561, 1_916_000.0, 469.0, AreaType::Urban, "Santa Cruz"), |
| 713 | PopulationRegion::new(-16.4897, -68.1193, 1_835_000.0, 133.0, AreaType::Urban, "La Paz"), |
| 714 | PopulationRegion::new(-17.3935, -66.1570, 1_385_000.0, 391.0, AreaType::Urban, "Cochabamba"), |
| 715 | PopulationRegion::new(-19.5836, -65.7531, 291_000.0, 37.0, AreaType::Urban, "Sucre"), |
| 716 | PopulationRegion::new(-17.0, -65.0, 3_500_000.0, 1_097_000.0, AreaType::Rural, "Rural Bolivia"), |
| 717 | ], 1_098_581.0) |
| 718 | }, |
| 719 | |
| 720 | Self::BosniaAndHerzegovina => { |
| 721 | // Bosnia and Herzegovina: 3.3M population, 51,197 km² area, ~49% urban. |
| 722 | CountryPopulationData::from_regions(vec![ |
| 723 | PopulationRegion::new(43.8476, 18.3564, 420_000.0, 142.0, AreaType::Urban, "Sarajevo"), |
| 724 | PopulationRegion::new(44.7722, 17.1911, 185_000.0, 115.0, AreaType::Urban, "Banja Luka"), |
| 725 | PopulationRegion::new(43.3438, 17.8078, 115_000.0, 30.0, AreaType::Urban, "Mostar"), |
| 726 | PopulationRegion::new(44.5377, 18.6709, 83_000.0, 25.0, AreaType::Urban, "Tuzla"), |
| 727 | PopulationRegion::new(44.0, 18.0, 1_680_000.0, 50_900.0, AreaType::Rural, "Rural Bosnia"), |
| 728 | ], 51_197.0) |
| 729 | }, |
| 730 | |
| 731 | Self::Botswana => { |
| 732 | // Botswana: 2.4M population, 581,730 km² area, ~71% urban. |
| 733 | CountryPopulationData::from_regions(vec![ |
| 734 | PopulationRegion::new(-24.6537, 25.9065, 288_000.0, 169.0, AreaType::Urban, "Gaborone"), |
| 735 | PopulationRegion::new(-21.1661, 27.5146, 101_000.0, 79.0, AreaType::Urban, "Francistown"), |
| 736 | PopulationRegion::new(-20.4674, 23.1681, 91_000.0, 31.0, AreaType::Urban, "Maun"), |
| 737 | PopulationRegion::new(-22.0, 24.0, 690_000.0, 581_400.0, AreaType::Rural, "Rural Botswana"), |
| 738 | ], 581_730.0) |
| 739 | }, |
| 740 | |
| 741 | Self::Brazil => { |
| 742 | // Brazil: 214.3M population, 8,515,767 km² area, ~87% urban. |
| 743 | CountryPopulationData::from_regions(vec![ |
| 744 | PopulationRegion::new(-23.5505, -46.6333, 22_430_000.0, 7_947.0, AreaType::Urban, "São Paulo Metro"), |
| 745 | PopulationRegion::new(-22.9068, -43.1729, 13_074_000.0, 1_200.0, AreaType::Urban, "Rio de Janeiro Metro"), |
| 746 | PopulationRegion::new(-19.9167, -43.9345, 6_006_000.0, 331.0, AreaType::Urban, "Belo Horizonte Metro"), |
| 747 | PopulationRegion::new(-30.0346, -51.2177, 4_285_000.0, 497.0, AreaType::Urban, "Porto Alegre Metro"), |
| 748 | PopulationRegion::new(-15.7975, -47.8919, 4_728_000.0, 5_802.0, AreaType::Urban, "Brasília Metro"), |
| 749 | PopulationRegion::new(-8.0476, -34.8770, 4_175_000.0, 218.0, AreaType::Urban, "Recife Metro"), |
| 750 | PopulationRegion::new(-3.7172, -38.5433, 4_074_000.0, 314.0, AreaType::Urban, "Fortaleza Metro"), |
| 751 | PopulationRegion::new(-12.9714, -38.5014, 3_984_000.0, 693.0, AreaType::Urban, "Salvador Metro"), |
| 752 | PopulationRegion::new(-25.4244, -49.2654, 3_733_000.0, 435.0, AreaType::Urban, "Curitiba Metro"), |
| 753 | PopulationRegion::new(-23.9609, -46.3332, 3_572_000.0, 2_704.0, AreaType::Urban, "Campinas Metro"), |
| 754 | PopulationRegion::new(-3.1019, -60.0250, 2_676_000.0, 377.0, AreaType::Urban, "Manaus"), |
| 755 | PopulationRegion::new(-1.4558, -48.4902, 2_491_000.0, 346.0, AreaType::Urban, "Belém"), |
| 756 | PopulationRegion::new(-10.9472, -37.0731, 2_338_000.0, 163.0, AreaType::Urban, "Aracaju"), |
| 757 | PopulationRegion::new(-15.0, -55.0, 24_500_000.0, 8_500_000.0, AreaType::Rural, "Rural Brazil"), |
| 758 | ], 8_515_767.0) |
| 759 | }, |
| 760 | |
| 761 | Self::Brunei => { |
| 762 | // Brunei: 441k population, 5,765 km² area, ~78% urban. |
| 763 | CountryPopulationData::from_regions(vec![ |
| 764 | PopulationRegion::new(4.9031, 114.9398, 241_000.0, 100.0, AreaType::Urban, "Bandar Seri Begawan"), |
| 765 | PopulationRegion::new(4.5828, 114.1595, 31_000.0, 12.0, AreaType::Urban, "Kuala Belait"), |
| 766 | PopulationRegion::new(4.6, 114.5, 97_000.0, 5_650.0, AreaType::Rural, "Rural Brunei"), |
| 767 | ], 5_765.0) |
| 768 | }, |
| 769 | |
| 770 | Self::Bulgaria => { |
| 771 | // Bulgaria: 6.9M population, 110,879 km² area, ~76% urban. |
| 772 | CountryPopulationData::from_regions(vec![ |
| 773 | PopulationRegion::new(42.6977, 23.3219, 1_330_000.0, 492.0, AreaType::Urban, "Sofia"), |
| 774 | PopulationRegion::new(42.1354, 24.7453, 367_000.0, 102.0, AreaType::Urban, "Plovdiv"), |
| 775 | PopulationRegion::new(43.2141, 27.9147, 336_000.0, 205.0, AreaType::Urban, "Varna"), |
| 776 | PopulationRegion::new(43.0757, 25.6172, 185_000.0, 82.0, AreaType::Urban, "Ruse"), |
| 777 | PopulationRegion::new(42.5, 25.0, 1_660_000.0, 110_000.0, AreaType::Rural, "Rural Bulgaria"), |
| 778 | ], 110_879.0) |
| 779 | }, |
| 780 | |
| 781 | Self::BurkinaFaso => { |
| 782 | // Burkina Faso: 21.5M population, 274,222 km² area, ~31% urban. |
| 783 | CountryPopulationData::from_regions(vec![ |
| 784 | PopulationRegion::new(12.3681, -1.5275, 2_780_000.0, 219.0, AreaType::Urban, "Ouagadougou"), |
| 785 | PopulationRegion::new(11.1771, -4.2964, 904_000.0, 136.0, AreaType::Urban, "Bobo-Dioulasso"), |
| 786 | PopulationRegion::new(12.0823, -1.6715, 190_000.0, 40.0, AreaType::Urban, "Koudougou"), |
| 787 | PopulationRegion::new(12.5, -2.0, 14_800_000.0, 273_800.0, AreaType::Rural, "Rural Burkina Faso"), |
| 788 | ], 274_222.0) |
| 789 | }, |
| 790 | |
| 791 | Self::Burundi => { |
| 792 | // Burundi: 12.3M population, 27,834 km² area, ~14% urban. |
| 793 | CountryPopulationData::from_regions(vec![ |
| 794 | PopulationRegion::new(-3.3822, 29.3644, 1_100_000.0, 87.0, AreaType::Urban, "Bujumbura"), |
| 795 | PopulationRegion::new(-3.3731, 29.9246, 123_000.0, 32.0, AreaType::Urban, "Gitega"), |
| 796 | PopulationRegion::new(-3.5, 29.5, 10_600_000.0, 27_700.0, AreaType::Rural, "Rural Burundi"), |
| 797 | ], 27_834.0) |
| 798 | }, |
| 799 | |
| 800 | Self::Cambodia => { |
| 801 | // Cambodia: 17.0M population, 181,035 km² area, ~24% urban. |
| 802 | CountryPopulationData::from_regions(vec![ |
| 803 | PopulationRegion::new(11.5625, 104.9160, 2_282_000.0, 679.0, AreaType::Urban, "Phnom Penh"), |
| 804 | PopulationRegion::new(13.0957, 103.1968, 190_000.0, 30.0, AreaType::Urban, "Battambang"), |
| 805 | PopulationRegion::new(13.3622, 103.8597, 189_000.0, 25.0, AreaType::Urban, "Siem Reap"), |
| 806 | PopulationRegion::new(11.5, 104.5, 12_900_000.0, 180_300.0, AreaType::Rural, "Rural Cambodia"), |
| 807 | ], 181_035.0) |
| 808 | }, |
| 809 | |
| 810 | Self::Cameroon => { |
| 811 | // Cameroon: 27.2M population, 475,442 km² area, ~58% urban. |
| 812 | CountryPopulationData::from_regions(vec![ |
| 813 | PopulationRegion::new(3.8480, 11.5021, 3_976_000.0, 300.0, AreaType::Urban, "Yaoundé"), |
| 814 | PopulationRegion::new(4.0577, 9.7043, 3_529_000.0, 210.0, AreaType::Urban, "Douala"), |
| 815 | PopulationRegion::new(5.9597, 10.1458, 546_000.0, 110.0, AreaType::Urban, "Bamenda"), |
| 816 | PopulationRegion::new(10.5956, 14.3159, 393_000.0, 100.0, AreaType::Urban, "Maroua"), |
| 817 | PopulationRegion::new(6.0, 12.0, 11_500_000.0, 474_800.0, AreaType::Rural, "Rural Cameroon"), |
| 818 | ], 475_442.0) |
| 819 | }, |
| 820 | |
| 821 | Self::Canada => { |
| 822 | // Canada: 38.2M population, 9,984,670 km² area, ~82% urban. |
| 823 | CountryPopulationData::from_regions(vec![ |
| 824 | PopulationRegion::new(43.6532, -79.3832, 6_418_000.0, 7_124.0, AreaType::Urban, "Toronto Metro"), |
| 825 | PopulationRegion::new(45.5017, -73.5673, 4_291_000.0, 4_259.0, AreaType::Urban, "Montreal Metro"), |
| 826 | PopulationRegion::new(49.2827, -123.1207, 2_737_000.0, 2_883.0, AreaType::Urban, "Vancouver Metro"), |
| 827 | PopulationRegion::new(51.0447, -114.0719, 1_481_000.0, 5_108.0, AreaType::Urban, "Calgary Metro"), |
| 828 | PopulationRegion::new(53.5461, -113.4938, 1_418_000.0, 9_438.0, AreaType::Urban, "Edmonton Metro"), |
| 829 | PopulationRegion::new(45.4215, -75.6972, 1_393_000.0, 6_767.0, AreaType::Urban, "Ottawa-Gatineau"), |
| 830 | PopulationRegion::new(49.8951, -97.1384, 834_000.0, 5_306.0, AreaType::Urban, "Winnipeg Metro"), |
| 831 | PopulationRegion::new(46.8139, -71.2080, 812_000.0, 3_408.0, AreaType::Urban, "Quebec City Metro"), |
| 832 | PopulationRegion::new(43.2607, -79.9194, 785_000.0, 1_371.0, AreaType::Urban, "Hamilton"), |
| 833 | PopulationRegion::new(43.0131, -81.1992, 543_000.0, 2_882.0, AreaType::Urban, "London"), |
| 834 | PopulationRegion::new(50.0, -95.0, 5_700_000.0, 9_940_000.0, AreaType::Rural, "Rural Canada"), |
| 835 | ], 9_984_670.0) |
| 836 | }, |
| 837 | |
| 838 | Self::CapeVerde => { |
| 839 | // Cape Verde: 563k population, 4,033 km² area, ~67% urban. |
| 840 | CountryPopulationData::from_regions(vec![ |
| 841 | PopulationRegion::new(14.9055, -23.5087, 160_000.0, 103.0, AreaType::Urban, "Praia"), |
| 842 | PopulationRegion::new(16.8880, -24.9956, 76_000.0, 29.0, AreaType::Urban, "Mindelo"), |
| 843 | PopulationRegion::new(15.0833, -23.1167, 14_000.0, 8.0, AreaType::Urban, "Assomada"), |
| 844 | PopulationRegion::new(16.1667, -22.9167, 12_000.0, 7.0, AreaType::Urban, "Porto Novo"), |
| 845 | PopulationRegion::new(15.1, -23.6, 160_000.0, 3_886.0, AreaType::Rural, "Rural Cape Verde"), |
| 846 | ], 4_033.0) |
| 847 | }, |
| 848 | |
| 849 | Self::CentralAfricanRepublic => { |
| 850 | // Central African Republic: 4.9M population, 622,984 km² area, ~42% urban. |
| 851 | CountryPopulationData::from_regions(vec![ |
| 852 | PopulationRegion::new(4.3947, 18.5582, 903_000.0, 67.0, AreaType::Urban, "Bangui"), |
| 853 | PopulationRegion::new(7.2627, 21.0059, 46_000.0, 28.0, AreaType::Urban, "Bimbo"), |
| 854 | PopulationRegion::new(6.5, 20.0, 2_900_000.0, 622_900.0, AreaType::Rural, "Rural CAR"), |
| 855 | ], 622_984.0) |
| 856 | }, |
| 857 | |
| 858 | Self::Chad => { |
| 859 | // Chad: 17.0M population, 1,284,000 km² area, ~23% urban. |
| 860 | CountryPopulationData::from_regions(vec![ |
| 861 | PopulationRegion::new(12.1348, 15.0557, 1_533_000.0, 104.0, AreaType::Urban, "N'Djamena"), |
| 862 | PopulationRegion::new(8.5697, 16.0933, 135_000.0, 30.0, AreaType::Urban, "Moundou"), |
| 863 | PopulationRegion::new(9.3182, 16.0801, 110_000.0, 25.0, AreaType::Urban, "Sarh"), |
| 864 | PopulationRegion::new(15.0, 19.0, 13_100_000.0, 1_283_800.0, AreaType::Rural, "Rural Chad"), |
| 865 | ], 1_284_000.0) |
| 866 | }, |
| 867 | |
| 868 | Self::Chile => { |
| 869 | // Chile: 19.2M population, 756,102 km² area, ~88% urban. |
| 870 | CountryPopulationData::from_regions(vec![ |
| 871 | PopulationRegion::new(-33.4489, -70.6693, 7_412_000.0, 641.0, AreaType::Urban, "Santiago Metro"), |
| 872 | PopulationRegion::new(-33.0472, -71.6127, 1_035_000.0, 300.0, AreaType::Urban, "Valparaíso Metro"), |
| 873 | PopulationRegion::new(-36.8201, -73.0444, 1_044_000.0, 221.0, AreaType::Urban, "Concepción Metro"), |
| 874 | PopulationRegion::new(-23.6509, -70.3975, 607_000.0, 30.0, AreaType::Urban, "Antofagasta"), |
| 875 | PopulationRegion::new(-20.2208, -70.1431, 384_000.0, 20.0, AreaType::Urban, "Iquique"), |
| 876 | PopulationRegion::new(-41.4693, -72.9424, 317_000.0, 25.0, AreaType::Urban, "Puerto Montt"), |
| 877 | PopulationRegion::new(-39.8196, -73.2452, 294_000.0, 22.0, AreaType::Urban, "Valdivia"), |
| 878 | PopulationRegion::new(-18.4783, -70.3126, 287_000.0, 15.0, AreaType::Urban, "Arica"), |
| 879 | PopulationRegion::new(-38.7369, -72.6018, 278_000.0, 20.0, AreaType::Urban, "Temuco"), |
| 880 | PopulationRegion::new(-29.9045, -71.2489, 251_000.0, 18.0, AreaType::Urban, "La Serena"), |
| 881 | PopulationRegion::new(-35.0, -71.0, 1_200_000.0, 754_900.0, AreaType::Rural, "Rural Chile"), |
| 882 | ], 756_102.0) |
| 883 | }, |
| 884 | |
| 885 | Self::China => { |
| 886 | // China: 1,412M population, 9,596,961 km² area, ~63% urban. |
| 887 | CountryPopulationData::from_regions(vec![ |
| 888 | PopulationRegion::new(31.2304, 121.4737, 27_796_000.0, 6_341.0, AreaType::Urban, "Shanghai"), |
| 889 | PopulationRegion::new(39.9042, 116.4074, 21_893_000.0, 16_411.0, AreaType::Urban, "Beijing"), |
| 890 | PopulationRegion::new(22.5431, 114.0579, 18_633_000.0, 3_980.0, AreaType::Urban, "Shenzhen-HK"), |
| 891 | PopulationRegion::new(23.1291, 113.2644, 18_677_000.0, 7_434.0, AreaType::Urban, "Guangzhou"), |
| 892 | PopulationRegion::new(30.5728, 104.0668, 16_045_000.0, 14_378.0, AreaType::Urban, "Chengdu"), |
| 893 | PopulationRegion::new(22.8170, 108.3665, 14_545_000.0, 7_263.0, AreaType::Urban, "Chongqing Urban"), |
| 894 | PopulationRegion::new(31.8639, 117.2808, 13_255_000.0, 11_445.0, AreaType::Urban, "Tianjin"), |
| 895 | PopulationRegion::new(30.2741, 120.1551, 11_936_000.0, 16_596.0, AreaType::Urban, "Hangzhou"), |
| 896 | PopulationRegion::new(30.5928, 114.3055, 11_895_000.0, 8_569.0, AreaType::Urban, "Wuhan"), |
| 897 | PopulationRegion::new(34.2667, 108.8833, 10_680_000.0, 10_096.0, AreaType::Urban, "Xi'an"), |
| 898 | PopulationRegion::new(32.0603, 118.7969, 9_204_000.0, 6_587.0, AreaType::Urban, "Nanjing"), |
| 899 | PopulationRegion::new(26.0745, 119.2965, 8_346_000.0, 12_155.0, AreaType::Urban, "Fuzhou"), |
| 900 | PopulationRegion::new(38.9122, 121.6021, 7_903_000.0, 13_238.0, AreaType::Urban, "Dalian"), |
| 901 | PopulationRegion::new(41.7923, 123.4328, 7_441_000.0, 12_948.0, AreaType::Urban, "Shenyang"), |
| 902 | PopulationRegion::new(36.6512, 117.1201, 6_814_000.0, 7_753.0, AreaType::Urban, "Jinan"), |
| 903 | PopulationRegion::new(25.0389, 102.7183, 6_663_000.0, 21_473.0, AreaType::Urban, "Kunming"), |
| 904 | PopulationRegion::new(43.8171, 125.3235, 5_965_000.0, 32_347.0, AreaType::Urban, "Changchun"), |
| 905 | PopulationRegion::new(45.8038, 126.5350, 5_353_000.0, 53_068.0, AreaType::Urban, "Harbin"), |
| 906 | PopulationRegion::new(29.5630, 106.5516, 5_104_000.0, 82_403.0, AreaType::Urban, "Chongqing Metro"), |
| 907 | PopulationRegion::new(35.0, 105.0, 440_000_000.0, 9_500_000.0, AreaType::Rural, "Rural China"), |
| 908 | ], 9_596_961.0) |
| 909 | }, |
| 910 | |
| 911 | Self::Colombia => { |
| 912 | // Colombia: 51.5M population, 1,141,748 km² area, ~81% urban. |
| 913 | CountryPopulationData::from_regions(vec![ |
| 914 | PopulationRegion::new(4.7110, -74.0721, 11_285_000.0, 1_775.0, AreaType::Urban, "Bogotá Metro"), |
| 915 | PopulationRegion::new(6.2442, -75.5812, 4_103_000.0, 1_152.0, AreaType::Urban, "Medellín Metro"), |
| 916 | PopulationRegion::new(3.4516, -76.5320, 2_882_000.0, 564.0, AreaType::Urban, "Cali Metro"), |
| 917 | PopulationRegion::new(10.9685, -74.7813, 2_046_000.0, 154.0, AreaType::Urban, "Barranquilla Metro"), |
| 918 | PopulationRegion::new(11.2422, -74.2017, 1_358_000.0, 55.0, AreaType::Urban, "Cartagena"), |
| 919 | PopulationRegion::new(7.8836, -72.4967, 714_000.0, 143.0, AreaType::Urban, "Cúcuta"), |
| 920 | PopulationRegion::new(7.1254, -73.1198, 681_000.0, 30.0, AreaType::Urban, "Bucaramanga"), |
| 921 | PopulationRegion::new(8.7549, -75.8261, 557_000.0, 90.0, AreaType::Urban, "Montería"), |
| 922 | PopulationRegion::new(5.0689, -75.5174, 539_000.0, 25.0, AreaType::Urban, "Manizales"), |
| 923 | PopulationRegion::new(4.0, -72.0, 7_300_000.0, 1_138_000.0, AreaType::Rural, "Rural Colombia"), |
| 924 | ], 1_141_748.0) |
| 925 | }, |
| 926 | |
| 927 | Self::Comoros => { |
| 928 | // Comoros: 889k population, 1,861 km² area, ~29% urban. |
| 929 | CountryPopulationData::from_regions(vec![ |
| 930 | PopulationRegion::new(-11.7100, 43.2400, 62_000.0, 30.0, AreaType::Urban, "Moroni"), |
| 931 | PopulationRegion::new(-12.2800, 44.4500, 25_000.0, 15.0, AreaType::Urban, "Mutsamudu"), |
| 932 | PopulationRegion::new(-12.1667, 44.2667, 21_000.0, 12.0, AreaType::Urban, "Fomboni"), |
| 933 | PopulationRegion::new(-11.4667, 43.3333, 18_000.0, 10.0, AreaType::Urban, "Domoni"), |
| 934 | PopulationRegion::new(-11.8, 43.3, 591_000.0, 1_794.0, AreaType::Rural, "Rural Comoros"), |
| 935 | ], 1_861.0) |
| 936 | }, |
| 937 | |
| 938 | Self::CostaRica => { |
| 939 | // Costa Rica: 5.2M population, 51,100 km² area, ~81% urban. |
| 940 | CountryPopulationData::from_regions(vec![ |
| 941 | PopulationRegion::new(9.9281, -84.0907, 2_158_000.0, 2_044.0, AreaType::Urban, "San José Metro"), |
| 942 | PopulationRegion::new(10.0154, -84.2142, 356_000.0, 42.0, AreaType::Urban, "Alajuela"), |
| 943 | PopulationRegion::new(9.8661, -83.9211, 167_000.0, 31.0, AreaType::Urban, "Cartago"), |
| 944 | PopulationRegion::new(10.0, -84.0, 1_000_000.0, 48_900.0, AreaType::Rural, "Rural Costa Rica"), |
| 945 | ], 51_100.0) |
| 946 | }, |
| 947 | |
| 948 | Self::CotedIvoire => { |
| 949 | // Côte d'Ivoire: 27.1M population, 322,463 km² area, ~52% urban. |
| 950 | CountryPopulationData::from_regions(vec![ |
| 951 | PopulationRegion::new(5.3599, -4.0082, 5_517_000.0, 2_119.0, AreaType::Urban, "Abidjan"), |
| 952 | PopulationRegion::new(7.5399, -5.5471, 356_000.0, 70.0, AreaType::Urban, "Bouaké"), |
| 953 | PopulationRegion::new(9.4580, -6.8262, 320_000.0, 60.0, AreaType::Urban, "Korhogo"), |
| 954 | PopulationRegion::new(6.8184, -6.1456, 270_000.0, 50.0, AreaType::Urban, "Yamoussoukro"), |
| 955 | PopulationRegion::new(7.0, -5.5, 13_000_000.0, 320_000.0, AreaType::Rural, "Rural Côte d'Ivoire"), |
| 956 | ], 322_463.0) |
| 957 | }, |
| 958 | |
| 959 | Self::Croatia => { |
| 960 | // Croatia: 4.0M population, 56,594 km² area, ~58% urban. |
| 961 | CountryPopulationData::from_regions(vec![ |
| 962 | PopulationRegion::new(45.8150, 15.9819, 806_000.0, 641.0, AreaType::Urban, "Zagreb"), |
| 963 | PopulationRegion::new(43.5081, 16.4402, 179_000.0, 79.0, AreaType::Urban, "Split"), |
| 964 | PopulationRegion::new(44.1194, 15.2314, 129_000.0, 58.0, AreaType::Urban, "Rijeka"), |
| 965 | PopulationRegion::new(45.5550, 18.6955, 108_000.0, 84.0, AreaType::Urban, "Osijek"), |
| 966 | PopulationRegion::new(45.3270, 14.4420, 57_000.0, 44.0, AreaType::Urban, "Pula"), |
| 967 | PopulationRegion::new(44.8666, 13.8495, 55_000.0, 38.0, AreaType::Urban, "Zadar"), |
| 968 | PopulationRegion::new(45.4873, 15.5468, 49_000.0, 36.0, AreaType::Urban, "Karlovac"), |
| 969 | PopulationRegion::new(45.0, 16.0, 1_540_000.0, 55_614.0, AreaType::Rural, "Rural Croatia"), |
| 970 | ], 56_594.0) |
| 971 | }, |
| 972 | |
| 973 | Self::Cuba => { |
| 974 | // Cuba: 11.3M population, 109,884 km² area, ~77% urban. |
| 975 | CountryPopulationData::from_regions(vec![ |
| 976 | PopulationRegion::new(23.1136, -82.3666, 2_141_000.0, 728.0, AreaType::Urban, "Havana"), |
| 977 | PopulationRegion::new(20.0174, -75.8134, 433_000.0, 216.0, AreaType::Urban, "Santiago de Cuba"), |
| 978 | PopulationRegion::new(22.1456, -80.4364, 326_000.0, 43.0, AreaType::Urban, "Camagüey"), |
| 979 | PopulationRegion::new(20.3433, -76.2611, 242_000.0, 70.0, AreaType::Urban, "Holguín"), |
| 980 | PopulationRegion::new(22.0, -79.0, 2_600_000.0, 108_800.0, AreaType::Rural, "Rural Cuba"), |
| 981 | ], 109_884.0) |
| 982 | }, |
| 983 | |
| 984 | Self::Cyprus => { |
| 985 | // Cyprus: 1.2M population, 9,251 km² area, ~67% urban. |
| 986 | CountryPopulationData::from_regions(vec![ |
| 987 | PopulationRegion::new(35.1856, 33.3823, 269_000.0, 111.0, AreaType::Urban, "Nicosia"), |
| 988 | PopulationRegion::new(34.6841, 33.0379, 108_000.0, 76.0, AreaType::Urban, "Limassol"), |
| 989 | PopulationRegion::new(34.9221, 33.6189, 51_000.0, 31.0, AreaType::Urban, "Larnaca"), |
| 990 | PopulationRegion::new(35.1, 33.2, 400_000.0, 9_033.0, AreaType::Rural, "Rural Cyprus"), |
| 991 | ], 9_251.0) |
| 992 | }, |
| 993 | |
| 994 | Self::CzechRepublic => { |
| 995 | // Czech Republic: 10.5M population, 78,867 km² area, ~74% urban. |
| 996 | CountryPopulationData::from_regions(vec![ |
| 997 | PopulationRegion::new(50.0755, 14.4378, 2_165_000.0, 496.0, AreaType::Urban, "Prague Metro"), |
| 998 | PopulationRegion::new(49.1951, 16.6068, 697_000.0, 230.0, AreaType::Urban, "Brno Metro"), |
| 999 | PopulationRegion::new(49.8398, 18.2820, 325_000.0, 214.0, AreaType::Urban, "Ostrava"), |
| 1000 | PopulationRegion::new(49.7437, 13.3736, 172_000.0, 138.0, AreaType::Urban, "Plzeň"), |
| 1001 | PopulationRegion::new(50.0, 15.0, 2_700_000.0, 77_800.0, AreaType::Rural, "Rural Czech Republic"), |
| 1002 | ], 78_867.0) |
| 1003 | }, |
| 1004 | |
| 1005 | Self::DemocraticRepublicOfTheCongo => { |
| 1006 | // DRC: 95.9M population, 2,344,858 km² area, ~46% urban. |
| 1007 | CountryPopulationData::from_regions(vec![ |
| 1008 | PopulationRegion::new(-4.4419, 15.2663, 14_970_000.0, 9_965.0, AreaType::Urban, "Kinshasa"), |
| 1009 | PopulationRegion::new(-11.6609, 27.4794, 2_866_000.0, 747.0, AreaType::Urban, "Lubumbashi"), |
| 1010 | PopulationRegion::new(-5.0459, 23.5236, 1_602_000.0, 200.0, AreaType::Urban, "Mbuji-Mayi"), |
| 1011 | PopulationRegion::new(-1.6596, 29.2204, 1_080_000.0, 90.0, AreaType::Urban, "Goma"), |
| 1012 | PopulationRegion::new(0.5143, 25.1897, 1_054_000.0, 85.0, AreaType::Urban, "Kisangani"), |
| 1013 | PopulationRegion::new(-2.0, 23.0, 51_700_000.0, 2_333_000.0, AreaType::Rural, "Rural DRC"), |
| 1014 | ], 2_344_858.0) |
| 1015 | }, |
| 1016 | |
| 1017 | Self::DemocraticRepublicOfTimorLeste => { |
| 1018 | // Timor-Leste: 1.3M population, 14,919 km² area, ~31% urban. |
| 1019 | CountryPopulationData::from_regions(vec![ |
| 1020 | PopulationRegion::new(-8.5569, 125.5603, 281_000.0, 49.0, AreaType::Urban, "Dili"), |
| 1021 | PopulationRegion::new(-8.7839, 126.3593, 29_000.0, 13.0, AreaType::Urban, "Baucau"), |
| 1022 | PopulationRegion::new(-8.7, 125.9, 917_000.0, 14_857.0, AreaType::Rural, "Rural Timor-Leste"), |
| 1023 | ], 14_919.0) |
| 1024 | }, |
| 1025 | |
| 1026 | Self::Denmark => { |
| 1027 | // Denmark: 5.9M population, 43,094 km² area, ~88% urban. |
| 1028 | CountryPopulationData::from_regions(vec![ |
| 1029 | PopulationRegion::new(55.6761, 12.5683, 1_363_000.0, 180.0, AreaType::Urban, "Copenhagen Metro"), |
| 1030 | PopulationRegion::new(56.1629, 10.2039, 349_000.0, 91.0, AreaType::Urban, "Aarhus"), |
| 1031 | PopulationRegion::new(55.4038, 10.4024, 216_000.0, 79.0, AreaType::Urban, "Odense"), |
| 1032 | PopulationRegion::new(57.0488, 9.9217, 143_000.0, 558.0, AreaType::Urban, "Aalborg"), |
| 1033 | PopulationRegion::new(56.0, 10.0, 700_000.0, 42_000.0, AreaType::Rural, "Rural Denmark"), |
| 1034 | ], 43_094.0) |
| 1035 | }, |
| 1036 | |
| 1037 | Self::Djibouti => { |
| 1038 | // Djibouti: 1.0M population, 23,200 km² area, ~78% urban. |
| 1039 | CountryPopulationData::from_regions(vec![ |
| 1040 | PopulationRegion::new(11.5721, 43.1456, 624_000.0, 630.0, AreaType::Urban, "Djibouti City"), |
| 1041 | PopulationRegion::new(11.7886, 42.5903, 37_000.0, 25.0, AreaType::Urban, "Ali Sabieh"), |
| 1042 | PopulationRegion::new(11.5, 42.5, 220_000.0, 22_545.0, AreaType::Rural, "Rural Djibouti"), |
| 1043 | ], 23_200.0) |
| 1044 | }, |
| 1045 | |
| 1046 | Self::Dominica => { |
| 1047 | // Dominica: 72k population, 750 km² area, ~71% urban. |
| 1048 | CountryPopulationData::from_regions(vec![ |
| 1049 | PopulationRegion::new(15.3010, -61.3863, 15_000.0, 13.0, AreaType::Urban, "Roseau"), |
| 1050 | PopulationRegion::new(15.4316, -61.3707, 3_000.0, 5.0, AreaType::Urban, "Portsmouth"), |
| 1051 | PopulationRegion::new(15.4, -61.3, 21_000.0, 732.0, AreaType::Rural, "Rural Dominica"), |
| 1052 | ], 750.0) |
| 1053 | }, |
| 1054 | |
| 1055 | Self::DominicanRepublic => { |
| 1056 | // Dominican Republic: 10.8M population, 48,671 km² area, ~83% urban. |
| 1057 | CountryPopulationData::from_regions(vec![ |
| 1058 | PopulationRegion::new(18.4861, -69.9312, 3_524_000.0, 1_401.0, AreaType::Urban, "Santo Domingo Metro"), |
| 1059 | PopulationRegion::new(19.4436, -70.6843, 1_164_000.0, 394.0, AreaType::Urban, "Santiago"), |
| 1060 | PopulationRegion::new(18.4269, -68.9655, 347_000.0, 84.0, AreaType::Urban, "La Romana"), |
| 1061 | PopulationRegion::new(18.5430, -69.3203, 331_000.0, 45.0, AreaType::Urban, "San Pedro de Macorís"), |
| 1062 | PopulationRegion::new(19.0, -70.0, 1_870_000.0, 46_700.0, AreaType::Rural, "Rural Dominican Republic"), |
| 1063 | ], 48_671.0) |
| 1064 | }, |
| 1065 | |
| 1066 | Self::Ecuador => { |
| 1067 | // Ecuador: 17.9M population, 283,561 km² area, ~64% urban. |
| 1068 | CountryPopulationData::from_regions(vec![ |
| 1069 | PopulationRegion::new(-2.1962, -79.8862, 3_094_000.0, 344.0, AreaType::Urban, "Guayaquil Metro"), |
| 1070 | PopulationRegion::new(-0.1807, -78.4678, 2_239_000.0, 372.0, AreaType::Urban, "Quito Metro"), |
| 1071 | PopulationRegion::new(-2.9001, -79.0058, 661_000.0, 75.0, AreaType::Urban, "Cuenca"), |
| 1072 | PopulationRegion::new(-1.2491, -78.6196, 418_000.0, 43.0, AreaType::Urban, "Ambato"), |
| 1073 | PopulationRegion::new(-1.0, -78.0, 6_400_000.0, 282_700.0, AreaType::Rural, "Rural Ecuador"), |
| 1074 | ], 283_561.0) |
| 1075 | }, |
| 1076 | |
| 1077 | Self::Egypt => { |
| 1078 | // Egypt: 104.3M population, 1,001,450 km² area, ~43% urban. |
| 1079 | CountryPopulationData::from_regions(vec![ |
| 1080 | PopulationRegion::new(30.0444, 31.2357, 21_323_000.0, 3_085.0, AreaType::Urban, "Cairo Metro"), |
| 1081 | PopulationRegion::new(31.2001, 29.9187, 5_381_000.0, 2_679.0, AreaType::Urban, "Alexandria"), |
| 1082 | PopulationRegion::new(30.5927, 32.2714, 800_000.0, 100.0, AreaType::Urban, "Port Said"), |
| 1083 | PopulationRegion::new(29.9668, 32.5498, 711_000.0, 110.0, AreaType::Urban, "Suez"), |
| 1084 | PopulationRegion::new(25.6872, 32.6396, 545_000.0, 417.0, AreaType::Urban, "Luxor"), |
| 1085 | PopulationRegion::new(27.1811, 31.1858, 538_000.0, 50.0, AreaType::Urban, "Asyut"), |
| 1086 | PopulationRegion::new(30.5765, 31.5041, 522_000.0, 45.0, AreaType::Urban, "Tanta"), |
| 1087 | PopulationRegion::new(31.0409, 31.3785, 495_000.0, 40.0, AreaType::Urban, "Mansoura"), |
| 1088 | PopulationRegion::new(30.1282, 31.3429, 483_000.0, 35.0, AreaType::Urban, "Zagazig"), |
| 1089 | PopulationRegion::new(24.0889, 32.8998, 474_000.0, 30.0, AreaType::Urban, "Aswan"), |
| 1090 | PopulationRegion::new(27.0, 30.0, 56_900_000.0, 997_600.0, AreaType::Rural, "Rural Egypt"), |
| 1091 | ], 1_001_450.0) |
| 1092 | }, |
| 1093 | |
| 1094 | Self::ElSalvador => { |
| 1095 | // El Salvador: 6.5M population, 21,041 km² area, ~74% urban. |
| 1096 | CountryPopulationData::from_regions(vec![ |
| 1097 | PopulationRegion::new(13.6929, -89.2182, 1_107_000.0, 72.0, AreaType::Urban, "San Salvador"), |
| 1098 | PopulationRegion::new(14.3038, -89.4462, 264_000.0, 55.0, AreaType::Urban, "Santa Ana"), |
| 1099 | PopulationRegion::new(13.4889, -88.1806, 245_000.0, 40.0, AreaType::Urban, "San Miguel"), |
| 1100 | PopulationRegion::new(13.8, -89.0, 1_700_000.0, 20_900.0, AreaType::Rural, "Rural El Salvador"), |
| 1101 | ], 21_041.0) |
| 1102 | }, |
| 1103 | |
| 1104 | Self::EquatorialGuinea => { |
| 1105 | // Equatorial Guinea: 1.5M population, 28,051 km² area, ~73% urban. |
| 1106 | CountryPopulationData::from_regions(vec![ |
| 1107 | PopulationRegion::new(3.7504, 8.7821, 333_000.0, 18.0, AreaType::Urban, "Malabo"), |
| 1108 | PopulationRegion::new(1.8501, 9.7713, 246_000.0, 25.0, AreaType::Urban, "Bata"), |
| 1109 | PopulationRegion::new(1.5, 10.0, 400_000.0, 28_008.0, AreaType::Rural, "Rural Equatorial Guinea"), |
| 1110 | ], 28_051.0) |
| 1111 | }, |
| 1112 | |
| 1113 | Self::Eritrea => { |
| 1114 | // Eritrea: 3.6M population, 117,600 km² area, ~42% urban. |
| 1115 | CountryPopulationData::from_regions(vec![ |
| 1116 | PopulationRegion::new(15.3389, 38.9252, 803_000.0, 45.0, AreaType::Urban, "Asmara"), |
| 1117 | PopulationRegion::new(15.6109, 39.4545, 91_000.0, 20.0, AreaType::Urban, "Massawa"), |
| 1118 | PopulationRegion::new(14.8897, 38.8829, 82_000.0, 15.0, AreaType::Urban, "Keren"), |
| 1119 | PopulationRegion::new(15.5, 38.5, 2_100_000.0, 117_500.0, AreaType::Rural, "Rural Eritrea"), |
| 1120 | ], 117_600.0) |
| 1121 | }, |
| 1122 | |
| 1123 | Self::Estonia => { |
| 1124 | // Estonia: 1.3M population, 45,228 km² area, ~69% urban. |
| 1125 | CountryPopulationData::from_regions(vec![ |
| 1126 | PopulationRegion::new(59.4370, 24.7536, 445_000.0, 159.0, AreaType::Urban, "Tallinn"), |
| 1127 | PopulationRegion::new(58.3776, 26.7291, 96_000.0, 39.0, AreaType::Urban, "Tartu"), |
| 1128 | PopulationRegion::new(59.3776, 27.4185, 55_000.0, 30.0, AreaType::Urban, "Narva"), |
| 1129 | PopulationRegion::new(58.5, 25.5, 415_000.0, 45_000.0, AreaType::Rural, "Rural Estonia"), |
| 1130 | ], 45_228.0) |
| 1131 | }, |
| 1132 | |
| 1133 | Self::Ethiopia => { |
| 1134 | // Ethiopia: 120.3M population, 1,104,300 km² area, ~22% urban. |
| 1135 | CountryPopulationData::from_regions(vec![ |
| 1136 | PopulationRegion::new(9.0250, 38.7469, 5_006_000.0, 527.0, AreaType::Urban, "Addis Ababa"), |
| 1137 | PopulationRegion::new(7.6781, 36.8289, 605_000.0, 169.0, AreaType::Urban, "Arba Minch"), |
| 1138 | PopulationRegion::new(11.5931, 37.3964, 534_000.0, 213.0, AreaType::Urban, "Bahir Dar"), |
| 1139 | PopulationRegion::new(6.8227, 37.7282, 500_000.0, 98.0, AreaType::Urban, "Hawassa"), |
| 1140 | PopulationRegion::new(11.1274, 39.6365, 497_000.0, 150.0, AreaType::Urban, "Mekelle"), |
| 1141 | PopulationRegion::new(7.5522, 38.4872, 445_000.0, 120.0, AreaType::Urban, "Jimma"), |
| 1142 | PopulationRegion::new(9.3225, 42.1198, 437_000.0, 130.0, AreaType::Urban, "Dire Dawa"), |
| 1143 | PopulationRegion::new(13.4937, 39.4764, 423_000.0, 100.0, AreaType::Urban, "Gonder"), |
| 1144 | PopulationRegion::new(8.5500, 39.2667, 401_000.0, 90.0, AreaType::Urban, "Shashemene"), |
| 1145 | PopulationRegion::new(9.0107, 38.7613, 385_000.0, 80.0, AreaType::Urban, "Adama"), |
| 1146 | PopulationRegion::new(9.0, 39.0, 88_400_000.0, 1_103_000.0, AreaType::Rural, "Rural Ethiopia"), |
| 1147 | ], 1_104_300.0) |
| 1148 | }, |
| 1149 | |
| 1150 | Self::FederatedStatesOfMicronesia => { |
| 1151 | // Federated States of Micronesia: 115k population, 702 km² area, ~23% urban. |
| 1152 | CountryPopulationData::from_regions(vec![ |
| 1153 | PopulationRegion::new(6.9248, 158.1610, 7_000.0, 12.0, AreaType::Urban, "Palikir"), |
| 1154 | PopulationRegion::new(6.8927, 158.2339, 7_000.0, 10.0, AreaType::Urban, "Kolonia"), |
| 1155 | PopulationRegion::new(7.4456, 151.8488, 3_500.0, 8.0, AreaType::Urban, "Weno"), |
| 1156 | PopulationRegion::new(7.3315, 151.5033, 3_000.0, 6.0, AreaType::Urban, "Tol"), |
| 1157 | PopulationRegion::new(7.0, 158.0, 81_500.0, 666.0, AreaType::Rural, "Rural Micronesia"), |
| 1158 | ], 702.0) |
| 1159 | }, |
| 1160 | |
| 1161 | Self::Fiji => { |
| 1162 | // Fiji: 903k population, 18,274 km² area, ~57% urban. |
| 1163 | CountryPopulationData::from_regions(vec![ |
| 1164 | PopulationRegion::new(-18.1248, 178.4501, 341_000.0, 2_048.0, AreaType::Urban, "Suva Metro"), |
| 1165 | PopulationRegion::new(-17.6134, 177.4481, 52_000.0, 32.0, AreaType::Urban, "Lautoka"), |
| 1166 | PopulationRegion::new(-17.7765, 177.9098, 72_000.0, 57.0, AreaType::Urban, "Nadi"), |
| 1167 | PopulationRegion::new(-17.5333, 178.8167, 50_000.0, 30.0, AreaType::Urban, "Labasa"), |
| 1168 | PopulationRegion::new(-17.8000, 178.0000, 44_000.0, 25.0, AreaType::Urban, "Ba"), |
| 1169 | PopulationRegion::new(-18.0, 178.0, 295_000.0, 16_082.0, AreaType::Rural, "Rural Fiji"), |
| 1170 | ], 18_274.0) |
| 1171 | }, |
| 1172 | |
| 1173 | Self::Finland => { |
| 1174 | // Finland: 5.5M population, 338,424 km² area, ~85% urban. |
| 1175 | CountryPopulationData::from_regions(vec![ |
| 1176 | PopulationRegion::new(60.1699, 24.9384, 1_305_000.0, 770.0, AreaType::Urban, "Helsinki Metro"), |
| 1177 | PopulationRegion::new(61.4978, 23.7610, 347_000.0, 689.0, AreaType::Urban, "Tampere"), |
| 1178 | PopulationRegion::new(60.4515, 22.2688, 196_000.0, 306.0, AreaType::Urban, "Turku"), |
| 1179 | PopulationRegion::new(65.0121, 25.4651, 141_000.0, 1_410.0, AreaType::Urban, "Oulu"), |
| 1180 | PopulationRegion::new(63.0, 27.0, 820_000.0, 335_000.0, AreaType::Rural, "Rural Finland"), |
| 1181 | ], 338_424.0) |
| 1182 | }, |
| 1183 | |
| 1184 | Self::France => { |
| 1185 | // France: 67.8M population, 643,801 km² area, ~81% urban. |
| 1186 | CountryPopulationData::from_regions(vec![ |
| 1187 | PopulationRegion::new(48.8566, 2.3522, 11_027_000.0, 2_845.0, AreaType::Urban, "Paris Metro"), |
| 1188 | PopulationRegion::new(45.7640, 4.8357, 2_323_000.0, 6_019.0, AreaType::Urban, "Lyon Metro"), |
| 1189 | PopulationRegion::new(43.2965, 5.3698, 1_760_000.0, 3_173.0, AreaType::Urban, "Marseille Metro"), |
| 1190 | PopulationRegion::new(43.6047, 1.4442, 1_360_000.0, 5_381.0, AreaType::Urban, "Toulouse Metro"), |
| 1191 | PopulationRegion::new(50.6292, 3.0573, 1_187_000.0, 977.0, AreaType::Urban, "Lille Metro"), |
| 1192 | PopulationRegion::new(44.8378, -0.5792, 1_247_000.0, 5_613.0, AreaType::Urban, "Bordeaux Metro"), |
| 1193 | PopulationRegion::new(47.2184, -1.5536, 972_000.0, 3_378.0, AreaType::Urban, "Nantes Metro"), |
| 1194 | PopulationRegion::new(48.1113, -1.6742, 733_000.0, 704.0, AreaType::Urban, "Rennes"), |
| 1195 | PopulationRegion::new(43.6047, 7.2644, 1_006_000.0, 2_383.0, AreaType::Urban, "Nice Metro"), |
| 1196 | PopulationRegion::new(45.1880, 5.7240, 689_000.0, 2_621.0, AreaType::Urban, "Grenoble Metro"), |
| 1197 | PopulationRegion::new(47.0, 2.0, 10_600_000.0, 620_000.0, AreaType::Rural, "Rural France"), |
| 1198 | ], 643_801.0) |
| 1199 | }, |
| 1200 | |
| 1201 | Self::Gabon => { |
| 1202 | // Gabon: 2.3M population, 267,668 km² area, ~90% urban. |
| 1203 | CountryPopulationData::from_regions(vec![ |
| 1204 | PopulationRegion::new(0.4162, 9.4673, 831_000.0, 189.0, AreaType::Urban, "Libreville"), |
| 1205 | PopulationRegion::new(-0.7001, 8.7809, 285_000.0, 81.0, AreaType::Urban, "Port-Gentil"), |
| 1206 | PopulationRegion::new(-1.9569, 11.4853, 61_000.0, 20.0, AreaType::Urban, "Franceville"), |
| 1207 | PopulationRegion::new(-0.5, 10.0, 230_000.0, 267_400.0, AreaType::Rural, "Rural Gabon"), |
| 1208 | ], 267_668.0) |
| 1209 | }, |
| 1210 | |
| 1211 | Self::TheGambia => { |
| 1212 | // The Gambia: 2.5M population, 11,295 km² area, ~63% urban. |
| 1213 | CountryPopulationData::from_regions(vec![ |
| 1214 | PopulationRegion::new(13.4432, -16.6781, 437_000.0, 93.0, AreaType::Urban, "Banjul Metro"), |
| 1215 | PopulationRegion::new(13.4531, -16.5775, 393_000.0, 76.0, AreaType::Urban, "Serekunda"), |
| 1216 | PopulationRegion::new(13.4418, -16.5636, 50_000.0, 10.0, AreaType::Urban, "Brikama"), |
| 1217 | PopulationRegion::new(13.5, -16.0, 950_000.0, 11_100.0, AreaType::Rural, "Rural Gambia"), |
| 1218 | ], 11_295.0) |
| 1219 | }, |
| 1220 | |
| 1221 | Self::Georgia => { |
| 1222 | // Georgia: 3.7M population, 69,700 km² area, ~60% urban. |
| 1223 | CountryPopulationData::from_regions(vec![ |
| 1224 | PopulationRegion::new(41.7151, 44.8271, 1_165_000.0, 504.0, AreaType::Urban, "Tbilisi"), |
| 1225 | PopulationRegion::new(42.2662, 42.7180, 147_000.0, 64.0, AreaType::Urban, "Kutaisi"), |
| 1226 | PopulationRegion::new(41.6168, 41.6367, 184_000.0, 66.0, AreaType::Urban, "Batumi"), |
| 1227 | PopulationRegion::new(42.2529, 43.9653, 57_000.0, 30.0, AreaType::Urban, "Gori"), |
| 1228 | PopulationRegion::new(42.0, 43.5, 1_490_000.0, 69_000.0, AreaType::Rural, "Rural Georgia"), |
| 1229 | ], 69_700.0) |
| 1230 | }, |
| 1231 | |
| 1232 | Self::Germany => { |
| 1233 | // Germany: 83.2M population, 357,588 km² area, ~77% urban. |
| 1234 | CountryPopulationData::from_regions(vec![ |
| 1235 | PopulationRegion::new(52.5200, 13.4050, 3_769_000.0, 891.0, AreaType::Urban, "Berlin"), |
| 1236 | PopulationRegion::new(53.5511, 9.9937, 1_899_000.0, 755.0, AreaType::Urban, "Hamburg"), |
| 1237 | PopulationRegion::new(48.1351, 11.5820, 1_484_000.0, 311.0, AreaType::Urban, "Munich"), |
| 1238 | PopulationRegion::new(50.9375, 6.9603, 1_085_000.0, 405.0, AreaType::Urban, "Cologne"), |
| 1239 | PopulationRegion::new(50.1109, 8.6821, 753_000.0, 248.0, AreaType::Urban, "Frankfurt"), |
| 1240 | PopulationRegion::new(48.7758, 9.1829, 634_000.0, 207.0, AreaType::Urban, "Stuttgart"), |
| 1241 | PopulationRegion::new(51.2277, 6.7735, 619_000.0, 217.0, AreaType::Urban, "Düsseldorf"), |
| 1242 | PopulationRegion::new(51.4556, 7.0116, 586_000.0, 210.0, AreaType::Urban, "Essen"), |
| 1243 | PopulationRegion::new(51.3397, 12.3731, 587_000.0, 297.0, AreaType::Urban, "Leipzig"), |
| 1244 | PopulationRegion::new(51.3127, 7.4639, 582_000.0, 280.0, AreaType::Urban, "Dortmund"), |
| 1245 | PopulationRegion::new(51.0504, 13.7373, 556_000.0, 328.0, AreaType::Urban, "Dresden"), |
| 1246 | PopulationRegion::new(49.4521, 11.0768, 532_000.0, 186.0, AreaType::Urban, "Nuremberg"), |
| 1247 | PopulationRegion::new(52.3759, 9.7320, 532_000.0, 204.0, AreaType::Urban, "Hanover"), |
| 1248 | PopulationRegion::new(51.5136, 7.4653, 519_000.0, 168.0, AreaType::Urban, "Bochum"), |
| 1249 | PopulationRegion::new(51.0, 10.0, 15_600_000.0, 354_000.0, AreaType::Rural, "Rural Germany"), |
| 1250 | ], 357_588.0) |
| 1251 | }, |
| 1252 | |
| 1253 | Self::Ghana => { |
| 1254 | // Ghana: 31.7M population, 238,533 km² area, ~57% urban. |
| 1255 | CountryPopulationData::from_regions(vec![ |
| 1256 | PopulationRegion::new(5.6037, -0.1870, 5_055_000.0, 225.0, AreaType::Urban, "Accra Metro"), |
| 1257 | PopulationRegion::new(6.6885, -1.6244, 2_557_000.0, 254.0, AreaType::Urban, "Kumasi"), |
| 1258 | PopulationRegion::new(5.1136, -1.2821, 289_000.0, 103.0, AreaType::Urban, "Sekondi-Takoradi"), |
| 1259 | PopulationRegion::new(9.4034, -0.8424, 235_000.0, 750.0, AreaType::Urban, "Tamale"), |
| 1260 | PopulationRegion::new(8.0, -1.0, 13_600_000.0, 237_300.0, AreaType::Rural, "Rural Ghana"), |
| 1261 | ], 238_533.0) |
| 1262 | }, |
| 1263 | |
| 1264 | Self::Greece => { |
| 1265 | // Greece: 10.7M population, 131,957 km² area, ~79% urban. |
| 1266 | CountryPopulationData::from_regions(vec![ |
| 1267 | PopulationRegion::new(37.9838, 23.7275, 3_690_000.0, 2_929.0, AreaType::Urban, "Athens Metro"), |
| 1268 | PopulationRegion::new(40.6401, 22.9444, 1_110_000.0, 1_286.0, AreaType::Urban, "Thessaloniki Metro"), |
| 1269 | PopulationRegion::new(38.2466, 21.7346, 214_000.0, 125.0, AreaType::Urban, "Patras"), |
| 1270 | PopulationRegion::new(35.3387, 25.1442, 174_000.0, 336.0, AreaType::Urban, "Heraklion"), |
| 1271 | PopulationRegion::new(37.0741, 22.4303, 139_000.0, 90.0, AreaType::Urban, "Kalamata"), |
| 1272 | PopulationRegion::new(35.5138, 24.0180, 122_000.0, 240.0, AreaType::Urban, "Chania"), |
| 1273 | PopulationRegion::new(36.4167, 28.2167, 105_000.0, 200.0, AreaType::Urban, "Rhodes"), |
| 1274 | PopulationRegion::new(37.9500, 23.6333, 100_000.0, 180.0, AreaType::Urban, "Piraeus"), |
| 1275 | PopulationRegion::new(39.6650, 20.8537, 85_000.0, 120.0, AreaType::Urban, "Ioannina"), |
| 1276 | PopulationRegion::new(38.9000, 22.4333, 75_000.0, 100.0, AreaType::Urban, "Lamia"), |
| 1277 | PopulationRegion::new(39.5, 22.0, 1_460_000.0, 127_300.0, AreaType::Rural, "Rural Greece"), |
| 1278 | ], 131_957.0) |
| 1279 | }, |
| 1280 | |
| 1281 | Self::Grenada => { |
| 1282 | // Grenada: 113k population, 349 km² area, ~36% urban. |
| 1283 | CountryPopulationData::from_regions(vec![ |
| 1284 | PopulationRegion::new(12.0540, -61.7486, 40_000.0, 65.0, AreaType::Urban, "St. George's"), |
| 1285 | PopulationRegion::new(12.1, -61.7, 72_000.0, 284.0, AreaType::Rural, "Rural Grenada"), |
| 1286 | ], 349.0) |
| 1287 | }, |
| 1288 | |
| 1289 | Self::Guatemala => { |
| 1290 | // Guatemala: 17.3M population, 108,889 km² area, ~52% urban. |
| 1291 | CountryPopulationData::from_regions(vec![ |
| 1292 | PopulationRegion::new(14.6407, -90.5133, 2_983_000.0, 996.0, AreaType::Urban, "Guatemala City Metro"), |
| 1293 | PopulationRegion::new(14.8344, -91.5185, 1_125_000.0, 484.0, AreaType::Urban, "Quetzaltenango"), |
| 1294 | PopulationRegion::new(14.9589, -90.9833, 184_000.0, 50.0, AreaType::Urban, "Escuintla"), |
| 1295 | PopulationRegion::new(15.0, -91.0, 8_400_000.0, 107_400.0, AreaType::Rural, "Rural Guatemala"), |
| 1296 | ], 108_889.0) |
| 1297 | }, |
| 1298 | |
| 1299 | Self::Guinea => { |
| 1300 | // Guinea: 13.5M population, 245,857 km² area, ~37% urban. |
| 1301 | CountryPopulationData::from_regions(vec![ |
| 1302 | PopulationRegion::new(9.6412, -13.5784, 1_991_000.0, 450.0, AreaType::Urban, "Conakry"), |
| 1303 | PopulationRegion::new(10.7356, -10.3860, 235_000.0, 50.0, AreaType::Urban, "Kankan"), |
| 1304 | PopulationRegion::new(11.3182, -12.2887, 146_000.0, 30.0, AreaType::Urban, "Kindia"), |
| 1305 | PopulationRegion::new(10.5, -11.0, 8_500_000.0, 245_300.0, AreaType::Rural, "Rural Guinea"), |
| 1306 | ], 245_857.0) |
| 1307 | }, |
| 1308 | |
| 1309 | Self::GuineaBissau => { |
| 1310 | // Guinea-Bissau: 2.0M population, 36,125 km² area, ~44% urban. |
| 1311 | CountryPopulationData::from_regions(vec![ |
| 1312 | PopulationRegion::new(11.8636, -15.5977, 643_000.0, 77.0, AreaType::Urban, "Bissau"), |
| 1313 | PopulationRegion::new(12.2833, -14.7667, 52_000.0, 12.0, AreaType::Urban, "Bafatá"), |
| 1314 | PopulationRegion::new(12.0, -15.0, 1_130_000.0, 36_000.0, AreaType::Rural, "Rural Guinea-Bissau"), |
| 1315 | ], 36_125.0) |
| 1316 | }, |
| 1317 | |
| 1318 | Self::Guyana => { |
| 1319 | // Guyana: 787k population, 214,969 km² area, ~27% urban. |
| 1320 | CountryPopulationData::from_regions(vec![ |
| 1321 | PopulationRegion::new(6.8013, -58.1551, 118_000.0, 70.0, AreaType::Urban, "Georgetown"), |
| 1322 | PopulationRegion::new(6.0045, -57.4795, 25_000.0, 20.0, AreaType::Urban, "Linden"), |
| 1323 | PopulationRegion::new(5.0, -59.0, 575_000.0, 214_900.0, AreaType::Rural, "Rural Guyana"), |
| 1324 | ], 214_969.0) |
| 1325 | }, |
| 1326 | |
| 1327 | Self::Haiti => { |
| 1328 | // Haiti: 11.5M population, 27,750 km² area, ~58% urban. |
| 1329 | CountryPopulationData::from_regions(vec![ |
| 1330 | PopulationRegion::new(18.5944, -72.3074, 2_915_000.0, 158.0, AreaType::Urban, "Port-au-Prince Metro"), |
| 1331 | PopulationRegion::new(19.7567, -72.2025, 375_000.0, 21.0, AreaType::Urban, "Cap-Haïtien"), |
| 1332 | PopulationRegion::new(18.5396, -72.3361, 172_000.0, 10.0, AreaType::Urban, "Pétionville"), |
| 1333 | PopulationRegion::new(19.0, -72.5, 4_900_000.0, 27_500.0, AreaType::Rural, "Rural Haiti"), |
| 1334 | ], 27_750.0) |
| 1335 | }, |
| 1336 | |
| 1337 | Self::Honduras => { |
| 1338 | // Honduras: 10.1M population, 112,492 km² area, ~59% urban. |
| 1339 | CountryPopulationData::from_regions(vec![ |
| 1340 | PopulationRegion::new(14.0723, -87.1921, 1_444_000.0, 220.0, AreaType::Urban, "Tegucigalpa"), |
| 1341 | PopulationRegion::new(15.5047, -88.0237, 929_000.0, 92.0, AreaType::Urban, "San Pedro Sula"), |
| 1342 | PopulationRegion::new(15.7800, -86.7892, 182_000.0, 30.0, AreaType::Urban, "La Ceiba"), |
| 1343 | PopulationRegion::new(15.0, -87.0, 4_150_000.0, 112_100.0, AreaType::Rural, "Rural Honduras"), |
| 1344 | ], 112_492.0) |
| 1345 | }, |
| 1346 | |
| 1347 | Self::Hungary => { |
| 1348 | // Hungary: 9.7M population, 93,028 km² area, ~72% urban. |
| 1349 | CountryPopulationData::from_regions(vec![ |
| 1350 | PopulationRegion::new(47.4979, 19.0402, 3_011_000.0, 525.0, AreaType::Urban, "Budapest Metro"), |
| 1351 | PopulationRegion::new(47.6875, 17.6504, 179_000.0, 282.0, AreaType::Urban, "Győr"), |
| 1352 | PopulationRegion::new(46.0727, 18.2323, 161_000.0, 161.0, AreaType::Urban, "Pécs"), |
| 1353 | PopulationRegion::new(46.2530, 20.1480, 170_000.0, 281.0, AreaType::Urban, "Szeged"), |
| 1354 | PopulationRegion::new(47.5, 19.0, 2_740_000.0, 91_800.0, AreaType::Rural, "Rural Hungary"), |
| 1355 | ], 93_028.0) |
| 1356 | }, |
| 1357 | |
| 1358 | Self::Iceland => { |
| 1359 | // Iceland: 372k population, 103,000 km² area, ~94% urban. |
| 1360 | CountryPopulationData::from_regions(vec![ |
| 1361 | PopulationRegion::new(64.1466, -21.9426, 233_000.0, 273.0, AreaType::Urban, "Reykjavík Metro"), |
| 1362 | PopulationRegion::new(64.1265, -21.8174, 13_000.0, 10.0, AreaType::Urban, "Kópavogur"), |
| 1363 | PopulationRegion::new(64.0671, -21.9602, 12_000.0, 8.0, AreaType::Urban, "Hafnarfjörður"), |
| 1364 | PopulationRegion::new(65.0, -19.0, 22_000.0, 102_700.0, AreaType::Rural, "Rural Iceland"), |
| 1365 | ], 103_000.0) |
| 1366 | }, |
| 1367 | |
| 1368 | Self::India => { |
| 1369 | // India: 1,408M population, 3,287,263 km² area, ~35% urban. |
| 1370 | CountryPopulationData::from_regions(vec![ |
| 1371 | PopulationRegion::new(28.7041, 77.1025, 32_941_000.0, 1_425.0, AreaType::Urban, "Delhi"), |
| 1372 | PopulationRegion::new(19.0760, 72.8777, 20_961_000.0, 550.0, AreaType::Urban, "Mumbai"), |
| 1373 | PopulationRegion::new(22.5726, 88.3639, 15_134_000.0, 1_851.0, AreaType::Urban, "Kolkata"), |
| 1374 | PopulationRegion::new(12.9716, 77.5946, 13_193_000.0, 741.0, AreaType::Urban, "Bangalore"), |
| 1375 | PopulationRegion::new(13.0827, 80.2707, 11_504_000.0, 1_049.0, AreaType::Urban, "Chennai"), |
| 1376 | PopulationRegion::new(17.3850, 78.4867, 10_494_000.0, 625.0, AreaType::Urban, "Hyderabad"), |
| 1377 | PopulationRegion::new(23.0225, 72.5714, 8_588_000.0, 464.0, AreaType::Urban, "Ahmedabad"), |
| 1378 | PopulationRegion::new(18.5204, 73.8567, 7_412_000.0, 582.0, AreaType::Urban, "Pune"), |
| 1379 | PopulationRegion::new(22.3072, 73.1812, 6_357_000.0, 331.0, AreaType::Urban, "Surat"), |
| 1380 | PopulationRegion::new(26.4499, 80.3319, 3_683_000.0, 285.0, AreaType::Urban, "Kanpur"), |
| 1381 | PopulationRegion::new(26.8467, 80.9462, 3_597_000.0, 402.0, AreaType::Urban, "Lucknow"), |
| 1382 | PopulationRegion::new(21.1458, 79.0882, 3_004_000.0, 227.0, AreaType::Urban, "Nagpur"), |
| 1383 | PopulationRegion::new(26.9124, 75.7873, 3_928_000.0, 484.0, AreaType::Urban, "Jaipur"), |
| 1384 | PopulationRegion::new(23.2599, 77.4126, 2_427_000.0, 293.0, AreaType::Urban, "Bhopal"), |
| 1385 | PopulationRegion::new(17.6868, 83.2185, 2_358_000.0, 682.0, AreaType::Urban, "Visakhapatnam"), |
| 1386 | PopulationRegion::new(25.5941, 85.1376, 2_300_000.0, 201.0, AreaType::Urban, "Patna"), |
| 1387 | PopulationRegion::new(13.0878, 80.2785, 2_283_000.0, 175.0, AreaType::Urban, "Vadodara"), |
| 1388 | PopulationRegion::new(22.7196, 75.8577, 2_171_000.0, 244.0, AreaType::Urban, "Indore"), |
| 1389 | PopulationRegion::new(30.7333, 76.7794, 2_122_000.0, 158.0, AreaType::Urban, "Chandigarh"), |
| 1390 | PopulationRegion::new(25.3478, 72.3106, 2_019_000.0, 149.0, AreaType::Urban, "Jodhpur"), |
| 1391 | PopulationRegion::new(23.0, 78.0, 880_000_000.0, 3_275_000.0, AreaType::Rural, "Rural India"), |
| 1392 | ], 3_287_263.0) |
| 1393 | }, |
| 1394 | |
| 1395 | Self::Indonesia => { |
| 1396 | // Indonesia: 273.8M population, 1,904,569 km² area, ~57% urban. |
| 1397 | CountryPopulationData::from_regions(vec![ |
| 1398 | PopulationRegion::new(-6.2088, 106.8456, 34_540_000.0, 3_540.0, AreaType::Urban, "Jakarta Metro"), |
| 1399 | PopulationRegion::new(-7.2575, 112.7521, 10_098_000.0, 5_343.0, AreaType::Urban, "Surabaya Metro"), |
| 1400 | PopulationRegion::new(-6.9175, 107.6191, 9_049_000.0, 2_875.0, AreaType::Urban, "Bandung Metro"), |
| 1401 | PopulationRegion::new(3.5952, 98.6722, 5_253_000.0, 479.0, AreaType::Urban, "Medan Metro"), |
| 1402 | PopulationRegion::new(-6.9667, 110.4167, 4_679_000.0, 210.0, AreaType::Urban, "Semarang Metro"), |
| 1403 | PopulationRegion::new(-5.1477, 119.4327, 3_368_000.0, 2_226.0, AreaType::Urban, "Makassar Metro"), |
| 1404 | PopulationRegion::new(-0.9493, 100.3543, 2_658_000.0, 694.0, AreaType::Urban, "Padang Metro"), |
| 1405 | PopulationRegion::new(-3.8000, 102.2667, 2_010_000.0, 315.0, AreaType::Urban, "Palembang"), |
| 1406 | PopulationRegion::new(1.4926, 124.8414, 1_895_000.0, 409.0, AreaType::Urban, "Manado"), |
| 1407 | PopulationRegion::new(-0.8917, 119.8707, 1_423_000.0, 333.0, AreaType::Urban, "Palu"), |
| 1408 | PopulationRegion::new(-8.5833, 116.1167, 1_407_000.0, 222.0, AreaType::Urban, "Mataram"), |
| 1409 | PopulationRegion::new(-0.0263, 109.3425, 1_396_000.0, 230.0, AreaType::Urban, "Pontianak"), |
| 1410 | PopulationRegion::new(-8.6500, 115.2167, 1_327_000.0, 5_780.0, AreaType::Urban, "Denpasar"), |
| 1411 | PopulationRegion::new(-2.9909, 104.7754, 1_312_000.0, 358.0, AreaType::Urban, "Jambi"), |
| 1412 | PopulationRegion::new(-3.0, 120.0, 95_700_000.0, 1_890_000.0, AreaType::Rural, "Rural Indonesia"), |
| 1413 | ], 1_904_569.0) |
| 1414 | }, |
| 1415 | |
| 1416 | Self::Iran => { |
| 1417 | // Iran: 85.0M population, 1,648,195 km² area, ~76% urban. |
| 1418 | CountryPopulationData::from_regions(vec![ |
| 1419 | PopulationRegion::new(35.6892, 51.3890, 9_382_000.0, 730.0, AreaType::Urban, "Tehran"), |
| 1420 | PopulationRegion::new(36.2605, 59.6168, 3_372_000.0, 328.0, AreaType::Urban, "Mashhad"), |
| 1421 | PopulationRegion::new(32.6546, 51.6680, 2_132_000.0, 106.0, AreaType::Urban, "Isfahan"), |
| 1422 | PopulationRegion::new(35.3219, 46.9982, 1_920_000.0, 234.0, AreaType::Urban, "Kermanshah"), |
| 1423 | PopulationRegion::new(38.0792, 46.2919, 1_841_000.0, 131.0, AreaType::Urban, "Tabriz"), |
| 1424 | PopulationRegion::new(29.5918, 52.5836, 1_750_000.0, 240.0, AreaType::Urban, "Shiraz"), |
| 1425 | PopulationRegion::new(37.2807, 49.5831, 1_703_000.0, 162.0, AreaType::Urban, "Rasht"), |
| 1426 | PopulationRegion::new(31.3183, 48.6706, 1_569_000.0, 134.0, AreaType::Urban, "Ahvaz"), |
| 1427 | PopulationRegion::new(36.3107, 59.5989, 1_245_000.0, 92.0, AreaType::Urban, "Zahedan"), |
| 1428 | PopulationRegion::new(34.6416, 50.8746, 1_228_000.0, 106.0, AreaType::Urban, "Qom"), |
| 1429 | PopulationRegion::new(32.0, 53.0, 14_600_000.0, 1_646_000.0, AreaType::Rural, "Rural Iran"), |
| 1430 | ], 1_648_195.0) |
| 1431 | }, |
| 1432 | |
| 1433 | Self::Iraq => { |
| 1434 | // Iraq: 41.2M population, 438,317 km² area, ~71% urban. |
| 1435 | CountryPopulationData::from_regions(vec![ |
| 1436 | PopulationRegion::new(33.3152, 44.3661, 8_765_000.0, 204.0, AreaType::Urban, "Baghdad"), |
| 1437 | PopulationRegion::new(36.3489, 43.1577, 1_846_000.0, 180.0, AreaType::Urban, "Mosul"), |
| 1438 | PopulationRegion::new(30.5234, 47.7919, 1_497_000.0, 117.0, AreaType::Urban, "Basra"), |
| 1439 | PopulationRegion::new(36.1905, 44.0119, 1_080_000.0, 70.0, AreaType::Urban, "Erbil"), |
| 1440 | PopulationRegion::new(35.4679, 44.3923, 875_000.0, 60.0, AreaType::Urban, "Kirkuk"), |
| 1441 | PopulationRegion::new(31.9960, 44.3150, 821_000.0, 54.0, AreaType::Urban, "Najaf"), |
| 1442 | PopulationRegion::new(32.4637, 44.0249, 711_000.0, 48.0, AreaType::Urban, "Karbala"), |
| 1443 | PopulationRegion::new(32.6149, 44.0227, 656_000.0, 43.0, AreaType::Urban, "Hillah"), |
| 1444 | PopulationRegion::new(32.0, 44.0, 10_000_000.0, 437_700.0, AreaType::Rural, "Rural Iraq"), |
| 1445 | ], 438_317.0) |
| 1446 | }, |
| 1447 | |
| 1448 | Self::Ireland => { |
| 1449 | // Ireland: 5.0M population, 70,273 km² area, ~64% urban. |
| 1450 | CountryPopulationData::from_regions(vec![ |
| 1451 | PopulationRegion::new(53.3498, -6.2603, 1_388_000.0, 318.0, AreaType::Urban, "Dublin Metro"), |
| 1452 | PopulationRegion::new(51.8969, -8.4863, 310_000.0, 187.0, AreaType::Urban, "Cork Metro"), |
| 1453 | PopulationRegion::new(53.2707, -9.0568, 195_000.0, 150.0, AreaType::Urban, "Galway"), |
| 1454 | PopulationRegion::new(52.6638, -8.6267, 117_000.0, 54.0, AreaType::Urban, "Limerick"), |
| 1455 | PopulationRegion::new(53.0, -8.0, 1_800_000.0, 69_500.0, AreaType::Rural, "Rural Ireland"), |
| 1456 | ], 70_273.0) |
| 1457 | }, |
| 1458 | |
| 1459 | Self::Israel => { |
| 1460 | // Israel: 9.4M population, 20,770 km² area, ~93% urban. |
| 1461 | CountryPopulationData::from_regions(vec![ |
| 1462 | PopulationRegion::new(32.0853, 34.7818, 4_343_000.0, 1_554.0, AreaType::Urban, "Tel Aviv Metro"), |
| 1463 | PopulationRegion::new(31.7683, 35.2137, 1_158_000.0, 125.0, AreaType::Urban, "Jerusalem"), |
| 1464 | PopulationRegion::new(32.7940, 34.9896, 924_000.0, 290.0, AreaType::Urban, "Haifa Metro"), |
| 1465 | PopulationRegion::new(31.2530, 34.7915, 217_000.0, 62.0, AreaType::Urban, "Beersheba"), |
| 1466 | PopulationRegion::new(32.0876, 34.8881, 197_000.0, 55.0, AreaType::Urban, "Rishon LeZion"), |
| 1467 | PopulationRegion::new(32.3261, 34.8516, 193_000.0, 52.0, AreaType::Urban, "Netanya"), |
| 1468 | PopulationRegion::new(31.8894, 34.8031, 181_000.0, 48.0, AreaType::Urban, "Ashdod"), |
| 1469 | PopulationRegion::new(32.0, 35.0, 260_000.0, 18_584.0, AreaType::Rural, "Rural Israel"), |
| 1470 | ], 20_770.0) |
| 1471 | }, |
| 1472 | |
| 1473 | Self::Italy => { |
| 1474 | // Italy: 59.1M population, 301,340 km² area, ~71% urban. |
| 1475 | CountryPopulationData::from_regions(vec![ |
| 1476 | PopulationRegion::new(41.9028, 12.4964, 4_342_000.0, 1_287.0, AreaType::Urban, "Rome Metro"), |
| 1477 | PopulationRegion::new(45.4642, 9.1900, 4_336_000.0, 1_575.0, AreaType::Urban, "Milan Metro"), |
| 1478 | PopulationRegion::new(40.8518, 14.2681, 3_085_000.0, 1_171.0, AreaType::Urban, "Naples Metro"), |
| 1479 | PopulationRegion::new(45.0703, 7.6869, 1_720_000.0, 335.0, AreaType::Urban, "Turin Metro"), |
| 1480 | PopulationRegion::new(38.1157, 13.3613, 1_252_000.0, 5_009.0, AreaType::Urban, "Palermo Metro"), |
| 1481 | PopulationRegion::new(44.4949, 11.3426, 1_011_000.0, 3_703.0, AreaType::Urban, "Bologna Metro"), |
| 1482 | PopulationRegion::new(43.7696, 11.2558, 1_013_000.0, 4_844.0, AreaType::Urban, "Florence Metro"), |
| 1483 | PopulationRegion::new(45.4408, 12.3155, 853_000.0, 2_462.0, AreaType::Urban, "Venice Metro"), |
| 1484 | PopulationRegion::new(41.1171, 16.8719, 608_000.0, 2_122.0, AreaType::Urban, "Bari"), |
| 1485 | PopulationRegion::new(45.0555, 8.0463, 462_000.0, 1_553.0, AreaType::Urban, "Genoa"), |
| 1486 | PopulationRegion::new(37.5079, 15.0830, 580_000.0, 1_570.0, AreaType::Urban, "Catania"), |
| 1487 | PopulationRegion::new(38.1938, 15.5540, 423_000.0, 3_183.0, AreaType::Urban, "Messina"), |
| 1488 | PopulationRegion::new(45.4064, 11.8768, 407_000.0, 2_281.0, AreaType::Urban, "Padua"), |
| 1489 | PopulationRegion::new(42.0, 12.5, 13_900_000.0, 283_000.0, AreaType::Rural, "Rural Italy"), |
| 1490 | ], 301_340.0) |
| 1491 | }, |
| 1492 | |
| 1493 | Self::Jamaica => { |
| 1494 | // Jamaica: 2.8M population, 10,991 km² area, ~56% urban. |
| 1495 | CountryPopulationData::from_regions(vec![ |
| 1496 | PopulationRegion::new(17.9714, -76.7937, 1_243_000.0, 453.0, AreaType::Urban, "Kingston Metro"), |
| 1497 | PopulationRegion::new(18.4709, -77.9219, 110_000.0, 25.0, AreaType::Urban, "Montego Bay"), |
| 1498 | PopulationRegion::new(18.0179, -76.8099, 89_000.0, 20.0, AreaType::Urban, "Spanish Town"), |
| 1499 | PopulationRegion::new(18.0, -77.0, 1_240_000.0, 10_400.0, AreaType::Rural, "Rural Jamaica"), |
| 1500 | ], 10_991.0) |
| 1501 | }, |
| 1502 | |
| 1503 | Self::Japan => { |
| 1504 | // Japan: 125.4M population, 377,975 km² area, ~92% urban. |
| 1505 | CountryPopulationData::from_regions(vec![ |
| 1506 | PopulationRegion::new(35.6762, 139.6503, 38_505_000.0, 13_452.0, AreaType::Urban, "Tokyo Metro"), |
| 1507 | PopulationRegion::new(34.6937, 135.5023, 19_165_000.0, 13_033.0, AreaType::Urban, "Osaka-Kobe-Kyoto"), |
| 1508 | PopulationRegion::new(35.1815, 136.9066, 9_197_000.0, 10_868.0, AreaType::Urban, "Nagoya Metro"), |
| 1509 | PopulationRegion::new(43.0642, 141.3469, 2_636_000.0, 3_800.0, AreaType::Urban, "Sapporo Metro"), |
| 1510 | PopulationRegion::new(33.5904, 130.4017, 5_502_000.0, 4_747.0, AreaType::Urban, "Fukuoka-Kitakyushu"), |
| 1511 | PopulationRegion::new(34.3853, 132.4553, 2_096_000.0, 905.0, AreaType::Urban, "Hiroshima Metro"), |
| 1512 | PopulationRegion::new(38.2682, 140.8694, 2_324_000.0, 6_400.0, AreaType::Urban, "Sendai Metro"), |
| 1513 | PopulationRegion::new(35.4437, 139.6380, 1_304_000.0, 326.0, AreaType::Urban, "Kawasaki"), |
| 1514 | PopulationRegion::new(35.1796, 136.9066, 1_163_000.0, 523.0, AreaType::Urban, "Kobe"), |
| 1515 | PopulationRegion::new(34.9756, 138.3829, 1_143_000.0, 1_411.0, AreaType::Urban, "Shizuoka"), |
| 1516 | PopulationRegion::new(26.2124, 127.6809, 1_377_000.0, 1_199.0, AreaType::Urban, "Naha"), |
| 1517 | PopulationRegion::new(37.0, 138.0, 8_600_000.0, 324_000.0, AreaType::Rural, "Rural Japan"), |
| 1518 | ], 377_975.0) |
| 1519 | }, |
| 1520 | |
| 1521 | Self::Jordan => { |
| 1522 | // Jordan: 10.3M population, 89,342 km² area, ~91% urban. |
| 1523 | CountryPopulationData::from_regions(vec![ |
| 1524 | PopulationRegion::new(31.9454, 35.9284, 2_210_000.0, 696.0, AreaType::Urban, "Amman"), |
| 1525 | PopulationRegion::new(31.1853, 35.7041, 655_000.0, 121.0, AreaType::Urban, "Zarqa"), |
| 1526 | PopulationRegion::new(32.5568, 35.8469, 608_000.0, 176.0, AreaType::Urban, "Irbid"), |
| 1527 | PopulationRegion::new(31.7148, 35.7933, 144_000.0, 35.0, AreaType::Urban, "Russeifa"), |
| 1528 | PopulationRegion::new(31.0, 36.0, 920_000.0, 88_300.0, AreaType::Rural, "Rural Jordan"), |
| 1529 | ], 89_342.0) |
| 1530 | }, |
| 1531 | |
| 1532 | Self::Kazakhstan => { |
| 1533 | // Kazakhstan: 19.0M population, 2,724,900 km² area, ~58% urban. |
| 1534 | CountryPopulationData::from_regions(vec![ |
| 1535 | PopulationRegion::new(43.2551, 76.9126, 2_048_000.0, 683.0, AreaType::Urban, "Almaty"), |
| 1536 | PopulationRegion::new(51.1655, 71.4272, 1_184_000.0, 810.0, AreaType::Urban, "Nur-Sultan"), |
| 1537 | PopulationRegion::new(42.3151, 69.5893, 1_074_000.0, 200.0, AreaType::Urban, "Shymkent"), |
| 1538 | PopulationRegion::new(50.4119, 80.2282, 510_000.0, 300.0, AreaType::Urban, "Semey"), |
| 1539 | PopulationRegion::new(47.1167, 51.8833, 500_000.0, 280.0, AreaType::Urban, "Aktobe"), |
| 1540 | PopulationRegion::new(49.8047, 73.1094, 497_000.0, 220.0, AreaType::Urban, "Karaganda"), |
| 1541 | PopulationRegion::new(52.2878, 76.9456, 476_000.0, 195.0, AreaType::Urban, "Pavlodar"), |
| 1542 | PopulationRegion::new(43.3551, 77.3205, 453_000.0, 175.0, AreaType::Urban, "Taraz"), |
| 1543 | PopulationRegion::new(48.0, 68.0, 6_700_000.0, 2_722_000.0, AreaType::Rural, "Rural Kazakhstan"), |
| 1544 | ], 2_724_900.0) |
| 1545 | }, |
| 1546 | |
| 1547 | Self::Kenya => { |
| 1548 | // Kenya: 54.0M population, 580,367 km² area, ~28% urban. |
| 1549 | CountryPopulationData::from_regions(vec![ |
| 1550 | PopulationRegion::new(-1.2921, 36.8219, 5_119_000.0, 696.0, AreaType::Urban, "Nairobi"), |
| 1551 | PopulationRegion::new(-4.0435, 39.6682, 1_341_000.0, 294.0, AreaType::Urban, "Mombasa"), |
| 1552 | PopulationRegion::new(0.5143, 35.2698, 608_000.0, 325.0, AreaType::Urban, "Nakuru"), |
| 1553 | PopulationRegion::new(-1.0502, 37.0804, 500_000.0, 123.0, AreaType::Urban, "Ruiru"), |
| 1554 | PopulationRegion::new(-0.0917, 34.7680, 475_000.0, 197.0, AreaType::Urban, "Kisumu"), |
| 1555 | PopulationRegion::new(0.0353, 37.0733, 336_000.0, 85.0, AreaType::Urban, "Eldoret"), |
| 1556 | PopulationRegion::new(-1.2837, 36.8269, 311_000.0, 75.0, AreaType::Urban, "Kikuyu"), |
| 1557 | PopulationRegion::new(-0.7174, 37.1520, 260_000.0, 65.0, AreaType::Urban, "Thika"), |
| 1558 | PopulationRegion::new(-1.0, 37.0, 37_000_000.0, 578_700.0, AreaType::Rural, "Rural Kenya"), |
| 1559 | ], 580_367.0) |
| 1560 | }, |
| 1561 | |
| 1562 | Self::Kiribati => { |
| 1563 | // Kiribati: 121k population, 811 km² area, ~55% urban. |
| 1564 | CountryPopulationData::from_regions(vec![ |
| 1565 | PopulationRegion::new(1.3559, 172.9847, 66_000.0, 40.0, AreaType::Urban, "South Tarawa"), |
| 1566 | PopulationRegion::new(1.9808, 157.3603, 3_200.0, 8.0, AreaType::Urban, "Kiritimati"), |
| 1567 | PopulationRegion::new(1.4167, 173.0167, 3_000.0, 7.0, AreaType::Urban, "Betio"), |
| 1568 | PopulationRegion::new(1.3333, 172.9833, 2_800.0, 6.0, AreaType::Urban, "Bairiki"), |
| 1569 | PopulationRegion::new(1.5, 173.0, 45_000.0, 750.0, AreaType::Rural, "Rural Kiribati"), |
| 1570 | ], 811.0) |
| 1571 | }, |
| 1572 | |
| 1573 | Self::Kosovo => { |
| 1574 | // Kosovo: 1.8M population, 10,887 km² area, ~43% urban. |
| 1575 | CountryPopulationData::from_regions(vec![ |
| 1576 | PopulationRegion::new(42.6629, 21.1655, 207_000.0, 83.0, AreaType::Urban, "Pristina"), |
| 1577 | PopulationRegion::new(42.3702, 20.4298, 97_000.0, 32.0, AreaType::Urban, "Prizren"), |
| 1578 | PopulationRegion::new(42.7441, 20.8333, 87_000.0, 35.0, AreaType::Urban, "Gjilan"), |
| 1579 | PopulationRegion::new(42.5, 21.0, 1_024_000.0, 10_700.0, AreaType::Rural, "Rural Kosovo"), |
| 1580 | ], 10_887.0) |
| 1581 | }, |
| 1582 | |
| 1583 | Self::Kuwait => { |
| 1584 | // Kuwait: 4.3M population, 17,818 km² area, ~100% urban. |
| 1585 | CountryPopulationData::from_regions(vec![ |
| 1586 | PopulationRegion::new(29.3759, 47.9774, 3_115_000.0, 200.0, AreaType::Urban, "Kuwait City Metro"), |
| 1587 | PopulationRegion::new(29.1458, 48.0975, 295_000.0, 37.0, AreaType::Urban, "Ahmadi"), |
| 1588 | PopulationRegion::new(29.3347, 47.6581, 273_000.0, 30.0, AreaType::Urban, "Farwaniya"), |
| 1589 | PopulationRegion::new(29.2, 47.8, 600_000.0, 17_551.0, AreaType::Rural, "Rural Kuwait"), |
| 1590 | ], 17_818.0) |
| 1591 | }, |
| 1592 | |
| 1593 | Self::Kyrgyzstan => { |
| 1594 | // Kyrgyzstan: 6.7M population, 199,951 km² area, ~37% urban. |
| 1595 | CountryPopulationData::from_regions(vec![ |
| 1596 | PopulationRegion::new(42.8746, 74.5698, 1_069_000.0, 127.0, AreaType::Urban, "Bishkek"), |
| 1597 | PopulationRegion::new(40.5140, 72.8161, 1_064_000.0, 29.0, AreaType::Urban, "Osh"), |
| 1598 | PopulationRegion::new(40.9333, 72.9833, 83_000.0, 18.0, AreaType::Urban, "Jalal-Abad"), |
| 1599 | PopulationRegion::new(41.0, 74.0, 4_200_000.0, 199_700.0, AreaType::Rural, "Rural Kyrgyzstan"), |
| 1600 | ], 199_951.0) |
| 1601 | }, |
| 1602 | |
| 1603 | Self::Laos => { |
| 1604 | // Laos: 7.4M population, 236,800 km² area, ~36% urban. |
| 1605 | CountryPopulationData::from_regions(vec![ |
| 1606 | PopulationRegion::new(17.9757, 102.6331, 683_000.0, 130.0, AreaType::Urban, "Vientiane"), |
| 1607 | PopulationRegion::new(15.1202, 105.7817, 141_000.0, 47.0, AreaType::Urban, "Savannakhet"), |
| 1608 | PopulationRegion::new(14.8817, 105.8076, 122_000.0, 28.0, AreaType::Urban, "Pakse"), |
| 1609 | PopulationRegion::new(18.0, 103.0, 4_700_000.0, 236_600.0, AreaType::Rural, "Rural Laos"), |
| 1610 | ], 236_800.0) |
| 1611 | }, |
| 1612 | |
| 1613 | Self::Latvia => { |
| 1614 | // Latvia: 1.9M population, 64,589 km² area, ~68% urban. |
| 1615 | CountryPopulationData::from_regions(vec![ |
| 1616 | PopulationRegion::new(56.9496, 24.1052, 633_000.0, 307.0, AreaType::Urban, "Riga"), |
| 1617 | PopulationRegion::new(55.8753, 26.5361, 79_000.0, 58.0, AreaType::Urban, "Daugavpils"), |
| 1618 | PopulationRegion::new(56.5000, 21.0167, 61_000.0, 60.0, AreaType::Urban, "Liepāja"), |
| 1619 | PopulationRegion::new(57.0, 24.0, 592_000.0, 64_100.0, AreaType::Rural, "Rural Latvia"), |
| 1620 | ], 64_589.0) |
| 1621 | }, |
| 1622 | |
| 1623 | Self::Lebanon => { |
| 1624 | // Lebanon: 6.8M population, 10,452 km² area, ~89% urban. |
| 1625 | CountryPopulationData::from_regions(vec![ |
| 1626 | PopulationRegion::new(33.8938, 35.5018, 2_424_000.0, 100.0, AreaType::Urban, "Beirut Metro"), |
| 1627 | PopulationRegion::new(33.5633, 35.3814, 530_000.0, 17.0, AreaType::Urban, "Tripoli"), |
| 1628 | PopulationRegion::new(33.3705, 35.3709, 237_000.0, 20.0, AreaType::Urban, "Sidon"), |
| 1629 | PopulationRegion::new(33.2773, 35.2033, 200_000.0, 16.0, AreaType::Urban, "Tyre"), |
| 1630 | PopulationRegion::new(33.8, 35.7, 750_000.0, 10_300.0, AreaType::Rural, "Rural Lebanon"), |
| 1631 | ], 10_452.0) |
| 1632 | }, |
| 1633 | |
| 1634 | Self::Lesotho => { |
| 1635 | // Lesotho: 2.2M population, 30,355 km² area, ~29% urban. |
| 1636 | CountryPopulationData::from_regions(vec![ |
| 1637 | PopulationRegion::new(-29.3100, 27.4800, 331_000.0, 138.0, AreaType::Urban, "Maseru"), |
| 1638 | PopulationRegion::new(-29.1500, 27.5500, 36_000.0, 20.0, AreaType::Urban, "Teyateyaneng"), |
| 1639 | PopulationRegion::new(-29.5, 28.0, 1_560_000.0, 30_200.0, AreaType::Rural, "Rural Lesotho"), |
| 1640 | ], 30_355.0) |
| 1641 | }, |
| 1642 | |
| 1643 | Self::Liberia => { |
| 1644 | // Liberia: 5.2M population, 111,369 km² area, ~52% urban. |
| 1645 | CountryPopulationData::from_regions(vec![ |
| 1646 | PopulationRegion::new(6.3106, -10.8048, 1_517_000.0, 194.0, AreaType::Urban, "Monrovia"), |
| 1647 | PopulationRegion::new(6.4160, -10.7969, 56_000.0, 12.0, AreaType::Urban, "Paynesville"), |
| 1648 | PopulationRegion::new(5.0119, -9.0383, 50_000.0, 10.0, AreaType::Urban, "Harper"), |
| 1649 | PopulationRegion::new(6.5, -9.5, 2_500_000.0, 111_100.0, AreaType::Rural, "Rural Liberia"), |
| 1650 | ], 111_369.0) |
| 1651 | }, |
| 1652 | |
| 1653 | Self::Libya => { |
| 1654 | // Libya: 6.9M population, 1,759,540 km² area, ~81% urban. |
| 1655 | CountryPopulationData::from_regions(vec![ |
| 1656 | PopulationRegion::new(32.8872, 13.1913, 1_165_000.0, 400.0, AreaType::Urban, "Tripoli"), |
| 1657 | PopulationRegion::new(32.1194, 20.0867, 807_000.0, 210.0, AreaType::Urban, "Benghazi"), |
| 1658 | PopulationRegion::new(32.7571, 12.9681, 287_000.0, 63.0, AreaType::Urban, "Misrata"), |
| 1659 | PopulationRegion::new(31.1992, 16.5887, 118_000.0, 55.0, AreaType::Urban, "Tarhuna"), |
| 1660 | PopulationRegion::new(27.0, 17.0, 1_300_000.0, 1_758_800.0, AreaType::Rural, "Rural Libya"), |
| 1661 | ], 1_759_540.0) |
| 1662 | }, |
| 1663 | |
| 1664 | Self::Liechtenstein => { |
| 1665 | // Liechtenstein: 39k population, 160 km² area, ~15% urban. |
| 1666 | CountryPopulationData::from_regions(vec![ |
| 1667 | PopulationRegion::new(47.1410, 9.5209, 6_000.0, 17.0, AreaType::Urban, "Vaduz"), |
| 1668 | PopulationRegion::new(47.1, 9.5, 33_000.0, 143.0, AreaType::Rural, "Rural Liechtenstein"), |
| 1669 | ], 160.0) |
| 1670 | }, |
| 1671 | |
| 1672 | Self::Lithuania => { |
| 1673 | // Lithuania: 2.8M population, 65,300 km² area, ~68% urban. |
| 1674 | CountryPopulationData::from_regions(vec![ |
| 1675 | PopulationRegion::new(54.6872, 25.2797, 580_000.0, 401.0, AreaType::Urban, "Vilnius"), |
| 1676 | PopulationRegion::new(54.9012, 23.9036, 290_000.0, 157.0, AreaType::Urban, "Kaunas"), |
| 1677 | PopulationRegion::new(55.7333, 21.1333, 149_000.0, 99.0, AreaType::Urban, "Klaipėda"), |
| 1678 | PopulationRegion::new(55.0, 24.0, 880_000.0, 64_600.0, AreaType::Rural, "Rural Lithuania"), |
| 1679 | ], 65_300.0) |
| 1680 | }, |
| 1681 | |
| 1682 | Self::Luxembourg => { |
| 1683 | // Luxembourg: 640k population, 2,586 km² area, ~91% urban. |
| 1684 | CountryPopulationData::from_regions(vec![ |
| 1685 | PopulationRegion::new(49.6117, 6.1319, 128_000.0, 52.0, AreaType::Urban, "Luxembourg City"), |
| 1686 | PopulationRegion::new(49.4804, 5.9860, 33_000.0, 15.0, AreaType::Urban, "Esch-sur-Alzette"), |
| 1687 | PopulationRegion::new(49.6806, 5.8139, 29_000.0, 10.0, AreaType::Urban, "Differdange"), |
| 1688 | PopulationRegion::new(49.7, 6.1, 60_000.0, 2_509.0, AreaType::Rural, "Rural Luxembourg"), |
| 1689 | ], 2_586.0) |
| 1690 | }, |
| 1691 | |
| 1692 | Self::Macedonia => { |
| 1693 | // North Macedonia: 2.1M population, 25,713 km² area, ~59% urban. |
| 1694 | CountryPopulationData::from_regions(vec![ |
| 1695 | PopulationRegion::new(41.9981, 21.4254, 544_000.0, 77.0, AreaType::Urban, "Skopje"), |
| 1696 | PopulationRegion::new(41.0297, 21.3292, 73_000.0, 30.0, AreaType::Urban, "Bitola"), |
| 1697 | PopulationRegion::new(41.7151, 22.1821, 66_000.0, 25.0, AreaType::Urban, "Kumanovo"), |
| 1698 | PopulationRegion::new(41.5, 21.5, 860_000.0, 25_600.0, AreaType::Rural, "Rural North Macedonia"), |
| 1699 | ], 25_713.0) |
| 1700 | }, |
| 1701 | |
| 1702 | Self::Madagascar => { |
| 1703 | // Madagascar: 28.4M population, 587,041 km² area, ~39% urban. |
| 1704 | CountryPopulationData::from_regions(vec![ |
| 1705 | PopulationRegion::new(-18.8792, 47.5079, 1_740_000.0, 93.0, AreaType::Urban, "Antananarivo"), |
| 1706 | PopulationRegion::new(-23.3599, 43.6713, 316_000.0, 80.0, AreaType::Urban, "Toliara"), |
| 1707 | PopulationRegion::new(-18.1443, 49.3958, 289_000.0, 45.0, AreaType::Urban, "Toamasina"), |
| 1708 | PopulationRegion::new(-19.8692, 47.0338, 244_000.0, 50.0, AreaType::Urban, "Antsirabe"), |
| 1709 | PopulationRegion::new(-20.0, 47.0, 17_400_000.0, 586_700.0, AreaType::Rural, "Rural Madagascar"), |
| 1710 | ], 587_041.0) |
| 1711 | }, |
| 1712 | |
| 1713 | Self::Malawi => { |
| 1714 | // Malawi: 19.6M population, 118,484 km² area, ~17% urban. |
| 1715 | CountryPopulationData::from_regions(vec![ |
| 1716 | PopulationRegion::new(-13.9626, 33.7741, 1_122_000.0, 158.0, AreaType::Urban, "Lilongwe"), |
| 1717 | PopulationRegion::new(-15.3875, 35.0085, 873_000.0, 184.0, AreaType::Urban, "Blantyre"), |
| 1718 | PopulationRegion::new(-11.4502, 34.0191, 221_000.0, 86.0, AreaType::Urban, "Mzuzu"), |
| 1719 | PopulationRegion::new(-14.0, 34.0, 16_400_000.0, 118_100.0, AreaType::Rural, "Rural Malawi"), |
| 1720 | ], 118_484.0) |
| 1721 | }, |
| 1722 | |
| 1723 | Self::Malaysia => { |
| 1724 | // Malaysia: 32.7M population, 330,803 km² area, ~78% urban. |
| 1725 | CountryPopulationData::from_regions(vec![ |
| 1726 | PopulationRegion::new(3.1390, 101.6869, 8_420_000.0, 2_793.0, AreaType::Urban, "Kuala Lumpur Metro"), |
| 1727 | PopulationRegion::new(5.4141, 100.3288, 2_513_000.0, 2_562.0, AreaType::Urban, "Penang Metro"), |
| 1728 | PopulationRegion::new(1.5533, 103.7594, 1_803_000.0, 1_064.0, AreaType::Urban, "Johor Bahru Metro"), |
| 1729 | PopulationRegion::new(3.0733, 101.5185, 800_000.0, 290.0, AreaType::Urban, "Ipoh"), |
| 1730 | PopulationRegion::new(6.1254, 102.2381, 354_000.0, 36.0, AreaType::Urban, "Kota Bharu"), |
| 1731 | PopulationRegion::new(1.4655, 110.4294, 740_000.0, 1_545.0, AreaType::Urban, "Kuching"), |
| 1732 | PopulationRegion::new(5.9804, 116.0735, 500_000.0, 366.0, AreaType::Urban, "Kota Kinabalu"), |
| 1733 | PopulationRegion::new(3.8077, 103.3260, 497_000.0, 33.0, AreaType::Urban, "Kuantan"), |
| 1734 | PopulationRegion::new(5.3593, 103.1368, 425_000.0, 28.0, AreaType::Urban, "Kota Terengganu"), |
| 1735 | PopulationRegion::new(4.0, 102.0, 5_300_000.0, 324_000.0, AreaType::Rural, "Rural Malaysia"), |
| 1736 | ], 330_803.0) |
| 1737 | }, |
| 1738 | |
| 1739 | Self::Maldives => { |
| 1740 | // Maldives: 541k population, 298 km² area, ~41% urban. |
| 1741 | CountryPopulationData::from_regions(vec![ |
| 1742 | PopulationRegion::new(4.1755, 73.5093, 211_000.0, 6.0, AreaType::Urban, "Malé"), |
| 1743 | PopulationRegion::new(4.1748, 73.5089, 41_000.0, 2.0, AreaType::Urban, "Hulhumalé"), |
| 1744 | PopulationRegion::new(-0.6286, 73.0949, 12_000.0, 1.0, AreaType::Urban, "Addu City"), |
| 1745 | PopulationRegion::new(5.0378, 73.0728, 8_000.0, 1.0, AreaType::Urban, "Kulhudhuffushi"), |
| 1746 | PopulationRegion::new(-0.5816, 73.0969, 7_000.0, 1.0, AreaType::Urban, "Hithadhoo"), |
| 1747 | PopulationRegion::new(4.2, 73.5, 252_000.0, 287.0, AreaType::Rural, "Rural Maldives"), |
| 1748 | ], 298.0) |
| 1749 | }, |
| 1750 | |
| 1751 | Self::Mali => { |
| 1752 | // Mali: 21.0M population, 1,240,192 km² area, ~44% urban. |
| 1753 | CountryPopulationData::from_regions(vec![ |
| 1754 | PopulationRegion::new(12.6392, -8.0029, 2_713_000.0, 267.0, AreaType::Urban, "Bamako"), |
| 1755 | PopulationRegion::new(12.6570, -5.9957, 375_000.0, 87.0, AreaType::Urban, "Sikasso"), |
| 1756 | PopulationRegion::new(13.8317, -4.8896, 283_000.0, 65.0, AreaType::Urban, "Segou"), |
| 1757 | PopulationRegion::new(16.7735, -3.0097, 237_000.0, 56.0, AreaType::Urban, "Timbuktu"), |
| 1758 | PopulationRegion::new(17.0, -4.0, 11_700_000.0, 1_239_700.0, AreaType::Rural, "Rural Mali"), |
| 1759 | ], 1_240_192.0) |
| 1760 | }, |
| 1761 | |
| 1762 | Self::Malta => { |
| 1763 | // Malta: 519k population, 316 km² area, ~95% urban. |
| 1764 | CountryPopulationData::from_regions(vec![ |
| 1765 | PopulationRegion::new(35.8989, 14.5146, 213_000.0, 17.0, AreaType::Urban, "Valletta Metro"), |
| 1766 | PopulationRegion::new(35.8857, 14.4024, 30_000.0, 5.0, AreaType::Urban, "Birkirkara"), |
| 1767 | PopulationRegion::new(35.9147, 14.4894, 25_000.0, 3.0, AreaType::Urban, "Qormi"), |
| 1768 | PopulationRegion::new(35.9, 14.5, 26_000.0, 291.0, AreaType::Rural, "Rural Malta"), |
| 1769 | ], 316.0) |
| 1770 | }, |
| 1771 | |
| 1772 | Self::MarshallIslands => { |
| 1773 | // Marshall Islands: 60k population, 181 km² area, ~78% urban. |
| 1774 | CountryPopulationData::from_regions(vec![ |
| 1775 | PopulationRegion::new(7.0897, 171.3803, 28_000.0, 10.0, AreaType::Urban, "Majuro"), |
| 1776 | PopulationRegion::new(8.7208, 167.7314, 12_000.0, 5.0, AreaType::Urban, "Ebeye"), |
| 1777 | PopulationRegion::new(7.1315, 171.3723, 3_000.0, 3.0, AreaType::Urban, "Delap-Uliga-Djarrit"), |
| 1778 | PopulationRegion::new(7.5, 171.0, 10_000.0, 163.0, AreaType::Rural, "Rural Marshall Islands"), |
| 1779 | ], 181.0) |
| 1780 | }, |
| 1781 | |
| 1782 | Self::Mauritania => { |
| 1783 | // Mauritania: 4.8M population, 1,030,700 km² area, ~55% urban. |
| 1784 | CountryPopulationData::from_regions(vec![ |
| 1785 | PopulationRegion::new(18.0858, -15.9785, 1_315_000.0, 1_000.0, AreaType::Urban, "Nouakchott"), |
| 1786 | PopulationRegion::new(18.1384, -15.8031, 158_000.0, 40.0, AreaType::Urban, "Nouadhibou"), |
| 1787 | PopulationRegion::new(16.1712, -13.8267, 66_000.0, 20.0, AreaType::Urban, "Rosso"), |
| 1788 | PopulationRegion::new(20.0, -12.0, 2_160_000.0, 1_029_600.0, AreaType::Rural, "Rural Mauritania"), |
| 1789 | ], 1_030_700.0) |
| 1790 | }, |
| 1791 | |
| 1792 | Self::Mauritius => { |
| 1793 | // Mauritius: 1.3M population, 2,040 km² area, ~41% urban. |
| 1794 | CountryPopulationData::from_regions(vec![ |
| 1795 | PopulationRegion::new(-20.1625, 57.4989, 147_000.0, 48.0, AreaType::Urban, "Port Louis"), |
| 1796 | PopulationRegion::new(-20.2611, 57.4781, 110_000.0, 25.0, AreaType::Urban, "Beau Bassin-Rose Hill"), |
| 1797 | PopulationRegion::new(-20.3203, 57.5156, 82_000.0, 20.0, AreaType::Urban, "Vacoas-Phoenix"), |
| 1798 | PopulationRegion::new(-20.2, 57.5, 765_000.0, 1_947.0, AreaType::Rural, "Rural Mauritius"), |
| 1799 | ], 2_040.0) |
| 1800 | }, |
| 1801 | |
| 1802 | Self::Mexico => { |
| 1803 | // Mexico: 128.9M population, 1,964,375 km² area, ~81% urban. |
| 1804 | CountryPopulationData::from_regions(vec![ |
| 1805 | PopulationRegion::new(19.4326, -99.1332, 21_919_000.0, 7_866.0, AreaType::Urban, "Mexico City Metro"), |
| 1806 | PopulationRegion::new(20.6597, -103.3496, 5_269_000.0, 2_735.0, AreaType::Urban, "Guadalajara Metro"), |
| 1807 | PopulationRegion::new(25.6866, -100.3161, 5_341_000.0, 7_431.0, AreaType::Urban, "Monterrey Metro"), |
| 1808 | PopulationRegion::new(19.0414, -98.2063, 3_251_000.0, 2_393.0, AreaType::Urban, "Puebla Metro"), |
| 1809 | PopulationRegion::new(21.0251, -101.2545, 2_058_000.0, 2_042.0, AreaType::Urban, "León Metro"), |
| 1810 | PopulationRegion::new(32.5149, -117.0382, 2_157_000.0, 1_392.0, AreaType::Urban, "Tijuana"), |
| 1811 | PopulationRegion::new(31.6904, -106.4245, 1_513_000.0, 4_853.0, AreaType::Urban, "Ciudad Juárez"), |
| 1812 | PopulationRegion::new(19.1738, -96.1342, 1_046_000.0, 475.0, AreaType::Urban, "Veracruz"), |
| 1813 | PopulationRegion::new(20.5880, -100.3899, 1_385_000.0, 1_165.0, AreaType::Urban, "Querétaro"), |
| 1814 | PopulationRegion::new(21.0190, -89.6237, 1_316_000.0, 348.0, AreaType::Urban, "Mérida"), |
| 1815 | PopulationRegion::new(20.6953, -101.9539, 1_266_000.0, 324.0, AreaType::Urban, "Aguascalientes"), |
| 1816 | PopulationRegion::new(23.0, -102.0, 19_900_000.0, 1_940_000.0, AreaType::Rural, "Rural Mexico"), |
| 1817 | ], 1_964_375.0) |
| 1818 | }, |
| 1819 | |
| 1820 | Self::Moldova => { |
| 1821 | // Moldova: 2.6M population, 33,846 km² area, ~43% urban. |
| 1822 | CountryPopulationData::from_regions(vec![ |
| 1823 | PopulationRegion::new(47.0105, 28.8638, 695_000.0, 120.0, AreaType::Urban, "Chișinău"), |
| 1824 | PopulationRegion::new(46.8419, 29.6139, 90_000.0, 25.0, AreaType::Urban, "Tiraspol"), |
| 1825 | PopulationRegion::new(47.7571, 27.9237, 81_000.0, 20.0, AreaType::Urban, "Bălți"), |
| 1826 | PopulationRegion::new(47.5, 28.5, 1_490_000.0, 33_600.0, AreaType::Rural, "Rural Moldova"), |
| 1827 | ], 33_846.0) |
| 1828 | }, |
| 1829 | |
| 1830 | Self::Monaco => { |
| 1831 | // Monaco: 39k population, 2 km² area, ~100% urban. |
| 1832 | CountryPopulationData::from_regions(vec![ |
| 1833 | PopulationRegion::new(43.7384, 7.4246, 39_000.0, 2.0, AreaType::Urban, "Monaco"), |
| 1834 | ], 2.0) |
| 1835 | }, |
| 1836 | |
| 1837 | Self::Mongolia => { |
| 1838 | // Mongolia: 3.4M population, 1,564,110 km² area, ~69% urban. |
| 1839 | CountryPopulationData::from_regions(vec![ |
| 1840 | PopulationRegion::new(47.8864, 106.9057, 1_600_000.0, 4_704.0, AreaType::Urban, "Ulaanbaatar"), |
| 1841 | PopulationRegion::new(48.9674, 89.5824, 89_000.0, 50.0, AreaType::Urban, "Ölgii"), |
| 1842 | PopulationRegion::new(49.6333, 100.1500, 87_000.0, 45.0, AreaType::Urban, "Erdenet"), |
| 1843 | PopulationRegion::new(48.0, 103.0, 1_050_000.0, 1_559_300.0, AreaType::Rural, "Rural Mongolia"), |
| 1844 | ], 1_564_110.0) |
| 1845 | }, |
| 1846 | |
| 1847 | Self::Montenegro => { |
| 1848 | // Montenegro: 621k population, 13,812 km² area, ~68% urban. |
| 1849 | CountryPopulationData::from_regions(vec![ |
| 1850 | PopulationRegion::new(42.4304, 19.2594, 188_000.0, 1_441.0, AreaType::Urban, "Podgorica"), |
| 1851 | PopulationRegion::new(43.1238, 19.0975, 74_000.0, 24.0, AreaType::Urban, "Nikšić"), |
| 1852 | PopulationRegion::new(42.7731, 18.9446, 20_000.0, 12.0, AreaType::Urban, "Herceg Novi"), |
| 1853 | PopulationRegion::new(42.5, 19.0, 199_000.0, 12_300.0, AreaType::Rural, "Rural Montenegro"), |
| 1854 | ], 13_812.0) |
| 1855 | }, |
| 1856 | |
| 1857 | Self::Morocco => { |
| 1858 | // Morocco: 37.5M population, 446,550 km² area, ~64% urban. |
| 1859 | CountryPopulationData::from_regions(vec![ |
| 1860 | PopulationRegion::new(33.5731, -7.5898, 4_079_000.0, 230.0, AreaType::Urban, "Casablanca"), |
| 1861 | PopulationRegion::new(34.0209, -6.8416, 1_273_000.0, 118.0, AreaType::Urban, "Rabat"), |
| 1862 | PopulationRegion::new(31.6295, -7.9811, 1_137_000.0, 230.0, AreaType::Urban, "Marrakesh"), |
| 1863 | PopulationRegion::new(35.7595, -5.8340, 1_034_000.0, 119.0, AreaType::Urban, "Tangier"), |
| 1864 | PopulationRegion::new(34.0333, -5.0000, 966_000.0, 424.0, AreaType::Urban, "Fez"), |
| 1865 | PopulationRegion::new(33.5883, -7.6114, 893_000.0, 220.0, AreaType::Urban, "Salé"), |
| 1866 | PopulationRegion::new(32.0, -6.0, 13_500_000.0, 445_400.0, AreaType::Rural, "Rural Morocco"), |
| 1867 | ], 446_550.0) |
| 1868 | }, |
| 1869 | |
| 1870 | Self::Mozambique => { |
| 1871 | // Mozambique: 32.2M population, 801,590 km² area, ~37% urban. |
| 1872 | CountryPopulationData::from_regions(vec![ |
| 1873 | PopulationRegion::new(-25.9692, 32.5732, 1_136_000.0, 347.0, AreaType::Urban, "Maputo"), |
| 1874 | PopulationRegion::new(-25.9167, 32.5667, 1_126_000.0, 300.0, AreaType::Urban, "Matola"), |
| 1875 | PopulationRegion::new(-19.8436, 34.8389, 616_000.0, 230.0, AreaType::Urban, "Beira"), |
| 1876 | PopulationRegion::new(-15.1167, 39.2667, 351_000.0, 66.0, AreaType::Urban, "Nampula"), |
| 1877 | PopulationRegion::new(-18.0, 35.0, 20_300_000.0, 800_600.0, AreaType::Rural, "Rural Mozambique"), |
| 1878 | ], 801_590.0) |
| 1879 | }, |
| 1880 | |
| 1881 | Self::Myanmar => { |
| 1882 | // Myanmar: 54.8M population, 676,578 km² area, ~31% urban. |
| 1883 | CountryPopulationData::from_regions(vec![ |
| 1884 | PopulationRegion::new(16.8661, 96.1951, 5_610_000.0, 610.0, AreaType::Urban, "Yangon"), |
| 1885 | PopulationRegion::new(21.9588, 96.0891, 1_440_000.0, 156.0, AreaType::Urban, "Mandalay"), |
| 1886 | PopulationRegion::new(19.7463, 96.1609, 491_000.0, 125.0, AreaType::Urban, "Naypyidaw"), |
| 1887 | PopulationRegion::new(16.4833, 97.6167, 181_000.0, 30.0, AreaType::Urban, "Mawlamyine"), |
| 1888 | PopulationRegion::new(21.0, 96.0, 37_800_000.0, 675_600.0, AreaType::Rural, "Rural Myanmar"), |
| 1889 | ], 676_578.0) |
| 1890 | }, |
| 1891 | |
| 1892 | Self::Namibia => { |
| 1893 | // Namibia: 2.5M population, 825,615 km² area, ~52% urban. |
| 1894 | CountryPopulationData::from_regions(vec![ |
| 1895 | PopulationRegion::new(-22.5594, 17.0832, 431_000.0, 5_133.0, AreaType::Urban, "Windhoek"), |
| 1896 | PopulationRegion::new(-22.6700, 14.5269, 107_000.0, 29.0, AreaType::Urban, "Swakopmund"), |
| 1897 | PopulationRegion::new(-22.9576, 14.5046, 107_000.0, 29.0, AreaType::Urban, "Walvis Bay"), |
| 1898 | PopulationRegion::new(-22.0, 17.0, 1_200_000.0, 820_400.0, AreaType::Rural, "Rural Namibia"), |
| 1899 | ], 825_615.0) |
| 1900 | }, |
| 1901 | |
| 1902 | Self::Nauru => { |
| 1903 | // Nauru: 11k population, 21 km² area, ~100% urban. |
| 1904 | CountryPopulationData::from_regions(vec![ |
| 1905 | PopulationRegion::new(-0.5477, 166.9209, 11_000.0, 21.0, AreaType::Urban, "Yaren District"), |
| 1906 | ], 21.0) |
| 1907 | }, |
| 1908 | |
| 1909 | Self::Nepal => { |
| 1910 | // Nepal: 30.2M population, 147,516 km² area, ~21% urban. |
| 1911 | CountryPopulationData::from_regions(vec![ |
| 1912 | PopulationRegion::new(27.7172, 85.3240, 1_330_000.0, 50.0, AreaType::Urban, "Kathmandu"), |
| 1913 | PopulationRegion::new(26.4525, 87.2718, 196_000.0, 30.0, AreaType::Urban, "Biratnagar"), |
| 1914 | PopulationRegion::new(28.2380, 83.9956, 384_000.0, 70.0, AreaType::Urban, "Pokhara"), |
| 1915 | PopulationRegion::new(27.7, 85.3, 23_900_000.0, 147_300.0, AreaType::Rural, "Rural Nepal"), |
| 1916 | ], 147_516.0) |
| 1917 | }, |
| 1918 | |
| 1919 | Self::Netherlands => { |
| 1920 | // Netherlands: 17.5M population, 41,850 km² area, ~92% urban. |
| 1921 | CountryPopulationData::from_regions(vec![ |
| 1922 | PopulationRegion::new(52.3676, 4.9041, 2_480_000.0, 2_580.0, AreaType::Urban, "Amsterdam Metro"), |
| 1923 | PopulationRegion::new(51.9244, 4.4777, 1_024_000.0, 324.0, AreaType::Urban, "Rotterdam"), |
| 1924 | PopulationRegion::new(52.0907, 5.1214, 906_000.0, 1_449.0, AreaType::Urban, "Utrecht"), |
| 1925 | PopulationRegion::new(52.1601, 4.4970, 1_404_000.0, 1_024.0, AreaType::Urban, "The Hague Metro"), |
| 1926 | PopulationRegion::new(51.4416, 5.4697, 786_000.0, 332.0, AreaType::Urban, "Eindhoven Metro"), |
| 1927 | PopulationRegion::new(51.5719, 4.7683, 218_000.0, 129.0, AreaType::Urban, "Breda"), |
| 1928 | PopulationRegion::new(53.2194, 6.5665, 233_000.0, 83.0, AreaType::Urban, "Groningen"), |
| 1929 | PopulationRegion::new(52.0, 5.0, 1_400_000.0, 35_900.0, AreaType::Rural, "Rural Netherlands"), |
| 1930 | ], 41_850.0) |
| 1931 | }, |
| 1932 | |
| 1933 | Self::NewZealand => { |
| 1934 | // New Zealand: 5.1M population, 268,021 km² area, ~87% urban. |
| 1935 | CountryPopulationData::from_regions(vec![ |
| 1936 | PopulationRegion::new(-36.8485, 174.7633, 1_658_000.0, 5_600.0, AreaType::Urban, "Auckland Metro"), |
| 1937 | PopulationRegion::new(-41.2865, 174.7762, 543_000.0, 1_390.0, AreaType::Urban, "Wellington Metro"), |
| 1938 | PopulationRegion::new(-43.5321, 172.6362, 521_000.0, 1_426.0, AreaType::Urban, "Christchurch Metro"), |
| 1939 | PopulationRegion::new(-37.7870, 175.2793, 242_000.0, 1_115.0, AreaType::Urban, "Hamilton"), |
| 1940 | PopulationRegion::new(-38.1368, 176.2497, 151_000.0, 168.0, AreaType::Urban, "Tauranga"), |
| 1941 | PopulationRegion::new(-45.8788, 170.5028, 134_000.0, 256.0, AreaType::Urban, "Dunedin"), |
| 1942 | PopulationRegion::new(-39.0556, 174.0752, 83_000.0, 2_062.0, AreaType::Urban, "New Plymouth"), |
| 1943 | PopulationRegion::new(-39.4928, 176.9120, 81_000.0, 156.0, AreaType::Urban, "Napier-Hastings"), |
| 1944 | PopulationRegion::new(-38.6857, 178.0236, 79_000.0, 94.0, AreaType::Urban, "Gisborne"), |
| 1945 | PopulationRegion::new(-46.4132, 168.3538, 56_000.0, 3_314.0, AreaType::Urban, "Invercargill"), |
| 1946 | PopulationRegion::new(-42.0, 172.0, 350_000.0, 258_600.0, AreaType::Rural, "Rural New Zealand"), |
| 1947 | ], 268_021.0) |
| 1948 | }, |
| 1949 | |
| 1950 | Self::Nicaragua => { |
| 1951 | // Nicaragua: 6.7M population, 130,373 km² area, ~59% urban. |
| 1952 | CountryPopulationData::from_regions(vec![ |
| 1953 | PopulationRegion::new(12.1364, -86.2514, 1_080_000.0, 544.0, AreaType::Urban, "Managua"), |
| 1954 | PopulationRegion::new(12.4340, -86.8779, 203_000.0, 44.0, AreaType::Urban, "León"), |
| 1955 | PopulationRegion::new(11.9727, -86.0948, 161_000.0, 38.0, AreaType::Urban, "Masaya"), |
| 1956 | PopulationRegion::new(12.0, -85.0, 2_750_000.0, 129_700.0, AreaType::Rural, "Rural Nicaragua"), |
| 1957 | ], 130_373.0) |
| 1958 | }, |
| 1959 | |
| 1960 | Self::Niger => { |
| 1961 | // Niger: 25.1M population, 1,267,000 km² area, ~17% urban. |
| 1962 | CountryPopulationData::from_regions(vec![ |
| 1963 | PopulationRegion::new(13.5137, 2.1098, 1_336_000.0, 255.0, AreaType::Urban, "Niamey"), |
| 1964 | PopulationRegion::new(13.8001, 8.9816, 123_000.0, 30.0, AreaType::Urban, "Zinder"), |
| 1965 | PopulationRegion::new(13.0499, 7.6088, 118_000.0, 25.0, AreaType::Urban, "Maradi"), |
| 1966 | PopulationRegion::new(17.0, 8.0, 21_000_000.0, 1_266_700.0, AreaType::Rural, "Rural Niger"), |
| 1967 | ], 1_267_000.0) |
| 1968 | }, |
| 1969 | |
| 1970 | Self::Nigeria => { |
| 1971 | // Nigeria: 213.4M population, 923,768 km² area, ~52% urban. |
| 1972 | CountryPopulationData::from_regions(vec![ |
| 1973 | PopulationRegion::new(6.5244, 3.3792, 15_946_000.0, 1_171.0, AreaType::Urban, "Lagos"), |
| 1974 | PopulationRegion::new(12.0022, 8.5919, 3_840_000.0, 476.0, AreaType::Urban, "Kano"), |
| 1975 | PopulationRegion::new(7.3775, 3.9069, 3_649_000.0, 1_204.0, AreaType::Urban, "Ibadan"), |
| 1976 | PopulationRegion::new(9.0765, 7.3986, 3_278_000.0, 1_069.0, AreaType::Urban, "Abuja"), |
| 1977 | PopulationRegion::new(6.3350, 5.6037, 1_874_000.0, 369.0, AreaType::Urban, "Benin City"), |
| 1978 | PopulationRegion::new(4.8156, 7.0498, 1_865_000.0, 360.0, AreaType::Urban, "Port Harcourt"), |
| 1979 | PopulationRegion::new(11.8333, 13.1500, 1_336_000.0, 194.0, AreaType::Urban, "Maiduguri"), |
| 1980 | PopulationRegion::new(6.1704, 6.7410, 1_049_000.0, 228.0, AreaType::Urban, "Warri"), |
| 1981 | PopulationRegion::new(11.0992, 7.6508, 950_000.0, 216.0, AreaType::Urban, "Kaduna"), |
| 1982 | PopulationRegion::new(5.1053, 7.3646, 918_000.0, 103.0, AreaType::Urban, "Aba"), |
| 1983 | PopulationRegion::new(10.0, 8.0, 99_000_000.0, 920_000.0, AreaType::Rural, "Rural Nigeria"), |
| 1984 | ], 923_768.0) |
| 1985 | }, |
| 1986 | |
| 1987 | Self::NorthKorea => { |
| 1988 | // North Korea: 25.9M population, 120,540 km² area, ~62% urban. |
| 1989 | CountryPopulationData::from_regions(vec![ |
| 1990 | PopulationRegion::new(39.0194, 125.7381, 3_255_000.0, 2_113.0, AreaType::Urban, "Pyongyang"), |
| 1991 | PopulationRegion::new(41.8010, 129.7857, 667_000.0, 155.0, AreaType::Urban, "Chongjin"), |
| 1992 | PopulationRegion::new(38.5072, 125.6897, 555_000.0, 132.0, AreaType::Urban, "Nampo"), |
| 1993 | PopulationRegion::new(39.9181, 127.5364, 530_000.0, 110.0, AreaType::Urban, "Hamhung"), |
| 1994 | PopulationRegion::new(40.0, 127.0, 9_800_000.0, 118_000.0, AreaType::Rural, "Rural North Korea"), |
| 1995 | ], 120_540.0) |
| 1996 | }, |
| 1997 | |
| 1998 | Self::Norway => { |
| 1999 | // Norway: 5.4M population, 323,802 km² area, ~83% urban. |
| 2000 | CountryPopulationData::from_regions(vec![ |
| 2001 | PopulationRegion::new(59.9139, 10.7522, 1_071_000.0, 454.0, AreaType::Urban, "Oslo Metro"), |
| 2002 | PopulationRegion::new(60.3913, 5.3221, 420_000.0, 445.0, AreaType::Urban, "Bergen Metro"), |
| 2003 | PopulationRegion::new(63.4305, 10.3951, 280_000.0, 321.0, AreaType::Urban, "Trondheim Metro"), |
| 2004 | PopulationRegion::new(58.9700, 5.7331, 225_000.0, 71.0, AreaType::Urban, "Stavanger Metro"), |
| 2005 | PopulationRegion::new(68.4384, 17.4272, 86_000.0, 103.0, AreaType::Urban, "Bodø"), |
| 2006 | PopulationRegion::new(67.2803, 14.4049, 83_000.0, 98.0, AreaType::Urban, "Narvik"), |
| 2007 | PopulationRegion::new(69.6492, 18.9553, 77_000.0, 2_521.0, AreaType::Urban, "Tromsø"), |
| 2008 | PopulationRegion::new(62.0, 9.0, 670_000.0, 322_500.0, AreaType::Rural, "Rural Norway"), |
| 2009 | ], 323_802.0) |
| 2010 | }, |
| 2011 | |
| 2012 | Self::Oman => { |
| 2013 | // Oman: 5.2M population, 309,500 km² area, ~87% urban. |
| 2014 | CountryPopulationData::from_regions(vec![ |
| 2015 | PopulationRegion::new(23.5880, 58.3829, 1_590_000.0, 3_500.0, AreaType::Urban, "Muscat Metro"), |
| 2016 | PopulationRegion::new(17.0187, 54.0924, 318_000.0, 77.0, AreaType::Urban, "Salalah"), |
| 2017 | PopulationRegion::new(23.6739, 58.1893, 267_000.0, 55.0, AreaType::Urban, "Seeb"), |
| 2018 | PopulationRegion::new(22.9333, 57.5333, 209_000.0, 45.0, AreaType::Urban, "Nizwa"), |
| 2019 | PopulationRegion::new(21.0, 57.0, 680_000.0, 305_800.0, AreaType::Rural, "Rural Oman"), |
| 2020 | ], 309_500.0) |
| 2021 | }, |
| 2022 | |
| 2023 | Self::Pakistan => { |
| 2024 | // Pakistan: 225.2M population, 881,913 km² area, ~37% urban. |
| 2025 | CountryPopulationData::from_regions(vec![ |
| 2026 | PopulationRegion::new(24.8607, 67.0011, 14_916_000.0, 3_780.0, AreaType::Urban, "Karachi"), |
| 2027 | PopulationRegion::new(31.5497, 74.3436, 11_738_000.0, 1_772.0, AreaType::Urban, "Lahore"), |
| 2028 | PopulationRegion::new(33.6844, 73.0479, 2_301_000.0, 906.0, AreaType::Urban, "Islamabad-Rawalpindi"), |
| 2029 | PopulationRegion::new(30.1984, 71.4687, 2_065_000.0, 348.0, AreaType::Urban, "Multan"), |
| 2030 | PopulationRegion::new(31.4180, 73.0790, 1_977_000.0, 370.0, AreaType::Urban, "Faisalabad"), |
| 2031 | PopulationRegion::new(25.3960, 68.3578, 1_677_000.0, 168.0, AreaType::Urban, "Hyderabad"), |
| 2032 | PopulationRegion::new(34.0150, 71.5805, 1_594_000.0, 92.0, AreaType::Urban, "Peshawar"), |
| 2033 | PopulationRegion::new(32.0740, 72.6861, 1_388_000.0, 122.0, AreaType::Urban, "Jhang"), |
| 2034 | PopulationRegion::new(29.3956, 71.6836, 1_217_000.0, 108.0, AreaType::Urban, "Bahawalpur"), |
| 2035 | PopulationRegion::new(32.1877, 74.1945, 1_197_000.0, 103.0, AreaType::Urban, "Gujranwala"), |
| 2036 | PopulationRegion::new(31.4504, 74.5366, 1_165_000.0, 97.0, AreaType::Urban, "Gujrat"), |
| 2037 | PopulationRegion::new(30.8138, 73.4534, 1_027_000.0, 83.0, AreaType::Urban, "Sahiwal"), |
| 2038 | PopulationRegion::new(30.0, 70.0, 130_000_000.0, 876_500.0, AreaType::Rural, "Rural Pakistan"), |
| 2039 | ], 881_913.0) |
| 2040 | }, |
| 2041 | |
| 2042 | Self::Palau => { |
| 2043 | // Palau: 18k population, 459 km² area, ~81% urban. |
| 2044 | CountryPopulationData::from_regions(vec![ |
| 2045 | PopulationRegion::new(7.3419, 134.4794, 11_000.0, 18.0, AreaType::Urban, "Koror"), |
| 2046 | PopulationRegion::new(7.5036, 134.6292, 2_500.0, 6.0, AreaType::Urban, "Airai"), |
| 2047 | PopulationRegion::new(7.5, 134.5, 500.0, 435.0, AreaType::Rural, "Rural Palau"), |
| 2048 | ], 459.0) |
| 2049 | }, |
| 2050 | |
| 2051 | Self::Panama => { |
| 2052 | // Panama: 4.4M population, 75,417 km² area, ~68% urban. |
| 2053 | CountryPopulationData::from_regions(vec![ |
| 2054 | PopulationRegion::new(8.9824, -79.5199, 1_938_000.0, 2_561.0, AreaType::Urban, "Panama City Metro"), |
| 2055 | PopulationRegion::new(8.4333, -82.4333, 139_000.0, 30.0, AreaType::Urban, "David"), |
| 2056 | PopulationRegion::new(8.0975, -80.9826, 48_000.0, 12.0, AreaType::Urban, "Santiago"), |
| 2057 | PopulationRegion::new(9.0, -79.5, 1_410_000.0, 72_800.0, AreaType::Rural, "Rural Panama"), |
| 2058 | ], 75_417.0) |
| 2059 | }, |
| 2060 | |
| 2061 | Self::PapuaNewGuinea => { |
| 2062 | // Papua New Guinea: 9.1M population, 462,840 km² area, ~13% urban. |
| 2063 | CountryPopulationData::from_regions(vec![ |
| 2064 | PopulationRegion::new(-9.4438, 147.1802, 383_000.0, 240.0, AreaType::Urban, "Port Moresby"), |
| 2065 | PopulationRegion::new(-6.7333, 147.0000, 77_000.0, 50.0, AreaType::Urban, "Lae"), |
| 2066 | PopulationRegion::new(-5.5600, 150.2600, 39_000.0, 20.0, AreaType::Urban, "Arawa"), |
| 2067 | PopulationRegion::new(-6.0, 147.0, 7_900_000.0, 462_500.0, AreaType::Rural, "Rural PNG"), |
| 2068 | ], 462_840.0) |
| 2069 | }, |
| 2070 | |
| 2071 | Self::Paraguay => { |
| 2072 | // Paraguay: 7.2M population, 406,752 km² area, ~62% urban. |
| 2073 | CountryPopulationData::from_regions(vec![ |
| 2074 | PopulationRegion::new(-25.2637, -57.5759, 3_452_000.0, 2_582.0, AreaType::Urban, "Asunción Metro"), |
| 2075 | PopulationRegion::new(-25.5084, -54.6111, 301_000.0, 67.0, AreaType::Urban, "Ciudad del Este"), |
| 2076 | PopulationRegion::new(-27.3334, -55.8667, 91_000.0, 25.0, AreaType::Urban, "Encarnación"), |
| 2077 | PopulationRegion::new(-23.0, -57.0, 2_700_000.0, 404_100.0, AreaType::Rural, "Rural Paraguay"), |
| 2078 | ], 406_752.0) |
| 2079 | }, |
| 2080 | |
| 2081 | Self::Peru => { |
| 2082 | // Peru: 33.4M population, 1,285,216 km² area, ~79% urban. |
| 2083 | CountryPopulationData::from_regions(vec![ |
| 2084 | PopulationRegion::new(-12.0464, -77.0428, 11_046_000.0, 2_672.0, AreaType::Urban, "Lima Metro"), |
| 2085 | PopulationRegion::new(-16.4090, -71.5375, 1_129_000.0, 2_923.0, AreaType::Urban, "Arequipa"), |
| 2086 | PopulationRegion::new(-8.1116, -79.0288, 975_000.0, 692.0, AreaType::Urban, "Trujillo"), |
| 2087 | PopulationRegion::new(-6.7701, -79.8223, 763_000.0, 192.0, AreaType::Urban, "Chiclayo"), |
| 2088 | PopulationRegion::new(-12.0266, -75.2041, 563_000.0, 494.0, AreaType::Urban, "Huancayo"), |
| 2089 | PopulationRegion::new(-3.7437, -73.2516, 498_000.0, 368.0, AreaType::Urban, "Iquitos"), |
| 2090 | PopulationRegion::new(-5.1783, -80.6466, 484_000.0, 277.0, AreaType::Urban, "Piura"), |
| 2091 | PopulationRegion::new(-13.5226, -71.9673, 480_000.0, 385.0, AreaType::Urban, "Cusco"), |
| 2092 | PopulationRegion::new(-10.0, -75.0, 5_500_000.0, 1_280_000.0, AreaType::Rural, "Rural Peru"), |
| 2093 | ], 1_285_216.0) |
| 2094 | }, |
| 2095 | |
| 2096 | Self::Philippines => { |
| 2097 | // Philippines: 111.0M population, 300,000 km² area, ~48% urban. |
| 2098 | CountryPopulationData::from_regions(vec![ |
| 2099 | PopulationRegion::new(14.5995, 120.9842, 13_923_000.0, 619.0, AreaType::Urban, "Manila Metro"), |
| 2100 | PopulationRegion::new(7.0731, 125.6128, 1_776_000.0, 2_444.0, AreaType::Urban, "Davao"), |
| 2101 | PopulationRegion::new(10.3157, 123.8854, 1_013_000.0, 315.0, AreaType::Urban, "Cebu City"), |
| 2102 | PopulationRegion::new(6.9214, 122.0790, 457_000.0, 133.0, AreaType::Urban, "Zamboanga City"), |
| 2103 | PopulationRegion::new(7.8010, 123.4132, 439_000.0, 40.0, AreaType::Urban, "Cagayan de Oro"), |
| 2104 | PopulationRegion::new(10.6969, 122.5605, 433_000.0, 124.0, AreaType::Urban, "Bacolod"), |
| 2105 | PopulationRegion::new(8.4822, 124.6472, 354_000.0, 163.0, AreaType::Urban, "Butuan"), |
| 2106 | PopulationRegion::new(14.5547, 121.0244, 354_000.0, 103.0, AreaType::Urban, "Caloocan"), |
| 2107 | PopulationRegion::new(10.7202, 122.5621, 511_000.0, 279.0, AreaType::Urban, "Iloilo City"), |
| 2108 | PopulationRegion::new(11.2472, 125.0006, 188_000.0, 197.0, AreaType::Urban, "Tacloban"), |
| 2109 | PopulationRegion::new(13.1391, 123.7358, 182_000.0, 107.0, AreaType::Urban, "Legazpi"), |
| 2110 | PopulationRegion::new(9.6500, 123.8500, 172_000.0, 80.0, AreaType::Urban, "Tagbilaran"), |
| 2111 | PopulationRegion::new(16.4023, 120.5960, 170_000.0, 77.0, AreaType::Urban, "Baguio"), |
| 2112 | PopulationRegion::new(12.0, 122.0, 55_200_000.0, 296_400.0, AreaType::Rural, "Rural Philippines"), |
| 2113 | ], 300_000.0) |
| 2114 | }, |
| 2115 | |
| 2116 | Self::Poland => { |
| 2117 | // Poland: 37.8M population, 312,696 km² area, ~60% urban. |
| 2118 | CountryPopulationData::from_regions(vec![ |
| 2119 | PopulationRegion::new(52.2297, 21.0122, 3_153_000.0, 517.0, AreaType::Urban, "Warsaw Metro"), |
| 2120 | PopulationRegion::new(50.0647, 19.9450, 1_783_000.0, 327.0, AreaType::Urban, "Kraków Metro"), |
| 2121 | PopulationRegion::new(51.7592, 19.4560, 1_095_000.0, 293.0, AreaType::Urban, "Łódź Metro"), |
| 2122 | PopulationRegion::new(51.1079, 17.0385, 1_080_000.0, 293.0, AreaType::Urban, "Wrocław Metro"), |
| 2123 | PopulationRegion::new(52.4064, 16.9252, 1_005_000.0, 262.0, AreaType::Urban, "Poznań Metro"), |
| 2124 | PopulationRegion::new(50.2649, 19.0238, 993_000.0, 164.0, AreaType::Urban, "Katowice Metro"), |
| 2125 | PopulationRegion::new(54.3520, 18.6466, 972_000.0, 416.0, AreaType::Urban, "Gdańsk Metro"), |
| 2126 | PopulationRegion::new(52.0, 19.0, 15_100_000.0, 310_400.0, AreaType::Rural, "Rural Poland"), |
| 2127 | ], 312_696.0) |
| 2128 | }, |
| 2129 | |
| 2130 | Self::Portugal => { |
| 2131 | // Portugal: 10.3M population, 92,090 km² area, ~66% urban. |
| 2132 | CountryPopulationData::from_regions(vec![ |
| 2133 | PopulationRegion::new(38.7223, -9.1393, 2_957_000.0, 2_962.0, AreaType::Urban, "Lisbon Metro"), |
| 2134 | PopulationRegion::new(41.1579, -8.6291, 2_489_000.0, 2_395.0, AreaType::Urban, "Porto Metro"), |
| 2135 | PopulationRegion::new(40.2033, -8.4103, 235_000.0, 319.0, AreaType::Urban, "Coimbra"), |
| 2136 | PopulationRegion::new(41.5454, -8.4265, 181_000.0, 183.0, AreaType::Urban, "Braga"), |
| 2137 | PopulationRegion::new(37.0194, -7.9304, 150_000.0, 607.0, AreaType::Urban, "Faro"), |
| 2138 | PopulationRegion::new(32.6333, -16.9000, 112_000.0, 828.0, AreaType::Urban, "Funchal"), |
| 2139 | PopulationRegion::new(38.5667, -7.9000, 110_000.0, 314.0, AreaType::Urban, "Évora"), |
| 2140 | PopulationRegion::new(41.5333, -8.6167, 101_000.0, 183.0, AreaType::Urban, "Viana do Castelo"), |
| 2141 | PopulationRegion::new(40.0, -8.0, 3_100_000.0, 86_200.0, AreaType::Rural, "Rural Portugal"), |
| 2142 | ], 92_090.0) |
| 2143 | }, |
| 2144 | |
| 2145 | Self::Qatar => { |
| 2146 | // Qatar: 2.8M population, 11,586 km² area, ~99% urban. |
| 2147 | CountryPopulationData::from_regions(vec![ |
| 2148 | PopulationRegion::new(25.2854, 51.5310, 1_514_000.0, 132.0, AreaType::Urban, "Doha"), |
| 2149 | PopulationRegion::new(25.3548, 51.2496, 765_000.0, 90.0, AreaType::Urban, "Al Rayyan"), |
| 2150 | PopulationRegion::new(25.3862, 51.6017, 121_000.0, 25.0, AreaType::Urban, "Umm Salal"), |
| 2151 | PopulationRegion::new(25.4106, 51.4930, 117_000.0, 20.0, AreaType::Urban, "Al Daayen"), |
| 2152 | PopulationRegion::new(25.3, 51.2, 30_000.0, 11_300.0, AreaType::Rural, "Rural Qatar"), |
| 2153 | ], 11_586.0) |
| 2154 | }, |
| 2155 | |
| 2156 | Self::RepublicOfTheCongo => { |
| 2157 | // Republic of the Congo: 5.7M population, 342,000 km² area, ~68% urban. |
| 2158 | CountryPopulationData::from_regions(vec![ |
| 2159 | PopulationRegion::new(-4.2634, 15.2429, 2_388_000.0, 1_821.0, AreaType::Urban, "Brazzaville"), |
| 2160 | PopulationRegion::new(-4.7761, 11.8635, 1_214_000.0, 79.0, AreaType::Urban, "Pointe-Noire"), |
| 2161 | PopulationRegion::new(-4.2097, 12.6547, 58_000.0, 20.0, AreaType::Urban, "Dolisie"), |
| 2162 | PopulationRegion::new(-2.0, 15.0, 1_820_000.0, 340_100.0, AreaType::Rural, "Rural Congo"), |
| 2163 | ], 342_000.0) |
| 2164 | }, |
| 2165 | |
| 2166 | Self::Romania => { |
| 2167 | // Romania: 19.0M population, 238,397 km² area, ~54% urban. |
| 2168 | CountryPopulationData::from_regions(vec![ |
| 2169 | PopulationRegion::new(44.4268, 26.1025, 2_155_000.0, 228.0, AreaType::Urban, "Bucharest"), |
| 2170 | PopulationRegion::new(46.7712, 23.6236, 325_000.0, 179.0, AreaType::Urban, "Cluj-Napoca"), |
| 2171 | PopulationRegion::new(47.1585, 27.6014, 318_000.0, 94.0, AreaType::Urban, "Iași"), |
| 2172 | PopulationRegion::new(45.7494, 21.2272, 318_000.0, 138.0, AreaType::Urban, "Timișoara"), |
| 2173 | PopulationRegion::new(44.1810, 28.6348, 283_000.0, 231.0, AreaType::Urban, "Constanța"), |
| 2174 | PopulationRegion::new(46.0, 25.0, 8_750_000.0, 237_300.0, AreaType::Rural, "Rural Romania"), |
| 2175 | ], 238_397.0) |
| 2176 | }, |
| 2177 | |
| 2178 | Self::Russia => { |
| 2179 | // Russia: 143.4M population, 17,098,242 km² area, ~75% urban. |
| 2180 | CountryPopulationData::from_regions(vec![ |
| 2181 | PopulationRegion::new(55.7558, 37.6173, 12_641_000.0, 2_561.0, AreaType::Urban, "Moscow"), |
| 2182 | PopulationRegion::new(59.9311, 30.3609, 5_384_000.0, 1_439.0, AreaType::Urban, "St. Petersburg"), |
| 2183 | PopulationRegion::new(55.0084, 82.9357, 1_625_000.0, 505.0, AreaType::Urban, "Novosibirsk"), |
| 2184 | PopulationRegion::new(56.8389, 60.6057, 1_494_000.0, 468.0, AreaType::Urban, "Yekaterinburg"), |
| 2185 | PopulationRegion::new(56.0269, 92.8672, 1_094_000.0, 354.0, AreaType::Urban, "Krasnoyarsk"), |
| 2186 | PopulationRegion::new(53.2001, 50.1500, 1_165_000.0, 541.0, AreaType::Urban, "Samara"), |
| 2187 | PopulationRegion::new(58.0105, 56.2502, 1_056_000.0, 799.0, AreaType::Urban, "Perm"), |
| 2188 | PopulationRegion::new(55.3333, 86.0833, 1_075_000.0, 293.0, AreaType::Urban, "Novokuznetsk"), |
| 2189 | PopulationRegion::new(55.7540, 48.7439, 1_255_000.0, 425.0, AreaType::Urban, "Kazan"), |
| 2190 | PopulationRegion::new(52.0300, 113.5000, 1_054_000.0, 500.0, AreaType::Urban, "Chita"), |
| 2191 | PopulationRegion::new(54.7388, 55.9721, 1_126_000.0, 479.0, AreaType::Urban, "Ufa"), |
| 2192 | PopulationRegion::new(53.1958, 45.0183, 1_019_000.0, 353.0, AreaType::Urban, "Volgograd"), |
| 2193 | PopulationRegion::new(47.2357, 39.7015, 1_119_000.0, 348.0, AreaType::Urban, "Rostov-on-Don"), |
| 2194 | PopulationRegion::new(55.0415, 73.3686, 1_174_000.0, 573.0, AreaType::Urban, "Omsk"), |
| 2195 | PopulationRegion::new(43.1056, 131.8735, 606_000.0, 325.0, AreaType::Urban, "Vladivostok"), |
| 2196 | PopulationRegion::new(60.0, 90.0, 29_700_000.0, 17_090_000.0, AreaType::Rural, "Rural Russia"), |
| 2197 | ], 17_098_242.0) |
| 2198 | }, |
| 2199 | |
| 2200 | Self::Rwanda => { |
| 2201 | // Rwanda: 13.3M population, 26,338 km² area, ~17% urban. |
| 2202 | CountryPopulationData::from_regions(vec![ |
| 2203 | PopulationRegion::new(-1.9403, 30.0587, 1_204_000.0, 730.0, AreaType::Urban, "Kigali"), |
| 2204 | PopulationRegion::new(-2.4973, 28.9075, 66_000.0, 20.0, AreaType::Urban, "Gisenyi"), |
| 2205 | PopulationRegion::new(-1.6965, 29.2394, 63_000.0, 18.0, AreaType::Urban, "Ruhengeri"), |
| 2206 | PopulationRegion::new(-2.0, 29.5, 11_000_000.0, 25_600.0, AreaType::Rural, "Rural Rwanda"), |
| 2207 | ], 26_338.0) |
| 2208 | }, |
| 2209 | |
| 2210 | Self::SaintKittsAndNevis => { |
| 2211 | // Saint Kitts and Nevis: 54k population, 261 km² area, ~31% urban. |
| 2212 | CountryPopulationData::from_regions(vec![ |
| 2213 | PopulationRegion::new(17.3026, -62.7177, 13_000.0, 7.0, AreaType::Urban, "Basseterre"), |
| 2214 | PopulationRegion::new(17.3578, -62.7822, 2_500.0, 3.0, AreaType::Urban, "Sandy Point Town"), |
| 2215 | PopulationRegion::new(17.1408, -62.6228, 1_800.0, 2.0, AreaType::Urban, "Charlestown"), |
| 2216 | PopulationRegion::new(17.3, -62.7, 32_700.0, 249.0, AreaType::Rural, "Rural St Kitts and Nevis"), |
| 2217 | ], 261.0) |
| 2218 | }, |
| 2219 | |
| 2220 | Self::SaintLucia => { |
| 2221 | // Saint Lucia: 185k population, 617 km² area, ~19% urban. |
| 2222 | CountryPopulationData::from_regions(vec![ |
| 2223 | PopulationRegion::new(14.0101, -60.9875, 22_000.0, 11.0, AreaType::Urban, "Castries"), |
| 2224 | PopulationRegion::new(13.9740, -61.0242, 6_000.0, 5.0, AreaType::Urban, "Gros Islet"), |
| 2225 | PopulationRegion::new(13.8412, -60.9605, 5_000.0, 4.0, AreaType::Urban, "Vieux Fort"), |
| 2226 | PopulationRegion::new(13.9, -61.0, 138_000.0, 597.0, AreaType::Rural, "Rural Saint Lucia"), |
| 2227 | ], 617.0) |
| 2228 | }, |
| 2229 | |
| 2230 | Self::SaintVincentAndTheGrenadines => { |
| 2231 | // Saint Vincent and the Grenadines: 110k population, 389 km² area, ~53% urban. |
| 2232 | CountryPopulationData::from_regions(vec![ |
| 2233 | PopulationRegion::new(13.1600, -61.2248, 27_000.0, 13.0, AreaType::Urban, "Kingstown"), |
| 2234 | PopulationRegion::new(13.0031, -61.2397, 1_200.0, 2.0, AreaType::Urban, "Port Elizabeth"), |
| 2235 | PopulationRegion::new(13.1526, -61.1964, 1_000.0, 1.0, AreaType::Urban, "Georgetown"), |
| 2236 | PopulationRegion::new(13.1, -61.2, 49_800.0, 373.0, AreaType::Rural, "Rural St Vincent"), |
| 2237 | ], 389.0) |
| 2238 | }, |
| 2239 | |
| 2240 | Self::Samoa => { |
| 2241 | // Samoa: 200k population, 2,842 km² area, ~18% urban. |
| 2242 | CountryPopulationData::from_regions(vec![ |
| 2243 | PopulationRegion::new(-13.8314, -171.7518, 36_000.0, 60.0, AreaType::Urban, "Apia"), |
| 2244 | PopulationRegion::new(-13.8, -172.0, 164_000.0, 2_782.0, AreaType::Rural, "Rural Samoa"), |
| 2245 | ], 2_842.0) |
| 2246 | }, |
| 2247 | |
| 2248 | Self::SanMarino => { |
| 2249 | // San Marino: 34k population, 61 km² area, ~97% urban. |
| 2250 | CountryPopulationData::from_regions(vec![ |
| 2251 | PopulationRegion::new(43.9424, 12.4578, 4_000.0, 7.0, AreaType::Urban, "San Marino City"), |
| 2252 | PopulationRegion::new(43.9333, 12.4167, 29_000.0, 54.0, AreaType::Urban, "Urban San Marino"), |
| 2253 | ], 61.0) |
| 2254 | }, |
| 2255 | |
| 2256 | Self::SaoTomeAndPrincipe => { |
| 2257 | // São Tomé and Príncipe: 223k population, 964 km² area, ~74% urban. |
| 2258 | CountryPopulationData::from_regions(vec![ |
| 2259 | PopulationRegion::new(0.3365, 6.7273, 90_000.0, 17.0, AreaType::Urban, "São Tomé"), |
| 2260 | PopulationRegion::new(1.6333, 7.4167, 8_000.0, 4.0, AreaType::Urban, "Santo António"), |
| 2261 | PopulationRegion::new(0.2017, 6.5317, 6_000.0, 3.0, AreaType::Urban, "Neves"), |
| 2262 | PopulationRegion::new(0.3, 6.7, 44_000.0, 940.0, AreaType::Rural, "Rural São Tomé"), |
| 2263 | ], 964.0) |
| 2264 | }, |
| 2265 | |
| 2266 | Self::SaudiArabia => { |
| 2267 | // Saudi Arabia: 35.0M population, 2,149,690 km² area, ~84% urban. |
| 2268 | CountryPopulationData::from_regions(vec![ |
| 2269 | PopulationRegion::new(24.7136, 46.6753, 7_538_000.0, 1_913.0, AreaType::Urban, "Riyadh"), |
| 2270 | PopulationRegion::new(21.3891, 39.8579, 4_610_000.0, 1_686.0, AreaType::Urban, "Jeddah"), |
| 2271 | PopulationRegion::new(21.4267, 39.8261, 2_042_000.0, 760.0, AreaType::Urban, "Mecca"), |
| 2272 | PopulationRegion::new(24.4861, 39.6111, 1_387_000.0, 589.0, AreaType::Urban, "Medina"), |
| 2273 | PopulationRegion::new(26.4207, 50.0888, 1_252_000.0, 672.0, AreaType::Urban, "Dammam"), |
| 2274 | PopulationRegion::new(18.3004, 42.7103, 949_000.0, 334.0, AreaType::Urban, "Abha"), |
| 2275 | PopulationRegion::new(24.6877, 46.7219, 814_000.0, 280.0, AreaType::Urban, "Kharj"), |
| 2276 | PopulationRegion::new(26.3267, 43.9750, 768_000.0, 263.0, AreaType::Urban, "Buraydah"), |
| 2277 | PopulationRegion::new(21.2700, 40.4158, 689_000.0, 235.0, AreaType::Urban, "Taif"), |
| 2278 | PopulationRegion::new(16.8892, 42.5511, 668_000.0, 228.0, AreaType::Urban, "Jazan"), |
| 2279 | PopulationRegion::new(24.0, 45.0, 2_900_000.0, 2_145_000.0, AreaType::Rural, "Rural Saudi Arabia"), |
| 2280 | ], 2_149_690.0) |
| 2281 | }, |
| 2282 | |
| 2283 | Self::Senegal => { |
| 2284 | // Senegal: 17.2M population, 196,722 km² area, ~48% urban. |
| 2285 | CountryPopulationData::from_regions(vec![ |
| 2286 | PopulationRegion::new(14.7167, -17.4677, 3_140_000.0, 82.0, AreaType::Urban, "Dakar"), |
| 2287 | PopulationRegion::new(12.5686, -16.2436, 230_000.0, 40.0, AreaType::Urban, "Ziguinchor"), |
| 2288 | PopulationRegion::new(14.6937, -17.4441, 197_000.0, 30.0, AreaType::Urban, "Thiès"), |
| 2289 | PopulationRegion::new(14.0, -16.0, 8_900_000.0, 196_600.0, AreaType::Rural, "Rural Senegal"), |
| 2290 | ], 196_722.0) |
| 2291 | }, |
| 2292 | |
| 2293 | Self::Serbia => { |
| 2294 | // Serbia: 6.8M population, 88,361 km² area, ~57% urban. |
| 2295 | CountryPopulationData::from_regions(vec![ |
| 2296 | PopulationRegion::new(44.7866, 20.4489, 1_405_000.0, 360.0, AreaType::Urban, "Belgrade"), |
| 2297 | PopulationRegion::new(45.2671, 19.8335, 306_000.0, 277.0, AreaType::Urban, "Novi Sad"), |
| 2298 | PopulationRegion::new(43.3209, 21.8954, 187_000.0, 113.0, AreaType::Urban, "Niš"), |
| 2299 | PopulationRegion::new(44.0144, 20.9114, 147_000.0, 77.0, AreaType::Urban, "Kragujevac"), |
| 2300 | PopulationRegion::new(44.5, 20.5, 2_920_000.0, 87_500.0, AreaType::Rural, "Rural Serbia"), |
| 2301 | ], 88_361.0) |
| 2302 | }, |
| 2303 | |
| 2304 | Self::Seychelles => { |
| 2305 | // Seychelles: 99k population, 452 km² area, ~58% urban. |
| 2306 | CountryPopulationData::from_regions(vec![ |
| 2307 | PopulationRegion::new(-4.6827, 55.4804, 28_000.0, 20.0, AreaType::Urban, "Victoria"), |
| 2308 | PopulationRegion::new(-4.7667, 55.5167, 8_500.0, 6.0, AreaType::Urban, "Anse Royale"), |
| 2309 | PopulationRegion::new(-4.7833, 55.5333, 4_000.0, 3.0, AreaType::Urban, "Beau Vallon"), |
| 2310 | PopulationRegion::new(-4.3167, 55.7667, 3_500.0, 2.0, AreaType::Urban, "Baie Lazare"), |
| 2311 | PopulationRegion::new(-4.6, 55.5, 26_000.0, 421.0, AreaType::Rural, "Rural Seychelles"), |
| 2312 | ], 452.0) |
| 2313 | }, |
| 2314 | |
| 2315 | Self::SierraLeone => { |
| 2316 | // Sierra Leone: 8.1M population, 71,740 km² area, ~43% urban. |
| 2317 | CountryPopulationData::from_regions(vec![ |
| 2318 | PopulationRegion::new(8.4656, -13.2317, 1_236_000.0, 68.0, AreaType::Urban, "Freetown"), |
| 2319 | PopulationRegion::new(7.8765, -11.1875, 241_000.0, 30.0, AreaType::Urban, "Bo"), |
| 2320 | PopulationRegion::new(8.4821, -11.1885, 128_000.0, 20.0, AreaType::Urban, "Kenema"), |
| 2321 | PopulationRegion::new(8.5, -12.0, 4_600_000.0, 71_600.0, AreaType::Rural, "Rural Sierra Leone"), |
| 2322 | ], 71_740.0) |
| 2323 | }, |
| 2324 | |
| 2325 | Self::Singapore => { |
| 2326 | // Singapore: 5.7M population, 728 km² area, ~100% urban. |
| 2327 | CountryPopulationData::from_regions(vec![ |
| 2328 | PopulationRegion::new(1.3521, 103.8198, 5_686_000.0, 728.0, AreaType::Urban, "Singapore"), |
| 2329 | ], 728.0) |
| 2330 | }, |
| 2331 | |
| 2332 | Self::Slovakia => { |
| 2333 | // Slovakia: 5.4M population, 49,037 km² area, ~54% urban. |
| 2334 | CountryPopulationData::from_regions(vec![ |
| 2335 | PopulationRegion::new(48.1486, 17.1077, 475_000.0, 368.0, AreaType::Urban, "Bratislava"), |
| 2336 | PopulationRegion::new(48.9961, 21.2393, 239_000.0, 243.0, AreaType::Urban, "Košice"), |
| 2337 | PopulationRegion::new(49.0683, 18.9237, 180_000.0, 193.0, AreaType::Urban, "Prešov"), |
| 2338 | PopulationRegion::new(48.7163, 21.2611, 95_000.0, 80.0, AreaType::Urban, "Nitra"), |
| 2339 | PopulationRegion::new(48.5, 19.5, 2_500_000.0, 48_200.0, AreaType::Rural, "Rural Slovakia"), |
| 2340 | ], 49_037.0) |
| 2341 | }, |
| 2342 | |
| 2343 | Self::Slovenia => { |
| 2344 | // Slovenia: 2.1M population, 20,273 km² area, ~55% urban. |
| 2345 | CountryPopulationData::from_regions(vec![ |
| 2346 | PopulationRegion::new(46.0569, 14.5058, 537_000.0, 555.0, AreaType::Urban, "Ljubljana Metro"), |
| 2347 | PopulationRegion::new(46.5547, 15.6466, 141_000.0, 168.0, AreaType::Urban, "Maribor"), |
| 2348 | PopulationRegion::new(46.2397, 15.2686, 55_000.0, 50.0, AreaType::Urban, "Celje"), |
| 2349 | PopulationRegion::new(46.2, 14.5, 945_000.0, 19_500.0, AreaType::Rural, "Rural Slovenia"), |
| 2350 | ], 20_273.0) |
| 2351 | }, |
| 2352 | |
| 2353 | Self::SolomonIslands => { |
| 2354 | // Solomon Islands: 703k population, 28,896 km² area, ~24% urban. |
| 2355 | CountryPopulationData::from_regions(vec![ |
| 2356 | PopulationRegion::new(-9.4319, 159.9556, 93_000.0, 22.0, AreaType::Urban, "Honiara"), |
| 2357 | PopulationRegion::new(-8.7667, 160.7000, 6_200.0, 5.0, AreaType::Urban, "Auki"), |
| 2358 | PopulationRegion::new(-10.5667, 161.7667, 5_100.0, 4.0, AreaType::Urban, "Gizo"), |
| 2359 | PopulationRegion::new(-8.1333, 157.2000, 4_500.0, 3.0, AreaType::Urban, "Buala"), |
| 2360 | PopulationRegion::new(-9.0, 160.0, 519_200.0, 28_862.0, AreaType::Rural, "Rural Solomon Islands"), |
| 2361 | ], 28_896.0) |
| 2362 | }, |
| 2363 | |
| 2364 | Self::Somalia => { |
| 2365 | // Somalia: 16.4M population, 637,657 km² area, ~46% urban. |
| 2366 | CountryPopulationData::from_regions(vec![ |
| 2367 | PopulationRegion::new(2.0469, 45.3182, 2_610_000.0, 91.0, AreaType::Urban, "Mogadishu"), |
| 2368 | PopulationRegion::new(9.5200, 44.0700, 515_000.0, 50.0, AreaType::Urban, "Hargeisa"), |
| 2369 | PopulationRegion::new(0.5667, 47.5000, 437_000.0, 40.0, AreaType::Urban, "Merca"), |
| 2370 | PopulationRegion::new(6.0, 46.0, 8_800_000.0, 637_500.0, AreaType::Rural, "Rural Somalia"), |
| 2371 | ], 637_657.0) |
| 2372 | }, |
| 2373 | |
| 2374 | Self::SouthAfrica => { |
| 2375 | // South Africa: 60.0M population, 1,221,037 km² area, ~67% urban. |
| 2376 | CountryPopulationData::from_regions(vec![ |
| 2377 | PopulationRegion::new(-26.2041, 28.0473, 11_191_000.0, 6_856.0, AreaType::Urban, "Johannesburg Metro"), |
| 2378 | PopulationRegion::new(-33.9249, 18.4241, 4_710_000.0, 2_446.0, AreaType::Urban, "Cape Town Metro"), |
| 2379 | PopulationRegion::new(-29.8587, 31.0292, 3_969_000.0, 2_556.0, AreaType::Urban, "Durban Metro"), |
| 2380 | PopulationRegion::new(-25.7479, 28.2293, 3_888_000.0, 6_197.0, AreaType::Urban, "Pretoria Metro"), |
| 2381 | PopulationRegion::new(-33.9608, 25.6022, 770_000.0, 947.0, AreaType::Urban, "Port Elizabeth Metro"), |
| 2382 | PopulationRegion::new(-32.0833, 18.8666, 348_000.0, 13_647.0, AreaType::Urban, "Saldanha Bay"), |
| 2383 | PopulationRegion::new(-33.0167, 27.9, 312_000.0, 6_357.0, AreaType::Urban, "East London"), |
| 2384 | PopulationRegion::new(-28.7282, 24.7499, 255_000.0, 164.0, AreaType::Urban, "Kimberley"), |
| 2385 | PopulationRegion::new(-26.6667, 27.0833, 232_000.0, 38.0, AreaType::Urban, "Welkom"), |
| 2386 | PopulationRegion::new(-29.0852, 26.1596, 222_000.0, 6_283.0, AreaType::Urban, "Bloemfontein"), |
| 2387 | PopulationRegion::new(-29.0, 24.0, 18_000_000.0, 1_208_000.0, AreaType::Rural, "Rural South Africa"), |
| 2388 | ], 1_221_037.0) |
| 2389 | }, |
| 2390 | |
| 2391 | Self::SouthKorea => { |
| 2392 | // South Korea: 51.7M population, 100,210 km² area, ~81% urban. |
| 2393 | CountryPopulationData::from_regions(vec![ |
| 2394 | PopulationRegion::new(37.5665, 126.9780, 25_674_000.0, 11_690.0, AreaType::Urban, "Seoul Metro"), |
| 2395 | PopulationRegion::new(35.1796, 129.0756, 3_404_000.0, 770.0, AreaType::Urban, "Busan"), |
| 2396 | PopulationRegion::new(37.4563, 126.7052, 3_032_000.0, 1_045.0, AreaType::Urban, "Incheon"), |
| 2397 | PopulationRegion::new(35.8714, 128.6014, 2_431_000.0, 884.0, AreaType::Urban, "Daegu"), |
| 2398 | PopulationRegion::new(35.1595, 126.8526, 1_478_000.0, 501.0, AreaType::Urban, "Gwangju"), |
| 2399 | PopulationRegion::new(36.3504, 127.3845, 1_542_000.0, 540.0, AreaType::Urban, "Daejeon"), |
| 2400 | PopulationRegion::new(35.5384, 129.3114, 1_046_000.0, 1_058.0, AreaType::Urban, "Ulsan"), |
| 2401 | PopulationRegion::new(37.8813, 127.7298, 983_000.0, 872.0, AreaType::Urban, "Chuncheon"), |
| 2402 | PopulationRegion::new(36.5, 127.5, 6_700_000.0, 85_300.0, AreaType::Rural, "Rural South Korea"), |
| 2403 | ], 100_210.0) |
| 2404 | }, |
| 2405 | |
| 2406 | Self::SouthSudan => { |
| 2407 | // South Sudan: 11.4M population, 619,745 km² area, ~20% urban. |
| 2408 | CountryPopulationData::from_regions(vec![ |
| 2409 | PopulationRegion::new(4.8594, 31.5713, 525_000.0, 52.0, AreaType::Urban, "Juba"), |
| 2410 | PopulationRegion::new(9.5370, 31.6603, 90_000.0, 20.0, AreaType::Urban, "Wau"), |
| 2411 | PopulationRegion::new(6.8100, 29.6950, 61_000.0, 15.0, AreaType::Urban, "Yei"), |
| 2412 | PopulationRegion::new(7.0, 30.0, 9_100_000.0, 619_600.0, AreaType::Rural, "Rural South Sudan"), |
| 2413 | ], 619_745.0) |
| 2414 | }, |
| 2415 | |
| 2416 | Self::Spain => { |
| 2417 | // Spain: 47.4M population, 505,992 km² area, ~81% urban. |
| 2418 | CountryPopulationData::from_regions(vec![ |
| 2419 | PopulationRegion::new(40.4168, -3.7038, 6_751_000.0, 606.0, AreaType::Urban, "Madrid Metro"), |
| 2420 | PopulationRegion::new(41.3851, 2.1734, 5_609_000.0, 636.0, AreaType::Urban, "Barcelona Metro"), |
| 2421 | PopulationRegion::new(39.4699, -0.3763, 2_560_000.0, 628.0, AreaType::Urban, "Valencia Metro"), |
| 2422 | PopulationRegion::new(37.3891, -5.9845, 1_949_000.0, 4_906.0, AreaType::Urban, "Seville Metro"), |
| 2423 | PopulationRegion::new(36.7213, -4.4217, 1_661_000.0, 1_336.0, AreaType::Urban, "Málaga Metro"), |
| 2424 | PopulationRegion::new(43.2627, -2.9253, 1_037_000.0, 497.0, AreaType::Urban, "Bilbao Metro"), |
| 2425 | PopulationRegion::new(39.5750, 2.6502, 634_000.0, 209.0, AreaType::Urban, "Palma"), |
| 2426 | PopulationRegion::new(37.9922, -1.1307, 493_000.0, 558.0, AreaType::Urban, "Murcia"), |
| 2427 | PopulationRegion::new(36.5344, -6.2994, 477_000.0, 32.0, AreaType::Urban, "Cádiz"), |
| 2428 | PopulationRegion::new(37.8882, -4.7794, 472_000.0, 38.0, AreaType::Urban, "Córdoba"), |
| 2429 | PopulationRegion::new(40.0, -4.0, 7_600_000.0, 497_000.0, AreaType::Rural, "Rural Spain"), |
| 2430 | ], 505_992.0) |
| 2431 | }, |
| 2432 | |
| 2433 | Self::SriLanka => { |
| 2434 | // Sri Lanka: 21.9M population, 65,610 km² area, ~19% urban. |
| 2435 | CountryPopulationData::from_regions(vec![ |
| 2436 | PopulationRegion::new(6.9271, 79.8612, 753_000.0, 37.0, AreaType::Urban, "Colombo"), |
| 2437 | PopulationRegion::new(7.4675, 80.6234, 169_000.0, 26.0, AreaType::Urban, "Kurunegala"), |
| 2438 | PopulationRegion::new(7.2906, 80.6337, 140_000.0, 30.0, AreaType::Urban, "Kandy"), |
| 2439 | PopulationRegion::new(8.0, 80.5, 17_700_000.0, 65_500.0, AreaType::Rural, "Rural Sri Lanka"), |
| 2440 | ], 65_610.0) |
| 2441 | }, |
| 2442 | |
| 2443 | Self::Sudan => { |
| 2444 | // Sudan: 44.9M population, 1,886,068 km² area, ~35% urban. |
| 2445 | CountryPopulationData::from_regions(vec![ |
| 2446 | PopulationRegion::new(15.5007, 32.5599, 5_829_000.0, 1_010.0, AreaType::Urban, "Khartoum Metro"), |
| 2447 | PopulationRegion::new(19.6158, 37.2164, 524_000.0, 52.0, AreaType::Urban, "Port Sudan"), |
| 2448 | PopulationRegion::new(13.1833, 30.2167, 524_000.0, 75.0, AreaType::Urban, "Nyala"), |
| 2449 | PopulationRegion::new(11.8659, 34.3869, 344_000.0, 40.0, AreaType::Urban, "Kusti"), |
| 2450 | PopulationRegion::new(15.0, 30.0, 29_200_000.0, 1_884_900.0, AreaType::Rural, "Rural Sudan"), |
| 2451 | ], 1_886_068.0) |
| 2452 | }, |
| 2453 | |
| 2454 | Self::Suriname => { |
| 2455 | // Suriname: 598k population, 163,820 km² area, ~66% urban. |
| 2456 | CountryPopulationData::from_regions(vec![ |
| 2457 | PopulationRegion::new(5.8521, -55.2038, 241_000.0, 182.0, AreaType::Urban, "Paramaribo"), |
| 2458 | PopulationRegion::new(5.8, -55.2, 203_000.0, 163_600.0, AreaType::Rural, "Rural Suriname"), |
| 2459 | ], 163_820.0) |
| 2460 | }, |
| 2461 | |
| 2462 | Self::Swaziland => { |
| 2463 | // Eswatini: 1.2M population, 17,364 km² area, ~24% urban. |
| 2464 | CountryPopulationData::from_regions(vec![ |
| 2465 | PopulationRegion::new(-26.3054, 31.1367, 95_000.0, 81.0, AreaType::Urban, "Mbabane"), |
| 2466 | PopulationRegion::new(-26.4833, 31.2000, 76_000.0, 60.0, AreaType::Urban, "Manzini"), |
| 2467 | PopulationRegion::new(-26.5, 31.5, 914_000.0, 17_200.0, AreaType::Rural, "Rural Eswatini"), |
| 2468 | ], 17_364.0) |
| 2469 | }, |
| 2470 | |
| 2471 | Self::Sweden => { |
| 2472 | // Sweden: 10.4M population, 450,295 km² area, ~88% urban. |
| 2473 | CountryPopulationData::from_regions(vec![ |
| 2474 | PopulationRegion::new(59.3293, 18.0686, 2_415_000.0, 1_912.0, AreaType::Urban, "Stockholm Metro"), |
| 2475 | PopulationRegion::new(57.7089, 11.9746, 1_089_000.0, 896.0, AreaType::Urban, "Gothenburg Metro"), |
| 2476 | PopulationRegion::new(55.6050, 13.0038, 749_000.0, 347.0, AreaType::Urban, "Malmö Metro"), |
| 2477 | PopulationRegion::new(59.8586, 17.6389, 177_000.0, 49.0, AreaType::Urban, "Uppsala"), |
| 2478 | PopulationRegion::new(62.3908, 17.3069, 127_000.0, 30.0, AreaType::Urban, "Sundsvall"), |
| 2479 | PopulationRegion::new(63.8258, 20.2630, 123_000.0, 29.0, AreaType::Urban, "Umeå"), |
| 2480 | PopulationRegion::new(58.4108, 15.6214, 110_000.0, 25.0, AreaType::Urban, "Linköping"), |
| 2481 | PopulationRegion::new(56.1612, 15.5869, 93_000.0, 20.0, AreaType::Urban, "Karlskrona"), |
| 2482 | PopulationRegion::new(60.0, 15.0, 800_000.0, 447_000.0, AreaType::Rural, "Rural Sweden"), |
| 2483 | ], 450_295.0) |
| 2484 | }, |
| 2485 | |
| 2486 | Self::Switzerland => { |
| 2487 | // Switzerland: 8.7M population, 41,285 km² area, ~74% urban. |
| 2488 | CountryPopulationData::from_regions(vec![ |
| 2489 | PopulationRegion::new(47.3769, 8.5417, 1_408_000.0, 1_729.0, AreaType::Urban, "Zürich Metro"), |
| 2490 | PopulationRegion::new(46.2044, 6.1432, 609_000.0, 343.0, AreaType::Urban, "Geneva Metro"), |
| 2491 | PopulationRegion::new(47.5596, 7.5886, 537_000.0, 559.0, AreaType::Urban, "Basel Metro"), |
| 2492 | PopulationRegion::new(46.9480, 7.4474, 423_000.0, 233.0, AreaType::Urban, "Bern Metro"), |
| 2493 | PopulationRegion::new(46.5197, 6.6323, 438_000.0, 376.0, AreaType::Urban, "Lausanne Metro"), |
| 2494 | PopulationRegion::new(47.0, 8.5, 2_260_000.0, 38_400.0, AreaType::Rural, "Rural Switzerland"), |
| 2495 | ], 41_285.0) |
| 2496 | }, |
| 2497 | |
| 2498 | Self::Syria => { |
| 2499 | // Syria: 18.5M population, 185,180 km² area, ~56% urban. |
| 2500 | CountryPopulationData::from_regions(vec![ |
| 2501 | PopulationRegion::new(33.5138, 36.2765, 2_211_000.0, 105.0, AreaType::Urban, "Damascus"), |
| 2502 | PopulationRegion::new(36.2021, 37.1343, 1_917_000.0, 190.0, AreaType::Urban, "Aleppo"), |
| 2503 | PopulationRegion::new(33.5074, 36.3097, 968_000.0, 60.0, AreaType::Urban, "Rif Dimashq"), |
| 2504 | PopulationRegion::new(34.7305, 36.7137, 809_000.0, 102.0, AreaType::Urban, "Homs"), |
| 2505 | PopulationRegion::new(35.0, 38.0, 8_100_000.0, 184_800.0, AreaType::Rural, "Rural Syria"), |
| 2506 | ], 185_180.0) |
| 2507 | }, |
| 2508 | |
| 2509 | Self::Taiwan => { |
| 2510 | // Taiwan: 23.6M population, 36,193 km² area, ~79% urban. |
| 2511 | CountryPopulationData::from_regions(vec![ |
| 2512 | PopulationRegion::new(25.0330, 121.5654, 7_047_000.0, 2_457.0, AreaType::Urban, "Taipei Metro"), |
| 2513 | PopulationRegion::new(22.6273, 120.3014, 2_773_000.0, 176.0, AreaType::Urban, "Kaohsiung"), |
| 2514 | PopulationRegion::new(24.1477, 120.6736, 2_820_000.0, 2_192.0, AreaType::Urban, "Taichung"), |
| 2515 | PopulationRegion::new(22.9998, 120.2269, 764_000.0, 69.0, AreaType::Urban, "Tainan"), |
| 2516 | PopulationRegion::new(24.8015, 120.9715, 218_000.0, 29.0, AreaType::Urban, "Hsinchu"), |
| 2517 | PopulationRegion::new(24.5, 121.0, 4_950_000.0, 31_000.0, AreaType::Rural, "Rural Taiwan"), |
| 2518 | ], 36_193.0) |
| 2519 | }, |
| 2520 | |
| 2521 | Self::Tajikistan => { |
| 2522 | // Tajikistan: 9.7M population, 143,100 km² area, ~27% urban. |
| 2523 | CountryPopulationData::from_regions(vec![ |
| 2524 | PopulationRegion::new(38.5598, 68.7870, 912_000.0, 124.0, AreaType::Urban, "Dushanbe"), |
| 2525 | PopulationRegion::new(40.2833, 69.6333, 150_000.0, 35.0, AreaType::Urban, "Khujand"), |
| 2526 | PopulationRegion::new(38.5484, 68.7790, 109_000.0, 25.0, AreaType::Urban, "Bokhtar"), |
| 2527 | PopulationRegion::new(39.0, 70.0, 7_100_000.0, 142_900.0, AreaType::Rural, "Rural Tajikistan"), |
| 2528 | ], 143_100.0) |
| 2529 | }, |
| 2530 | |
| 2531 | Self::Tanzania => { |
| 2532 | // Tanzania: 61.5M population, 945,087 km² area, ~35% urban. |
| 2533 | CountryPopulationData::from_regions(vec![ |
| 2534 | PopulationRegion::new(-6.7924, 39.2083, 6_368_000.0, 1_590.0, AreaType::Urban, "Dar es Salaam"), |
| 2535 | PopulationRegion::new(-3.3869, 36.6830, 621_000.0, 83.0, AreaType::Urban, "Arusha"), |
| 2536 | PopulationRegion::new(-5.0689, 39.0986, 540_000.0, 65.0, AreaType::Urban, "Tanga"), |
| 2537 | PopulationRegion::new(-2.5166, 32.9000, 540_000.0, 70.0, AreaType::Urban, "Mwanza"), |
| 2538 | PopulationRegion::new(-5.9095, 35.7516, 436_000.0, 58.0, AreaType::Urban, "Dodoma"), |
| 2539 | PopulationRegion::new(-8.9094, 33.4608, 414_000.0, 53.0, AreaType::Urban, "Mbeya"), |
| 2540 | PopulationRegion::new(-4.8723, 29.6420, 303_000.0, 38.0, AreaType::Urban, "Kigoma"), |
| 2541 | PopulationRegion::new(-10.2667, 40.1833, 280_000.0, 35.0, AreaType::Urban, "Mtwara"), |
| 2542 | PopulationRegion::new(-6.0, 35.0, 37_500_000.0, 943_200.0, AreaType::Rural, "Rural Tanzania"), |
| 2543 | ], 945_087.0) |
| 2544 | }, |
| 2545 | |
| 2546 | Self::Thailand => { |
| 2547 | // Thailand: 70.0M population, 513,120 km² area, ~51% urban. |
| 2548 | CountryPopulationData::from_regions(vec![ |
| 2549 | PopulationRegion::new(13.7563, 100.5018, 11_070_000.0, 1_569.0, AreaType::Urban, "Bangkok Metro"), |
| 2550 | PopulationRegion::new(7.0086, 100.4733, 439_000.0, 70.0, AreaType::Urban, "Hat Yai"), |
| 2551 | PopulationRegion::new(18.7883, 98.9853, 435_000.0, 40.0, AreaType::Urban, "Chiang Mai"), |
| 2552 | PopulationRegion::new(14.9714, 102.1027, 358_000.0, 46.0, AreaType::Urban, "Nakhon Ratchasima"), |
| 2553 | PopulationRegion::new(16.4322, 102.8236, 355_000.0, 40.0, AreaType::Urban, "Khon Kaen"), |
| 2554 | PopulationRegion::new(12.6095, 102.1038, 315_000.0, 35.0, AreaType::Urban, "Chonburi"), |
| 2555 | PopulationRegion::new(16.8211, 100.2668, 300_000.0, 32.0, AreaType::Urban, "Phitsanulok"), |
| 2556 | PopulationRegion::new(15.0, 100.0, 33_400_000.0, 511_400.0, AreaType::Rural, "Rural Thailand"), |
| 2557 | ], 513_120.0) |
| 2558 | }, |
| 2559 | |
| 2560 | Self::Togo => { |
| 2561 | // Togo: 8.5M population, 56,785 km² area, ~43% urban. |
| 2562 | CountryPopulationData::from_regions(vec![ |
| 2563 | PopulationRegion::new(6.1256, 1.2254, 2_188_000.0, 280.0, AreaType::Urban, "Lomé"), |
| 2564 | PopulationRegion::new(8.9831, 1.1444, 168_000.0, 30.0, AreaType::Urban, "Sokodé"), |
| 2565 | PopulationRegion::new(9.5511, 1.1865, 158_000.0, 25.0, AreaType::Urban, "Kara"), |
| 2566 | PopulationRegion::new(8.0, 1.0, 4_800_000.0, 56_400.0, AreaType::Rural, "Rural Togo"), |
| 2567 | ], 56_785.0) |
| 2568 | }, |
| 2569 | |
| 2570 | Self::Tonga => { |
| 2571 | // Tonga: 107k population, 747 km² area, ~23% urban. |
| 2572 | CountryPopulationData::from_regions(vec![ |
| 2573 | PopulationRegion::new(-21.1393, -175.2049, 23_000.0, 30.0, AreaType::Urban, "Nukuʻalofa"), |
| 2574 | PopulationRegion::new(-21.1333, -175.2, 6_000.0, 8.0, AreaType::Urban, "Neiafu"), |
| 2575 | PopulationRegion::new(-20.0333, -174.3667, 3_500.0, 5.0, AreaType::Urban, "Haveluloto"), |
| 2576 | PopulationRegion::new(-18.6500, -173.9833, 3_000.0, 4.0, AreaType::Urban, "Vava'u"), |
| 2577 | PopulationRegion::new(-21.0, -175.0, 69_500.0, 700.0, AreaType::Rural, "Rural Tonga"), |
| 2578 | ], 747.0) |
| 2579 | }, |
| 2580 | |
| 2581 | Self::TrinidadAndTobago => { |
| 2582 | // Trinidad and Tobago: 1.4M population, 5,130 km² area, ~53% urban. |
| 2583 | CountryPopulationData::from_regions(vec![ |
| 2584 | PopulationRegion::new(10.6596, -61.5086, 545_000.0, 547.0, AreaType::Urban, "Port of Spain Metro"), |
| 2585 | PopulationRegion::new(10.2667, -61.4667, 83_000.0, 20.0, AreaType::Urban, "San Fernando"), |
| 2586 | PopulationRegion::new(10.6425, -61.4013, 61_000.0, 15.0, AreaType::Urban, "Arima"), |
| 2587 | PopulationRegion::new(10.5333, -61.4119, 58_000.0, 13.0, AreaType::Urban, "Chaguanas"), |
| 2588 | PopulationRegion::new(11.1891, -60.7525, 18_000.0, 5.0, AreaType::Urban, "Scarborough"), |
| 2589 | PopulationRegion::new(10.5, -61.3, 570_000.0, 4_530.0, AreaType::Rural, "Rural Trinidad"), |
| 2590 | ], 5_130.0) |
| 2591 | }, |
| 2592 | |
| 2593 | Self::Tunisia => { |
| 2594 | // Tunisia: 12.0M population, 163,610 km² area, ~70% urban. |
| 2595 | CountryPopulationData::from_regions(vec![ |
| 2596 | PopulationRegion::new(36.8065, 10.1815, 2_845_000.0, 3_135.0, AreaType::Urban, "Tunis Metro"), |
| 2597 | PopulationRegion::new(35.8288, 10.6405, 742_000.0, 235.0, AreaType::Urban, "Sousse"), |
| 2598 | PopulationRegion::new(36.4514, 10.7356, 291_000.0, 63.0, AreaType::Urban, "Nabeul"), |
| 2599 | PopulationRegion::new(35.6804, 10.0982, 275_000.0, 40.0, AreaType::Urban, "Kairouan"), |
| 2600 | PopulationRegion::new(36.0, 9.0, 3_600_000.0, 160_100.0, AreaType::Rural, "Rural Tunisia"), |
| 2601 | ], 163_610.0) |
| 2602 | }, |
| 2603 | |
| 2604 | Self::Turkey => { |
| 2605 | // Turkey: 85.0M population, 783,562 km² area, ~77% urban. |
| 2606 | CountryPopulationData::from_regions(vec![ |
| 2607 | PopulationRegion::new(41.0082, 28.9784, 15_848_000.0, 5_343.0, AreaType::Urban, "Istanbul"), |
| 2608 | PopulationRegion::new(39.9334, 32.8597, 5_748_000.0, 25_437.0, AreaType::Urban, "Ankara"), |
| 2609 | PopulationRegion::new(38.4192, 27.1287, 4_440_000.0, 8_276.0, AreaType::Urban, "Izmir"), |
| 2610 | PopulationRegion::new(40.1885, 29.0610, 3_175_000.0, 4_302.0, AreaType::Urban, "Bursa"), |
| 2611 | PopulationRegion::new(36.9914, 35.3308, 2_254_000.0, 13_488.0, AreaType::Urban, "Adana"), |
| 2612 | PopulationRegion::new(37.8737, 32.4847, 2_254_000.0, 20_814.0, AreaType::Urban, "Konya"), |
| 2613 | PopulationRegion::new(36.9081, 30.6956, 2_619_000.0, 19_086.0, AreaType::Urban, "Antalya"), |
| 2614 | PopulationRegion::new(37.0660, 37.3781, 1_986_000.0, 3_584.0, AreaType::Urban, "Gaziantep"), |
| 2615 | PopulationRegion::new(38.7317, 35.4787, 1_241_000.0, 13_251.0, AreaType::Urban, "Kayseri"), |
| 2616 | PopulationRegion::new(41.0053, 39.7277, 757_000.0, 6_277.0, AreaType::Urban, "Trabzon"), |
| 2617 | PopulationRegion::new(39.0, 35.0, 14_800_000.0, 700_000.0, AreaType::Rural, "Rural Turkey"), |
| 2618 | ], 783_562.0) |
| 2619 | }, |
| 2620 | |
| 2621 | Self::Turkmenistan => { |
| 2622 | // Turkmenistan: 6.0M population, 488_100 km² area, ~52% urban. |
| 2623 | CountryPopulationData::from_regions(vec![ |
| 2624 | PopulationRegion::new(37.9500, 58.3833, 810_000.0, 200.0, AreaType::Urban, "Ashgabat"), |
| 2625 | PopulationRegion::new(39.0833, 63.5833, 408_000.0, 75.0, AreaType::Urban, "Türkmenabat"), |
| 2626 | PopulationRegion::new(38.9697, 56.2711, 243_000.0, 50.0, AreaType::Urban, "Daşoguz"), |
| 2627 | PopulationRegion::new(39.0, 59.0, 2_880_000.0, 487_800.0, AreaType::Rural, "Rural Turkmenistan"), |
| 2628 | ], 488_100.0) |
| 2629 | }, |
| 2630 | |
| 2631 | Self::Tuvalu => { |
| 2632 | // Tuvalu: 12k population, 26 km² area, ~63% urban. |
| 2633 | CountryPopulationData::from_regions(vec![ |
| 2634 | PopulationRegion::new(-8.5243, 179.1942, 7_000.0, 3.0, AreaType::Urban, "Funafuti"), |
| 2635 | PopulationRegion::new(-8.5, 179.0, 4_000.0, 23.0, AreaType::Rural, "Rural Tuvalu"), |
| 2636 | ], 26.0) |
| 2637 | }, |
| 2638 | |
| 2639 | Self::Uganda => { |
| 2640 | // Uganda: 47.1M population, 241,038 km² area, ~26% urban. |
| 2641 | CountryPopulationData::from_regions(vec![ |
| 2642 | PopulationRegion::new(0.3163, 32.5822, 3_652_000.0, 189.0, AreaType::Urban, "Kampala Metro"), |
| 2643 | PopulationRegion::new(0.6201, 32.4450, 509_000.0, 46.0, AreaType::Urban, "Wakiso"), |
| 2644 | PopulationRegion::new(-0.4452, 32.4421, 289_000.0, 31.0, AreaType::Urban, "Mukono"), |
| 2645 | PopulationRegion::new(0.0, 32.0, 35_000_000.0, 240_700.0, AreaType::Rural, "Rural Uganda"), |
| 2646 | ], 241_038.0) |
| 2647 | }, |
| 2648 | |
| 2649 | Self::Ukraine => { |
| 2650 | // Ukraine: 43.2M population, 603,500 km² area, ~70% urban. |
| 2651 | CountryPopulationData::from_regions(vec![ |
| 2652 | PopulationRegion::new(50.4501, 30.5234, 3_017_000.0, 839.0, AreaType::Urban, "Kyiv"), |
| 2653 | PopulationRegion::new(49.9935, 36.2304, 1_443_000.0, 350.0, AreaType::Urban, "Kharkiv"), |
| 2654 | PopulationRegion::new(46.4825, 30.7233, 1_010_000.0, 162.0, AreaType::Urban, "Odesa"), |
| 2655 | PopulationRegion::new(48.4647, 35.0462, 980_000.0, 424.0, AreaType::Urban, "Dnipro"), |
| 2656 | PopulationRegion::new(47.8388, 35.1396, 715_000.0, 236.0, AreaType::Urban, "Zaporizhzhia"), |
| 2657 | PopulationRegion::new(48.0, 33.0, 13_000_000.0, 601_600.0, AreaType::Rural, "Rural Ukraine"), |
| 2658 | ], 603_500.0) |
| 2659 | }, |
| 2660 | |
| 2661 | Self::UnitedArabEmirates => { |
| 2662 | // UAE: 10.0M population, 83,600 km² area, ~87% urban. |
| 2663 | CountryPopulationData::from_regions(vec![ |
| 2664 | PopulationRegion::new(25.2048, 55.2708, 3_481_000.0, 4_114.0, AreaType::Urban, "Dubai"), |
| 2665 | PopulationRegion::new(24.4539, 54.3773, 1_684_000.0, 972.0, AreaType::Urban, "Abu Dhabi"), |
| 2666 | PopulationRegion::new(25.3463, 55.4209, 807_000.0, 259.0, AreaType::Urban, "Sharjah"), |
| 2667 | PopulationRegion::new(25.4052, 56.2611, 545_000.0, 100.0, AreaType::Urban, "Ajman"), |
| 2668 | PopulationRegion::new(25.3350, 55.3890, 262_000.0, 80.0, AreaType::Urban, "Al Ain"), |
| 2669 | PopulationRegion::new(25.4000, 55.5136, 230_000.0, 70.0, AreaType::Urban, "Ras Al Khaimah"), |
| 2670 | PopulationRegion::new(25.1294, 55.3765, 140_000.0, 60.0, AreaType::Urban, "Fujairah"), |
| 2671 | PopulationRegion::new(24.9, 55.0, 668_000.0, 78_145.0, AreaType::Rural, "Rural UAE"), |
| 2672 | ], 83_600.0) |
| 2673 | }, |
| 2674 | |
| 2675 | Self::UnitedKingdom => { |
| 2676 | // UK: 67.7M population, 242,495 km² area, ~84% urban. |
| 2677 | CountryPopulationData::from_regions(vec![ |
| 2678 | PopulationRegion::new(51.5074, -0.1278, 9_648_000.0, 1_738.0, AreaType::Urban, "London Metro"), |
| 2679 | PopulationRegion::new(52.4862, -1.8904, 2_938_000.0, 599.0, AreaType::Urban, "Birmingham Metro"), |
| 2680 | PopulationRegion::new(53.4808, -2.2426, 2_731_000.0, 1_277.0, AreaType::Urban, "Manchester Metro"), |
| 2681 | PopulationRegion::new(53.8008, -1.5491, 2_347_000.0, 488.0, AreaType::Urban, "Leeds-Bradford"), |
| 2682 | PopulationRegion::new(55.8642, -4.2518, 1_861_000.0, 3_339.0, AreaType::Urban, "Glasgow Metro"), |
| 2683 | PopulationRegion::new(53.4084, -2.9916, 1_557_000.0, 646.0, AreaType::Urban, "Liverpool Metro"), |
| 2684 | PopulationRegion::new(53.3811, -1.4701, 1_376_000.0, 1_553.0, AreaType::Urban, "Sheffield Metro"), |
| 2685 | PopulationRegion::new(54.9783, -1.6178, 1_100_000.0, 2_329.0, AreaType::Urban, "Newcastle Metro"), |
| 2686 | PopulationRegion::new(52.9548, -1.1581, 919_000.0, 641.0, AreaType::Urban, "Nottingham Metro"), |
| 2687 | PopulationRegion::new(51.4545, -2.5879, 909_000.0, 1_015.0, AreaType::Urban, "Bristol Metro"), |
| 2688 | PopulationRegion::new(55.9533, -3.1883, 902_000.0, 264.0, AreaType::Urban, "Edinburgh"), |
| 2689 | PopulationRegion::new(50.8229, -0.1363, 789_000.0, 641.0, AreaType::Urban, "Brighton"), |
| 2690 | PopulationRegion::new(52.2053, 0.1218, 752_000.0, 634.0, AreaType::Urban, "Cambridge"), |
| 2691 | PopulationRegion::new(50.9097, -1.4044, 636_000.0, 394.0, AreaType::Urban, "Southampton"), |
| 2692 | PopulationRegion::new(50.7256, -3.5269, 617_000.0, 816.0, AreaType::Urban, "Plymouth"), |
| 2693 | PopulationRegion::new(53.0, -1.5, 6_500_000.0, 230_000.0, AreaType::Rural, "Rural UK"), |
| 2694 | ], 242_495.0) |
| 2695 | }, |
| 2696 | |
| 2697 | Self::UnitedStatesOfAmerica => { |
| 2698 | // USA: 331.9M population, 9,833,520 km² area, ~83% urban. |
| 2699 | CountryPopulationData::from_regions(vec![ |
| 2700 | PopulationRegion::new(40.7128, -74.0060, 20_141_000.0, 17_405.0, AreaType::Urban, "New York Metro"), |
| 2701 | PopulationRegion::new(34.0522, -118.2437, 13_201_000.0, 12_562.0, AreaType::Urban, "Los Angeles Metro"), |
| 2702 | PopulationRegion::new(41.8781, -87.6298, 9_620_000.0, 10_857.0, AreaType::Urban, "Chicago Metro"), |
| 2703 | PopulationRegion::new(32.7767, -96.7970, 7_638_000.0, 9_287.0, AreaType::Urban, "Dallas-Fort Worth"), |
| 2704 | PopulationRegion::new(29.7604, -95.3698, 7_122_000.0, 10_063.0, AreaType::Urban, "Houston Metro"), |
| 2705 | PopulationRegion::new(38.9072, -77.0369, 6_385_000.0, 14_413.0, AreaType::Urban, "Washington DC Metro"), |
| 2706 | PopulationRegion::new(39.9526, -75.1652, 6_246_000.0, 13_257.0, AreaType::Urban, "Philadelphia Metro"), |
| 2707 | PopulationRegion::new(33.7490, -84.3880, 6_090_000.0, 8_377.0, AreaType::Urban, "Atlanta Metro"), |
| 2708 | PopulationRegion::new(25.7617, -80.1918, 6_013_000.0, 6_138.0, AreaType::Urban, "Miami Metro"), |
| 2709 | PopulationRegion::new(33.4484, -112.0740, 5_060_000.0, 14_599.0, AreaType::Urban, "Phoenix Metro"), |
| 2710 | PopulationRegion::new(42.3601, -71.0589, 4_942_000.0, 11_701.0, AreaType::Urban, "Boston Metro"), |
| 2711 | PopulationRegion::new(37.7749, -122.4194, 4_750_000.0, 6_985.0, AreaType::Urban, "San Francisco Bay Area"), |
| 2712 | PopulationRegion::new(32.7157, -117.1611, 3_339_000.0, 4_527.0, AreaType::Urban, "San Diego Metro"), |
| 2713 | PopulationRegion::new(44.9778, -93.2650, 3_691_000.0, 16_012.0, AreaType::Urban, "Minneapolis-St. Paul"), |
| 2714 | PopulationRegion::new(42.8864, -78.8784, 4_089_000.0, 7_315.0, AreaType::Urban, "Detroit Metro"), |
| 2715 | PopulationRegion::new(27.9506, -82.4572, 3_243_000.0, 6_376.0, AreaType::Urban, "Tampa Bay Metro"), |
| 2716 | PopulationRegion::new(47.6062, -122.3321, 4_019_000.0, 15_210.0, AreaType::Urban, "Seattle Metro"), |
| 2717 | PopulationRegion::new(39.7392, -104.9903, 2_968_000.0, 21_622.0, AreaType::Urban, "Denver Metro"), |
| 2718 | PopulationRegion::new(45.5152, -122.6784, 2_513_000.0, 6_685.0, AreaType::Urban, "Portland Metro"), |
| 2719 | PopulationRegion::new(28.5383, -81.3792, 2_609_000.0, 4_013.0, AreaType::Urban, "Orlando Metro"), |
| 2720 | PopulationRegion::new(39.0997, -94.5786, 2_193_000.0, 20_570.0, AreaType::Urban, "Kansas City Metro"), |
| 2721 | PopulationRegion::new(40.4406, -79.9959, 2_324_000.0, 13_761.0, AreaType::Urban, "Pittsburgh Metro"), |
| 2722 | PopulationRegion::new(40.7608, -111.8910, 2_607_000.0, 21_590.0, AreaType::Urban, "Salt Lake City Metro"), |
| 2723 | PopulationRegion::new(39.7684, -86.1581, 2_111_000.0, 9_885.0, AreaType::Urban, "Indianapolis Metro"), |
| 2724 | PopulationRegion::new(39.1031, -84.5120, 2_256_000.0, 12_072.0, AreaType::Urban, "Cincinnati Metro"), |
| 2725 | PopulationRegion::new(41.4993, -81.6944, 2_048_000.0, 10_895.0, AreaType::Urban, "Cleveland Metro"), |
| 2726 | PopulationRegion::new(36.1627, -86.7816, 2_011_000.0, 13_310.0, AreaType::Urban, "Nashville Metro"), |
| 2727 | PopulationRegion::new(30.2672, -97.7431, 2_295_000.0, 11_100.0, AreaType::Urban, "Austin Metro"), |
| 2728 | PopulationRegion::new(29.4241, -98.4936, 2_588_000.0, 20_824.0, AreaType::Urban, "San Antonio Metro"), |
| 2729 | PopulationRegion::new(36.1540, -95.9928, 1_044_000.0, 9_305.0, AreaType::Urban, "Tulsa Metro"), |
| 2730 | PopulationRegion::new(38.0, -97.0, 40_000_000.0, 9_600_000.0, AreaType::Rural, "Rural USA"), |
| 2731 | ], 9_833_520.0) |
| 2732 | }, |
| 2733 | |
| 2734 | Self::Uruguay => { |
| 2735 | // Uruguay: 3.5M population, 181,034 km² area, ~95% urban. |
| 2736 | CountryPopulationData::from_regions(vec![ |
| 2737 | PopulationRegion::new(-34.9011, -56.1645, 1_381_000.0, 200.0, AreaType::Urban, "Montevideo"), |
| 2738 | PopulationRegion::new(-31.3833, -57.9667, 113_000.0, 25.0, AreaType::Urban, "Salto"), |
| 2739 | PopulationRegion::new(-32.3333, -58.0833, 87_000.0, 20.0, AreaType::Urban, "Paysandú"), |
| 2740 | PopulationRegion::new(-33.2524, -58.0265, 78_000.0, 17.0, AreaType::Urban, "Mercedes"), |
| 2741 | PopulationRegion::new(-34.3375, -56.7139, 58_000.0, 13.0, AreaType::Urban, "Las Piedras"), |
| 2742 | PopulationRegion::new(-33.0, -56.0, 50_000.0, 180_759.0, AreaType::Rural, "Rural Uruguay"), |
| 2743 | ], 181_034.0) |
| 2744 | }, |
| 2745 | |
| 2746 | Self::Uzbekistan => { |
| 2747 | // Uzbekistan: 34.9M population, 448,978 km² area, ~50% urban. |
| 2748 | CountryPopulationData::from_regions(vec![ |
| 2749 | PopulationRegion::new(41.2995, 69.2401, 2_571_000.0, 335.0, AreaType::Urban, "Tashkent"), |
| 2750 | PopulationRegion::new(39.6530, 66.9597, 546_000.0, 120.0, AreaType::Urban, "Samarkand"), |
| 2751 | PopulationRegion::new(40.3789, 71.7825, 544_000.0, 90.0, AreaType::Urban, "Namangan"), |
| 2752 | PopulationRegion::new(40.5283, 70.9429, 544_000.0, 77.0, AreaType::Urban, "Andijan"), |
| 2753 | PopulationRegion::new(39.7747, 64.4286, 279_000.0, 60.0, AreaType::Urban, "Bukhara"), |
| 2754 | PopulationRegion::new(40.8420, 69.6333, 259_000.0, 55.0, AreaType::Urban, "Qarshi"), |
| 2755 | PopulationRegion::new(42.4589, 59.6103, 232_000.0, 50.0, AreaType::Urban, "Nukus"), |
| 2756 | PopulationRegion::new(40.1167, 67.8422, 183_000.0, 40.0, AreaType::Urban, "Jizzakh"), |
| 2757 | PopulationRegion::new(41.0, 64.0, 16_500_000.0, 448_251.0, AreaType::Rural, "Rural Uzbekistan"), |
| 2758 | ], 448_978.0) |
| 2759 | }, |
| 2760 | |
| 2761 | Self::Vanuatu => { |
| 2762 | // Vanuatu: 315k population, 12,189 km² area, ~25% urban. |
| 2763 | CountryPopulationData::from_regions(vec![ |
| 2764 | PopulationRegion::new(-17.7333, 168.3273, 66_000.0, 23.0, AreaType::Urban, "Port Vila"), |
| 2765 | PopulationRegion::new(-15.3767, 167.1627, 16_000.0, 10.0, AreaType::Urban, "Luganville"), |
| 2766 | PopulationRegion::new(-17.0, 168.0, 237_000.0, 12_156.0, AreaType::Rural, "Rural Vanuatu"), |
| 2767 | ], 12_189.0) |
| 2768 | }, |
| 2769 | |
| 2770 | Self::VaticanCity => { |
| 2771 | // Vatican City: 825 population, 0.44 km² area, ~100% urban. |
| 2772 | CountryPopulationData::from_regions(vec![ |
| 2773 | PopulationRegion::new(41.9029, 12.4534, 825.0, 0.44, AreaType::Urban, "Vatican City"), |
| 2774 | ], 0.44) |
| 2775 | }, |
| 2776 | |
| 2777 | Self::Venezuela => { |
| 2778 | // Venezuela: 28.7M population, 916,445 km² area, ~88% urban. |
| 2779 | CountryPopulationData::from_regions(vec![ |
| 2780 | PopulationRegion::new(10.4806, -66.9036, 5_285_000.0, 4_715.0, AreaType::Urban, "Caracas Metro"), |
| 2781 | PopulationRegion::new(10.6585, -71.6406, 2_458_000.0, 623.0, AreaType::Urban, "Maracaibo"), |
| 2782 | PopulationRegion::new(10.2442, -67.6066, 2_182_000.0, 2_050.0, AreaType::Urban, "Valencia"), |
| 2783 | PopulationRegion::new(10.3632, -71.6245, 1_628_000.0, 441.0, AreaType::Urban, "Maracay"), |
| 2784 | PopulationRegion::new(10.2340, -64.1934, 1_239_000.0, 192.0, AreaType::Urban, "Barcelona-Puerto La Cruz"), |
| 2785 | PopulationRegion::new(8.6196, -70.2049, 495_000.0, 30.0, AreaType::Urban, "Mérida"), |
| 2786 | PopulationRegion::new(7.8936, -72.5048, 463_000.0, 25.0, AreaType::Urban, "San Cristóbal"), |
| 2787 | PopulationRegion::new(10.0678, -69.3467, 453_000.0, 20.0, AreaType::Urban, "Barquisimeto"), |
| 2788 | PopulationRegion::new(8.0, -66.0, 2_000_000.0, 909_000.0, AreaType::Rural, "Rural Venezuela"), |
| 2789 | ], 916_445.0) |
| 2790 | }, |
| 2791 | |
| 2792 | Self::Vietnam => { |
| 2793 | // Vietnam: 98.2M population, 331,212 km² area, ~38% urban. |
| 2794 | CountryPopulationData::from_regions(vec![ |
| 2795 | PopulationRegion::new(10.8231, 106.6297, 8_993_000.0, 2_061.0, AreaType::Urban, "Ho Chi Minh City"), |
| 2796 | PopulationRegion::new(21.0285, 105.8542, 8_054_000.0, 3_359.0, AreaType::Urban, "Hanoi"), |
| 2797 | PopulationRegion::new(20.8449, 106.6881, 1_493_000.0, 1_495.0, AreaType::Urban, "Haiphong"), |
| 2798 | PopulationRegion::new(16.0544, 108.2022, 1_231_000.0, 1_285.0, AreaType::Urban, "Da Nang"), |
| 2799 | PopulationRegion::new(10.2539, 105.9721, 1_200_000.0, 1_440.0, AreaType::Urban, "Can Tho"), |
| 2800 | PopulationRegion::new(11.9404, 108.4583, 640_000.0, 3_568.0, AreaType::Urban, "Dalat"), |
| 2801 | PopulationRegion::new(10.9642, 106.8251, 532_000.0, 209.0, AreaType::Urban, "Bien Hoa"), |
| 2802 | PopulationRegion::new(12.2388, 109.1888, 527_000.0, 209.0, AreaType::Urban, "Nha Trang"), |
| 2803 | PopulationRegion::new(16.4498, 107.5623, 519_000.0, 117.0, AreaType::Urban, "Hue"), |
| 2804 | PopulationRegion::new(10.5417, 106.4142, 513_000.0, 650.0, AreaType::Urban, "Vung Tau"), |
| 2805 | PopulationRegion::new(16.0, 107.0, 57_300_000.0, 322_600.0, AreaType::Rural, "Rural Vietnam"), |
| 2806 | ], 331_212.0) |
| 2807 | }, |
| 2808 | |
| 2809 | Self::Yemen => { |
| 2810 | // Yemen: 30.5M population, 527,968 km² area, ~38% urban. |
| 2811 | CountryPopulationData::from_regions(vec![ |
| 2812 | PopulationRegion::new(15.3547, 44.2067, 3_075_000.0, 200.0, AreaType::Urban, "Sana'a"), |
| 2813 | PopulationRegion::new(12.7794, 45.0187, 1_079_000.0, 75.0, AreaType::Urban, "Aden"), |
| 2814 | PopulationRegion::new(14.5434, 49.1241, 738_000.0, 60.0, AreaType::Urban, "Al Mukalla"), |
| 2815 | PopulationRegion::new(13.5766, 44.0177, 724_000.0, 50.0, AreaType::Urban, "Ta'izz"), |
| 2816 | PopulationRegion::new(15.0, 48.0, 18_900_000.0, 527_600.0, AreaType::Rural, "Rural Yemen"), |
| 2817 | ], 527_968.0) |
| 2818 | }, |
| 2819 | |
| 2820 | Self::Zambia => { |
| 2821 | // Zambia: 19.0M population, 752,618 km² area, ~45% urban. |
| 2822 | CountryPopulationData::from_regions(vec![ |
| 2823 | PopulationRegion::new(-15.4067, 28.2871, 2_906_000.0, 375.0, AreaType::Urban, "Lusaka"), |
| 2824 | PopulationRegion::new(-12.9658, 28.6286, 765_000.0, 85.0, AreaType::Urban, "Ndola"), |
| 2825 | PopulationRegion::new(-12.8097, 28.2133, 678_000.0, 52.0, AreaType::Urban, "Kitwe"), |
| 2826 | PopulationRegion::new(-15.8562, 27.8523, 293_000.0, 30.0, AreaType::Urban, "Kabwe"), |
| 2827 | PopulationRegion::new(-13.0, 28.0, 10_400_000.0, 752_100.0, AreaType::Rural, "Rural Zambia"), |
| 2828 | ], 752_618.0) |
| 2829 | }, |
| 2830 | |
| 2831 | Self::Zimbabwe => { |
| 2832 | // Zimbabwe: 15.1M population, 390,757 km² area, ~32% urban. |
| 2833 | CountryPopulationData::from_regions(vec![ |
| 2834 | PopulationRegion::new(-17.8252, 31.0335, 2_331_000.0, 872.0, AreaType::Urban, "Harare Metro"), |
| 2835 | PopulationRegion::new(-20.1530, 28.5766, 741_000.0, 479.0, AreaType::Urban, "Bulawayo"), |
| 2836 | PopulationRegion::new(-18.0208, 31.0719, 200_000.0, 30.0, AreaType::Urban, "Chitungwiza"), |
| 2837 | PopulationRegion::new(-19.4500, 29.8167, 155_000.0, 25.0, AreaType::Urban, "Gweru"), |
| 2838 | PopulationRegion::new(-19.0, 30.0, 10_300_000.0, 389_400.0, AreaType::Rural, "Rural Zimbabwe"), |
| 2839 | ], 390_757.0) |
| 2840 | }, |
| 2841 | } |
| 2842 | } |
| 2843 | |
| 2844 | } |
| 2845 | |
| 2846 | /// Classification of a population centre as urban or rural. |
| 2847 | #[derive(Clone, Debug)] |
| 2848 | pub struct LocationPopulationRegion { |
| 2849 | /// Latitude of a location in the region in decimal degrees. |
| 2850 | pub latitude: f64, |
| 2851 | /// Longitude of a location in the region in decimal degrees. |
| 2852 | pub longitude: f64, |
| 2853 | /// Region with population data. |
| 2854 | pub region: PopulationRegion, |
| 2855 | } |
| 2856 | |
| 2857 | /// Classification of a population centre as urban or rural. |
| 2858 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] |
| 2859 | pub enum AreaType { |
| 2860 | /// Urban area - typically cities and towns with >50k population. |
| 2861 | Urban, |
| 2862 | /// Rural area - countryside, villages, and small towns. |
| 2863 | Rural, |
| 2864 | } |
| 2865 | |
| 2866 | /// Represents a geographical region with population data. |
| 2867 | /// |
| 2868 | /// Each region is non-overlapping and represents either an urban centre |
| 2869 | /// or a rural district within a country. |
| 2870 | #[derive(Clone, Debug)] |
| 2871 | pub struct PopulationRegion { |
| 2872 | /// Central latitude of the region in decimal degrees. |
| 2873 | pub latitude: f64, |
| 2874 | /// Central longitude of the region in decimal degrees. |
| 2875 | pub longitude: f64, |
| 2876 | /// Total population of the region. |
| 2877 | pub population: f64, |
| 2878 | /// Area of the region in square kilometres. |
| 2879 | pub area_km2: f64, |
| 2880 | /// Whether this is an urban or rural region. |
| 2881 | pub area_type: AreaType, |
| 2882 | /// Name of the region (city name or district description). |
| 2883 | pub name: &'static str, |
| 2884 | } |
| 2885 | |
| 2886 | impl PopulationRegion { |
| 2887 | /// Creates a new population region. |
| 2888 | pub fn new( |
| 2889 | latitude: f64, |
| 2890 | longitude: f64, |
| 2891 | population: f64, |
| 2892 | area_km2: f64, |
| 2893 | area_type: AreaType, |
| 2894 | name: &'static str, |
| 2895 | ) |
| 2896 | -> Self |
| 2897 | { |
| 2898 | Self { |
| 2899 | latitude, |
| 2900 | longitude, |
| 2901 | population, |
| 2902 | area_km2, |
| 2903 | area_type, |
| 2904 | name, |
| 2905 | } |
| 2906 | } |
| 2907 | |
| 2908 | /// Calculates the population density (people per km²). |
| 2909 | pub fn density(&self) -> f64 { |
| 2910 | self.population / self.area_km2 |
| 2911 | } |
| 2912 | |
| 2913 | /// Generates a random point within this region. |
| 2914 | /// |
| 2915 | /// For urban areas, uses a concentrated distribution near the centre. |
| 2916 | /// For rural areas, uses a more spread out distribution. |
| 2917 | fn random_point_in_region(&self) -> (f64, f64) { |
| 2918 | // Calculate approximate radius from area (assuming roughly circular regions). |
| 2919 | let radius_km = (self.area_km2 / std::f64::consts::PI).sqrt(); |
| 2920 | |
| 2921 | // Convert to degrees (rough approximation). |
| 2922 | // 1 degree latitude ≈ 111km. |
| 2923 | let radius_lat = radius_km / 111.0; |
| 2924 | let radius_lon = radius_km / (111.0 * self.latitude.to_radians().cos()); |
| 2925 | |
| 2926 | // Generate point distribution based on area type. |
| 2927 | let (r, theta) = match self.area_type { |
| 2928 | AreaType::Urban => { |
| 2929 | // Urban: concentrated near centre (exponential decay). |
| 2930 | let r = -Rand::value::<f64>().ln() * 0.3; // Most within 30% of radius. |
| 2931 | let theta = Rand::value::<f64>() * 2.0 * std::f64::consts::PI; |
| 2932 | (r.min(1.0), theta) |
| 2933 | }, |
| 2934 | AreaType::Rural => { |
| 2935 | // Rural: more uniform distribution. |
| 2936 | let r = Rand::value::<f64>().sqrt(); // Uniform in circle. |
| 2937 | let theta = Rand::value::<f64>() * 2.0 * std::f64::consts::PI; |
| 2938 | (r, theta) |
| 2939 | }, |
| 2940 | }; |
| 2941 | |
| 2942 | let lat_offset = r * radius_lat * theta.sin(); |
| 2943 | let lon_offset = r * radius_lon * theta.cos(); |
| 2944 | |
| 2945 | (self.latitude + lat_offset, self.longitude + lon_offset) |
| 2946 | } |
| 2947 | } |
| 2948 | |
| 2949 | /// Country population data including total statistics. |
| 2950 | #[derive(Clone, Debug)] |
| 2951 | pub struct CountryPopulationData { |
| 2952 | /// All regions in the country. |
| 2953 | pub regions: Vec<PopulationRegion>, |
| 2954 | /// Total country population (sum of all regions). |
| 2955 | pub total_population: f64, |
| 2956 | /// Total country area in km². |
| 2957 | pub total_area_km2: f64, |
| 2958 | } |
| 2959 | |
| 2960 | impl CountryPopulationData { |
| 2961 | /// Creates country data from a list of regions. |
| 2962 | pub fn from_regions(regions: Vec<PopulationRegion>, total_area_km2: f64) -> Self { |
| 2963 | let total_population = regions.iter().map(|r| r.population).sum(); |
| 2964 | Self { |
| 2965 | regions, |
| 2966 | total_population, |
| 2967 | total_area_km2, |
| 2968 | } |
| 2969 | } |
| 2970 | |
| 2971 | /// Returns the percentage of population in urban areas. |
| 2972 | pub fn urban_population_percentage(&self) -> f64 { |
| 2973 | let urban_pop: f64 = self.regions |
| 2974 | .iter() |
| 2975 | .filter(|r| r.area_type == AreaType::Urban) |
| 2976 | .map(|r| r.population) |
| 2977 | .sum(); |
| 2978 | (urban_pop / self.total_population) * 100.0 |
| 2979 | } |
| 2980 | } |
| 2981 | |
| 2982 | #[derive(Debug, Display)] |
| 2983 | pub enum CelestialBodies { |
| 2984 | Earth, |
| 2985 | Jupiter, |
| 2986 | Luna, |
| 2987 | Mars, |
| 2988 | Mercury, |
| 2989 | Saturn, |
| 2990 | } |