-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathworld-sample.toml
More file actions
3513 lines (3237 loc) · 174 KB
/
Copy pathworld-sample.toml
File metadata and controls
3513 lines (3237 loc) · 174 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Scale-test city list — one city per continent / climate regime, covering
# the full topology + cost-surface regime space.
#
# This is the stepping stone between the 3-city calibration set and the
# 500-city production batch. Every city here has a hand-tuned bbox so a
# failed pull can be diagnosed quickly. Once this set produces clean
# designs across the board, the 500-city list can be generated
# programmatically from GeoNames (see osr_batch.geonames_import).
#
# Selection criteria:
# - ≥ 1 city per inhabited continent
# - ≥ 1 city per climate preset (hot-desert, tropical-wet,
# tropical-arid, temperate-continental, mediterranean, cold-continental)
# - Size range: 400k (single-radial) → 15M (hub-and-spoke-dual-ring)
#
# Cities here may include ones that already operate metro/tram/LRT
# (Lyon, Tunis). Those are kept deliberately as solver test targets —
# their rich OSM data exercises bridge/tunnel classification and
# dense-anchor routing. The production 500-city scan
# (osr-cities-scan, default behaviour) excludes them via
# osr_batch/existing_transit.py.
#
# ---------------------------------------------------------------------------
# POPULATION SOURCE-OF-TRUTH POLICY
# ---------------------------------------------------------------------------
# This file is the **canonical source for population** across the OSR
# pipeline. Every design.toml emitted by `osr-design` must use the
# population from this catalogue.
#
# Definition of "population" — the **served catchment of a light-metro
# network**. That means the **broadest administrative unit the metro is
# designed to serve**, including suburban + rural portions of the
# subdistrict / canton / governorate / agglomeration / metropolitan
# area, not the city-proper municipality. Samawah's 373,770 is the
# subdistrict total (urban 256,689 + rural 117,081). Baghdad's
# 9,780,429 is the governorate, not the city limits (7,837,463). Cuenca
# is the canton total (817,100), not the urban core (361,524). This
# matters because the rolling-stock family band in RFC 0008 §5
# (≤ 300k → tram-2car, 300k–1M → light-metro-3car, 1M–3M →
# metro-4car, ≥ 3M → metro-6car) selects the consist that fits the
# *served* ridership.
#
# Sources are national-statistics offices (INSEE, INEC, INS, KNBS,
# COSIT) or the most recent census, verified against
# citypopulation.de which integrates national-stat-office census
# releases. Wikipedia is NOT used as a primary source — its city
# figures are routinely stale or conflate municipality vs metro.
#
# When updating: bump `population` AND `population_unit` AND
# `population_source` AND `population_source_year` together. Re-run
# `cargo run --bin osr-design -- --slug <slug> ...` to propagate to
# the city's design.toml.
# ---------------------------------------------------------------------------
# BBOX-SIZING POLICY
# ---------------------------------------------------------------------------
# A bbox must cover the **served catchment**, not the city-proper
# municipality. A successful metro ALWAYS reaches past the urban core
# into the suburbs / satellite towns / peripheral employment zones —
# so the bbox is sized at the *served-catchment radius* of the
# rolling-stock family that the population implies (RFC 0008 §5):
#
# tram-2car (≤ 300 k) → ~15 × 15 km (single-radial)
# light-metro-3car ( 300 k – 1 M) → ~20 × 20 km (radial+ring)
# metro-4car ( 1 M – 3 M) → ~30 × 30 km (cross+ring)
# metro-6car ( ≥ 3 M) → ~40–55 × 40–55 km (hub-and-spoke-dual-ring)
#
# These are typical metro-system extents for systems already in
# revenue service: the Greater Paris RER reaches 50 km radius from
# Châtelet; the Tokyo subway 50 km via the through-running JR lines;
# the Mexico City metro 35 km from Zócalo to Cuatro Caminos. The
# OSR pipeline must be told this catchment via the bbox — the
# greedy synthesizer does not invent extent it cannot see.
#
# Coastal / topographic exclusions: clip the bbox so that the sea
# (Tunis: Lake of Tunis), uninhabited mountains (Cuenca: Cordillera
# Real eastern slope), or military zones (Baghdad: BIAP perimeter)
# do not waste raster cells on zero-demand land. Document the
# exclusion in a comment alongside the bbox line.
# ---------------------------------------------------------------------------
# ---- Middle East + North Africa --------------------------------------
[[cities]]
slug = "samawah"
country = "IQ"
continent = "west-asia"
population = 373770
population_unit = "As-Samawah Subdistrict (urban 256,689 + rural 117,081)"
population_source = "Iraq 2024 General Population Census; via citypopulation.de/en/iraq/mun/admin/al_muthannā/32011__as_samāwah"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# Bbox widened 2026-04-26 to served-catchment scale (~20 × 20 km
# for a ≤500 k mid-city). Previous 9 × 9 km core-only bbox starved
# the synthesizer of suburb anchors; metros need to reach the urban
# fringe and adjoining rural-population pockets that feed it.
bbox = { south = 31.22, west = 45.18, north = 31.40, east = 45.38 }
[[cities]]
slug = "baghdad"
country = "IQ"
continent = "west-asia"
population = 9780429
population_unit = "Baghdad Governorate (city 7,837,463 + surrounding governorate population)"
population_source = "Iraq 2024 General Population Census; via citypopulation.de/en/iraq/cities"
population_source_year = 2024
climate = "hot-desert"
profile = "mega-city-desert"
# Bbox extended south + east 2026-04-26 to cover Basmaya New City
# (~33.18 °N, 44.62 °E — was clipped at the SE corner) and the
# Diyala-side suburbs SE of Al-Madain.
bbox = { south = 33.05, west = 44.20, north = 33.50, east = 44.75 }
[[cities]]
slug = "mosul"
country = "IQ"
continent = "west-asia"
population = 1940000
population_unit = "Mosul Subdistrict (Nineveh Governorate; reconstruction-period 2024 estimate, post-2017 displacement)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq/cities"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~30 × 30 km. Both banks of the Tigris (Old City west / Left Bank
# east); covers Hammam al-Alil (south) and the northern Bashiqa
# direction. Excludes the Sinjar Mountains (uninhabited rock) by
# clipping west bound at 42.95.
bbox = { south = 36.20, west = 42.95, north = 36.50, east = 43.30 }
[[cities]]
slug = "basra"
country = "IQ"
continent = "west-asia"
population = 3955000
population_unit = "Basra Governorate (Basrah city + Hartha + Zubair + Abu al-Khasib + Faw)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq/cities"
population_source_year = 2024
climate = "hot-desert"
profile = "mega-city-desert"
# ~50 × 50 km Shatt al-Arab basin. Covers Zubair (west, oilfield-
# town extension), Hartha (north), Abu al-Khasib (south-east). Does
# not extend to Faw (~80 km south at the Gulf) or Umm Qasr port
# (~50 km south, separate catchment).
bbox = { south = 30.30, west = 47.55, north = 30.75, east = 48.05 }
[[cities]]
slug = "erbil"
country = "IQ"
continent = "west-asia"
population = 1952000
population_unit = "Erbil Governorate (Erbil city + Khabat + Shamamak + adjoining Kurdish-region urban units)"
population_source = "Kurdistan Regional Statistics Office (KRSO) 2024 estimate; corroborated by Iraq 2024 Census prelim"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~30 × 30 km centred on the Citadel (UNESCO heritage core). Three
# concentric Erbil ring roads visible in OSM data already; covers
# the airport (south-west), Ankawa (north Christian district),
# and the new-town extensions east + south.
bbox = { south = 36.05, west = 43.85, north = 36.32, east = 44.18 }
[[cities]]
slug = "sulaymaniyah"
country = "IQ"
continent = "west-asia"
population = 2150000
population_unit = "Sulaymaniyah Governorate (Slemani city + Tasluja + Bakrajo + Bazian + Sarchnar + Halabja-direction)"
population_source = "Kurdistan Regional Statistics Office (KRSO) 2024 estimate"
population_source_year = 2024
climate = "temperate-continental"
profile = "large-city-cold"
# ~31 × 30 km. Mountain valley topology — the city sits in a basin
# bounded by Goyzha (NE) and Azmar (E) ranges. Bbox covers Tasluja
# (NW, satellite town), Bazian gap (W), Sarchnar (S). Severe
# terrain — civil classifier will tag elevated for the ridge
# crossings.
bbox = { south = 35.42, west = 45.27, north = 35.70, east = 45.60 }
[[cities]]
slug = "kirkuk"
country = "IQ"
continent = "west-asia"
population = 1780000
population_unit = "Kirkuk Governorate (Kirkuk city + Daquq + Hawija + adjoining mixed Kurdish/Arab/Turkmen districts)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~31 × 30 km on the Khasa River. Covers the oil-field belt SW
# (Baba Gurgur), the airport (S), and the suburban extensions to
# the NE. Hawija (~50 km W) is a separate catchment, not included.
bbox = { south = 35.32, west = 44.22, north = 35.60, east = 44.55 }
[[cities]]
slug = "najaf"
country = "IQ"
continent = "west-asia"
population = 1540000
population_unit = "Najaf Governorate (Najaf city + Kufa twin-city + Manathira)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~28 × 31 km. Twin-city catchment: Najaf (Imam Ali shrine + Wadi
# al-Salam cemetery west) + Kufa (Imam Ali mosque east of the
# Euphrates). Covers Najaf International Airport (SE) which serves
# millions of pilgrim arrivals annually.
bbox = { south = 31.85, west = 44.18, north = 32.10, east = 44.50 }
[[cities]]
slug = "karbala"
country = "IQ"
continent = "west-asia"
population = 1390000
population_unit = "Karbala Governorate (Karbala city + Hindiyah + Ain Al-Tamur)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~28 × 28 km. Pilgrim-volume city — Imam Hussein + Imam Abbas
# shrines anchor the centre; ~25 M pilgrims annually for Arba'een
# alone. Bbox covers Hindiyah (E across the Euphrates) and the
# date-palm outskirts S.
bbox = { south = 32.50, west = 43.90, north = 32.75, east = 44.20 }
[[cities]]
slug = "hillah"
country = "IQ"
continent = "west-asia"
population = 700000
population_unit = "Hillah Subdistrict (Babil Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 24 km on the Hillah branch of the Euphrates. Covers Babylon
# archaeological site (NE — ruins of the ancient city, UNESCO 2019)
# + Imam Hamza shrine (SW). Tourism + pilgrimage drive secondary
# demand beyond the resident population.
bbox = { south = 32.37, west = 44.30, north = 32.57, east = 44.55 }
[[cities]]
slug = "nasiriyah"
country = "IQ"
continent = "west-asia"
population = 705000
population_unit = "Nasiriyah Subdistrict (Dhi Qar Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 25 km on the Euphrates. Covers Suq al-Shuyukh (SE,
# satellite town) + the Ur archaeological site (W — ziggurat,
# major tourism draw). Marshlands extend SE beyond bbox.
bbox = { south = 30.95, west = 46.15, north = 31.15, east = 46.40 }
[[cities]]
slug = "amarah"
country = "IQ"
continent = "west-asia"
population = 660000
population_unit = "Amarah Subdistrict (Maysan Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~23 × 23 km on the Tigris near the Iranian border. Covers Majar
# al-Kabir (S) + the al-Halfaya oil-field employment catchment to
# the E. Mesopotamian marshes (UNESCO) extend S/W beyond bbox.
bbox = { south = 31.74, west = 47.05, north = 31.95, east = 47.28 }
[[cities]]
slug = "ramadi"
country = "IQ"
continent = "west-asia"
population = 525000
population_unit = "Ramadi Subdistrict (Anbar Governorate — capital city; reconstruction-period 2024 figure)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km on the Euphrates. Habbaniyah lake to the W; Anbar
# University SW. Reconstruction-period — civil-class classifier
# may pick at-grade more aggressively for damaged-infra zones.
bbox = { south = 33.32, west = 43.20, north = 33.52, east = 43.42 }
[[cities]]
slug = "baqubah"
country = "IQ"
continent = "west-asia"
population = 470000
population_unit = "Baqubah Subdistrict (Diyala Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km on the Diyala river. Date-palm orchard belt to the
# E + S. The mainline railway from Baghdad → Khanaqin runs through
# the city, useful brownfield context for OSR retrofit.
bbox = { south = 33.65, west = 44.55, north = 33.85, east = 44.78 }
[[cities]]
slug = "kut"
country = "IQ"
continent = "west-asia"
population = 410000
population_unit = "Kut Subdistrict (Wasit Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km on the Tigris U-bend. Covers the Kut Barrage (E,
# major irrigation work) and the Hayy district to the W. Wasit
# University on the south bank.
bbox = { south = 32.41, west = 45.72, north = 32.61, east = 45.95 }
[[cities]]
slug = "diwaniyah"
country = "IQ"
continent = "west-asia"
population = 440000
population_unit = "Diwaniyah Subdistrict (Qadisiyyah Governorate — capital city)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km on the Diwaniyah branch of the Euphrates. Qadisiyyah
# University to the E; Afaq district NW.
bbox = { south = 31.89, west = 44.81, north = 32.09, east = 45.05 }
[[cities]]
slug = "duhok"
country = "IQ"
continent = "west-asia"
population = 360000
population_unit = "Duhok Center Subdistrict (Duhok Governorate — KRI capital)"
population_source = "Kurdistan Regional Statistics Office (KRSO) 2024 estimate"
population_source_year = 2024
climate = "temperate-continental"
profile = "mid-city-cold"
# ~21 × 21 km mountain-valley city, dammed Duhok river forming
# Duhok Lake N of the centre. Bbox covers Duhok University +
# Massif Resort hills (NE) + Sumel district (SW).
bbox = { south = 36.78, west = 42.90, north = 36.97, east = 43.10 }
[[cities]]
slug = "fallujah"
country = "IQ"
continent = "west-asia"
population = 360000
population_unit = "Fallujah Subdistrict (Anbar Governorate; post-2014 reconstruction figure)"
population_source = "Iraq 2024 General Population Census preliminary; via citypopulation.de/en/iraq"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km on the Euphrates. Heavily reconstructed since 2014;
# bbox covers the city proper + Saqlawiyah (N) + Karma (E).
bbox = { south = 33.25, west = 43.68, north = 33.45, east = 43.90 }
[[cities]]
slug = "tunis"
country = "TN"
continent = "north-africa"
population = 2900000
population_unit = "Grand Tunis (Tunis + Ariana + Manouba + Ben Arous governorates)"
population_source = "Recensement Général de la Population et de l'Habitat 2024; INS Tunisia"
population_source_year = 2024
climate = "mediterranean"
profile = "large-city-tropical"
# Bbox widened to ~36 × 36 km to cover Grand Tunis (Manouba west,
# La Marsa / Carthage north-east, Ben Arous south, Mornaguia
# south-west). East bound 10.40 stops short of the Cap Bon
# peninsula; the Lake of Tunis between bears no metro demand.
bbox = { south = 36.65, west = 9.95, north = 36.97, east = 10.40 }
# ---- Levant + Arabian Peninsula --------------------------------------
[[cities]]
slug = "sanaa"
country = "YE"
continent = "west-asia"
population = 3937500
population_unit = "Sana'a Capital Secretariat + Sana'a Governorate (Old City + Hadda + ring suburbs)"
population_source = "UN OCHA Yemen 2024 humanitarian data; baseline pre-conflict CSO census"
population_source_year = 2024
climate = "hot-arid-mountain"
profile = "mega-city-cold"
# ~35 × 35 km mountain plateau (~2 250 m elevation). Bbox covers
# Hadda (S, government district), Bani Hushaysh (E), Sa'wan (NE).
bbox = { south = 15.20, west = 44.05, north = 15.50, east = 44.40 }
[[cities]]
slug = "aden"
country = "YE"
continent = "west-asia"
population = 985000
population_unit = "Aden Governorate (8 districts: Crater + Khormaksar + Mualla + Tawahi + Sheikh Othman + Mansoura + Dar Saad + Buraiqa)"
population_source = "UN OCHA Yemen 2024 humanitarian data; pre-conflict CSO baseline"
population_source_year = 2024
climate = "hot-desert"
profile = "mid-city-desert"
# ~22 × 22 km Gulf-of-Aden coastal volcanic-crater catchment.
bbox = { south = 12.70, west = 44.92, north = 12.90, east = 45.15 }
[[cities]]
slug = "taiz"
country = "YE"
continent = "west-asia"
population = 615000
population_unit = "Taiz City + adjacent Saber + Al-Hawban districts"
population_source = "UN OCHA Yemen 2024 humanitarian data"
population_source_year = 2024
climate = "hot-arid-mountain"
profile = "mid-city-cold"
# ~20 × 20 km mountain-foot city (~1 400 m elevation, Jabal Sabir
# 3 070 m to the south). Heavy conflict damage 2015–22.
bbox = { south = 13.48, west = 43.92, north = 13.68, east = 44.12 }
[[cities]]
slug = "damascus"
country = "SY"
continent = "west-asia"
population = 2503000
population_unit = "Greater Damascus (Damascus governorate + Rif Dimashq inner ring)"
population_source = "UNFPA Syria 2024 estimate; 2004 census base + displacement adjustment"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~30 × 30 km. Old City core + Mezzeh (W) + Damascus University
# (W) + Yarmouk (S) + Ghouta agricultural ring (E). Mt Qasioun
# (~1 150 m) bounds N.
bbox = { south = 33.40, west = 36.15, north = 33.65, east = 36.45 }
[[cities]]
slug = "aleppo"
country = "SY"
continent = "west-asia"
population = 1639000
population_unit = "Aleppo city + immediate suburbs; reconstruction-period figure (peak 2.3 M pre-2012)"
population_source = "UNFPA Syria 2024 estimate; pre-war 2010 baseline + displacement / return data"
population_source_year = 2024
climate = "mediterranean"
profile = "large-city-tropical"
# ~30 × 30 km. Old City UNESCO core + industrial east-Aleppo
# (heavily damaged 2012–16) + new-Aleppo west. Reconstruction-
# period; civil-class classifier flags damaged-infra zones.
bbox = { south = 36.05, west = 37.00, north = 36.32, east = 37.30 }
[[cities]]
slug = "homs"
country = "SY"
continent = "west-asia"
population = 775000
population_unit = "Homs city + Talkalakh + Al-Qusayr; reconstruction-period figure"
population_source = "UNFPA Syria 2024 estimate"
population_source_year = 2024
climate = "mediterranean"
profile = "mid-city-tropical"
# ~22 × 22 km on the Orontes. Old City + Khalid ibn al-Walid
# Mosque + Bab Amr (heavily damaged 2012–14).
bbox = { south = 34.62, west = 36.60, north = 34.84, east = 36.85 }
[[cities]]
slug = "amman"
country = "JO"
continent = "west-asia"
population = 4007000
population_unit = "Greater Amman Municipality (22 districts; West Amman + East Amman + Zarqa-direction extensions)"
population_source = "Jordan Department of Statistics 2024 estimate; 2015 census base + projection"
population_source_year = 2024
climate = "hot-desert"
profile = "mega-city-desert"
# ~35 × 35 km hilly catchment. Bbox covers Queen Alia direction
# south + Zarqa-direction east + Wadi Saqra valleys west.
bbox = { south = 31.78, west = 35.75, north = 32.10, east = 36.10 }
[[cities]]
slug = "beirut"
country = "LB"
continent = "west-asia"
population = 2200000
population_unit = "Greater Beirut (Beirut + Mount Lebanon coastal strip + Beqaa-direction inland)"
population_source = "Lebanon CAS 2024 estimate; 2018-19 LFHLCS base + UN refugee adjustment"
population_source_year = 2024
climate = "mediterranean"
profile = "large-city-tropical"
# ~25 × 25 km coastal. Bbox covers Hamra + Achrafieh core (W),
# Bourj Hammoud (NE), Hazmieh (E into the mountains), and the
# Mount-Lebanon foothills S. Clipped at the Mediterranean to the W.
bbox = { south = 33.78, west = 35.40, north = 34.00, east = 35.65 }
[[cities]]
slug = "gaza-city"
country = "PS"
continent = "west-asia"
population = 600000
population_unit = "Gaza City (Gaza governorate northern half; pre-2023 conflict baseline)"
population_source = "Palestinian Central Bureau of Statistics (PCBS) 2024 estimate"
population_source_year = 2024
climate = "mediterranean"
profile = "mid-city-tropical"
# ~22 × 22 km coastal. Northern half of the Gaza Strip — covers
# Gaza City core, Beit Hanoun (NE), Beit Lahia (NW). The Strip
# is ~365 km² total; this bbox spans the densely-populated north.
bbox = { south = 31.45, west = 34.32, north = 31.62, east = 34.55 }
# ---- Sub-Saharan Africa ----------------------------------------------
[[cities]]
slug = "nairobi"
country = "KE"
continent = "east-africa"
population = 5700000
population_unit = "Nairobi metropolitan area (Nairobi County 4,750,100 (2023 projection) + surrounding satellite towns)"
population_source = "Kenya National Bureau of Statistics 2024 estimate; 2019 census base via citypopulation.de/en/kenya/cities"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# Bbox widened to ~50 × 50 km to cover the metro: Kiambu / Ruiru
# satellite towns (north / north-east), Athi River + Mlolongo
# (south-east), Ngong + Karen (south-west). 5.7 M served catchment
# extends well past Nairobi County core.
bbox = { south = -1.50, west = 36.65, north = -1.05, east = 37.10 }
[[cities]]
slug = "dar-es-salaam"
country = "TZ"
continent = "east-africa"
population = 7404689
population_unit = "Dar es Salaam Region (city + Kinondoni + Ilala + Temeke + Kigamboni + Ubungo districts)"
population_source = "Tanzania National Bureau of Statistics (NBS) 2022 Census; via citypopulation.de/en/tanzania"
population_source_year = 2022
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~50 × 50 km coastal metro. North-south extent covers Bagamoyo
# Road suburbs (north), Mbagala + Kigamboni (south); inland to
# Kibaha + Pugu (west). East bound stops at the Indian Ocean.
bbox = { south = -7.05, west = 39.05, north = -6.55, east = 39.50 }
[[cities]]
slug = "khartoum"
country = "SD"
continent = "north-africa"
population = 5829000
population_unit = "Greater Khartoum (Khartoum + Omdurman + Bahri tri-city); pre-2023-conflict baseline"
population_source = "Sudan Central Bureau of Statistics 2022 estimate; conflict has since displaced millions"
population_source_year = 2022
climate = "hot-desert"
profile = "mega-city-desert"
# ~45 × 45 km tri-city around the Blue / White Nile confluence.
# Covers Omdurman (west of the White Nile), Bahri (north of the
# Blue Nile), and Khartoum proper.
bbox = { south = 15.40, west = 32.35, north = 15.80, east = 32.80 }
[[cities]]
slug = "kampala"
country = "UG"
continent = "east-africa"
population = 1875000
population_unit = "Kampala Capital City Authority (5 divisions); excludes Wakiso suburbs"
population_source = "Uganda Bureau of Statistics (UBoS) 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~25 × 25 km centred on the seven hills. Covers Wakiso satellite
# towns (Kira, Mukono outskirts) east + north; clipped at Lake
# Victoria south.
bbox = { south = 0.21, west = 32.45, north = 0.45, east = 32.72 }
[[cities]]
slug = "antananarivo"
country = "MG"
continent = "east-africa"
population = 3058000
population_unit = "Greater Antananarivo (CUA + Antananarivo-Avaradrano + Antananarivo-Atsimondrano + Ambohidratrimo)"
population_source = "Institut National de la Statistique de Madagascar (INSTAT) 2024 estimate; 2018 census base"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~33 × 33 km on the central Madagascar plateau. Covers the
# satellite communes north (Ivato airport district) + south
# (Tanjombato). Steep terrain — civil-classification will pick
# elevated for valley crossings.
bbox = { south = -19.08, west = 47.35, north = -18.75, east = 47.70 }
[[cities]]
slug = "bamako"
country = "ML"
continent = "west-africa"
population = 2929000
population_unit = "District de Bamako (6 communes) + immediate Koulikoro-region suburbs"
population_source = "Institut National de la Statistique du Mali (INSTAT) 2024 estimate; 2022 census base"
population_source_year = 2024
climate = "tropical-arid"
profile = "large-city-desert"
# ~30 × 30 km straddling the Niger river. Both banks; covers Kati
# (north-west satellite) + Kalaban-Coro (southern Sahelian
# extension).
bbox = { south = 12.50, west = -8.18, north = 12.80, east = -7.85 }
[[cities]]
slug = "dakar"
country = "SN"
continent = "west-africa"
population = 4030000
population_unit = "Greater Dakar Region (Dakar + Pikine + Guédiawaye + Rufisque) on the Cap-Vert peninsula"
population_source = "Agence Nationale de la Statistique et de la Démographie (ANSD) Senegal 2024 estimate; 2023 census base"
population_source_year = 2024
climate = "tropical-arid"
profile = "mega-city-tropical"
# ~35 × 25 km Cap-Vert peninsula; metro extends inland through
# Pikine and Guédiawaye to Rufisque (~30 km E). Atlantic clips
# the W and N. Note: a TER (Train Express Régional) opened in
# 2021 — kept here for solver-test rich-OSM comparison.
bbox = { south = 14.65, west = -17.55, north = 14.85, east = -17.20 }
[[cities]]
slug = "ouagadougou"
country = "BF"
continent = "west-africa"
population = 2531000
population_unit = "Ouagadougou commune (12 arrondissements + adjacent communes rurales)"
population_source = "Institut National de la Statistique et de la Démographie (INSD) Burkina Faso 2024 estimate; 2019 RGPH census base"
population_source_year = 2024
climate = "tropical-arid"
profile = "large-city-desert"
# ~30 × 30 km Sahelian flatland. Bbox covers Bobo-Dioulasso-route
# extensions (W) + Loumbila reservoir direction (NE).
bbox = { south = 12.27, west = -1.65, north = 12.55, east = -1.35 }
[[cities]]
slug = "conakry"
country = "GN"
continent = "west-africa"
population = 2010000
population_unit = "Conakry capital district (Kaloum + Dixinn + Matam + Matoto + Ratoma) + Coyah-direction suburbs"
population_source = "Institut National de la Statistique (INS) Guinea 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~30 × 22 km Atlantic peninsula. The city is built on a long thin
# spit; bbox covers the full peninsula (Kaloum tip W) inland to
# Coyah-direction suburbs E. Sea clips both N and S edges.
bbox = { south = 9.42, west = -13.78, north = 9.65, east = -13.50 }
[[cities]]
slug = "mogadishu"
country = "SO"
continent = "east-africa"
population = 2610000
population_unit = "Banaadir Region / Mogadishu (16 districts: Hodan + Hawl Wadag + Wardhigley + Wadajir + Yaaqshiid + Daynile + ...)"
population_source = "UN OCHA Somalia 2024 estimate; pre-conflict 1986 census + post-2007 IDP-adjusted growth"
population_source_year = 2024
climate = "hot-desert"
profile = "large-city-desert"
# ~30 × 30 km Indian Ocean coastal. Reconstruction-period (post-
# 2017 stabilization). Bbox covers the Old City (Hamarweyne /
# Shangani SE), Wardhigley + Hodan core, Daynile (W), and Afgoye-
# corridor IDP camps (NW).
bbox = { south = 1.95, west = 45.12, north = 2.20, east = 45.40 }
[[cities]]
slug = "kigali"
country = "RW"
continent = "east-africa"
population = 1208000
population_unit = "Kigali City (3 districts: Nyarugenge + Gasabo + Kicukiro)"
population_source = "National Institute of Statistics of Rwanda (NISR) 2022 census + 2024 projection"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~25 × 25 km hilly catchment ("city of a thousand hills"). Severe
# terrain — civil-classifier auto-tags elevated for the Nyabarongo
# valley crossings. Covers the airport (E) and Mt Kigali (W).
bbox = { south = -2.05, west = 30.00, north = -1.83, east = 30.25 }
[[cities]]
slug = "lusaka"
country = "ZM"
continent = "east-africa"
population = 3037000
population_unit = "Lusaka Province / Greater Lusaka (Lusaka City + Chongwe + Kafue + Chilanga)"
population_source = "Zambia Statistics Agency (ZamStats) 2022 census + 2024 projection"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~32 × 32 km plateau city (~1 280 m elevation). Covers Kafue Road
# corridor S (industry), Great East Road corridor E (suburbs),
# Lusaka airport (E).
bbox = { south = -15.55, west = 28.10, north = -15.25, east = 28.45 }
[[cities]]
slug = "yaounde"
country = "CM"
continent = "west-africa"
population = 4100000
population_unit = "Yaoundé Communauté Urbaine (7 arrondissements + Mfoundi peripheral villages)"
population_source = "Institut National de la Statistique (INS) Cameroon 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~35 × 35 km hilly equatorial catchment ("city of seven hills" —
# Mt Eloundem + Mt Nkolbisson + others). Severe-terrain civil
# class. Covers Nsimalen airport (S) + Mfoundi valley plateau.
bbox = { south = 3.74, west = 11.35, north = 4.05, east = 11.70 }
[[cities]]
slug = "kinshasa"
country = "CD"
continent = "central-africa"
population = 17178000
population_unit = "Kinshasa Province (24 communes; Greater Kinshasa = administrative city = province)"
population_source = "INS DRC 2024 estimate (no recent census); UN World Population Prospects 2024 cross-check"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~50 × 50 km. World's largest French-speaking city; spans both
# the central plateau (Mont-Ngafula, Lemba) and the Congo-river
# floodplain (Kingabwa, N'djili airport area). Brazzaville lies
# directly across the Congo river to the N — separate catchment.
bbox = { south = -4.55, west = 15.10, north = -4.20, east = 15.55 }
[[cities]]
slug = "lubumbashi"
country = "CD"
continent = "central-africa"
population = 2829000
population_unit = "Lubumbashi (city + Annexe + Kampemba + Katuba + Kenya + Lubumbashi commune + Rwashi + Kamalondo)"
population_source = "INS DRC 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~30 × 30 km mining-belt plateau. Covers the Gécamines copper-
# smelter zone NE + the Zambian-border direction (Kasumbalesa) S.
bbox = { south = -11.78, west = 27.32, north = -11.50, east = 27.65 }
[[cities]]
slug = "luanda"
country = "AO"
continent = "east-africa"
population = 9085000
population_unit = "Luanda Province (Luanda + Belas + Cazenga + Cacuaco + Viana + Icolo e Bengo)"
population_source = "INE Angola 2024 estimate; 2014 census base + UN World Population Prospects projection"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~50 × 35 km Atlantic coastal megacity. Bbox covers Belas (S,
# new-build housing), Viana (SE, industrial), Cacuaco (N), and
# the Ilha de Luanda spit (W) — the Atlantic coast clips W.
bbox = { south = -9.05, west = 13.10, north = -8.60, east = 13.50 }
[[cities]]
slug = "maputo"
country = "MZ"
continent = "east-africa"
population = 1530000
population_unit = "Greater Maputo (Cidade de Maputo + Matola + Boane + Marracuene)"
population_source = "INE Mozambique 2024 estimate; 2017 census + projection"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~30 × 25 km Indian Ocean coastal. Maputo Bay clips E; bbox
# covers Matola (W, industrial twin-city), Costa do Sol +
# Marracuene (N). Severe road grade through the Catembe causeway
# crossing — civil classifier picks elevated.
bbox = { south = -25.95, west = 32.45, north = -25.78, east = 32.78 }
[[cities]]
slug = "beira"
country = "MZ"
continent = "east-africa"
population = 535000
population_unit = "Beira city + Dondo (Sofala province coastal)"
population_source = "INE Mozambique 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "mid-city-tropical"
# ~22 × 22 km port city + reconstruction post-Cyclone Idai (2019).
# Indian Ocean clips E; Pungwe estuary clips S. Bbox covers
# Manga (NW), Munhava (N), and the Macuti residential strip.
bbox = { south = -19.92, west = 34.78, north = -19.72, east = 35.00 }
[[cities]]
slug = "niamey"
country = "NE"
continent = "west-africa"
population = 1407635
population_unit = "Niamey commune / Capital District"
population_source = "Institut National de la Statistique du Niger (INS) 2022 estimate"
population_source_year = 2022
climate = "tropical-arid"
profile = "mid-city-desert"
# Bbox widened to ~28 × 28 km to cover both banks of the Niger,
# Niamey-2000 west extension, the airport (south-east), and the
# Saga / Goudel satellite communes that house ~250 k informal
# residents not in the commune-proper.
bbox = { south = 13.40, west = 2.00, north = 13.65, east = 2.25 }
# ---- South Asia -------------------------------------------------------
[[cities]]
slug = "coimbatore"
country = "IN"
continent = "south-asia"
population = 3084000
population_unit = "Coimbatore Urban Agglomeration (city + adjoining municipalities + town panchayats)"
population_source = "2024 projection from Census of India 2011 base (2,136,916), growth-rate-extrapolated; 2021 census postponed to 2027"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# Bbox widened to ~33 × 33 km to cover the 3 M urban-agglomeration:
# Saravanampatti + Singanallur (east), Madukkarai (south),
# Sulur + airport (south-east), Mettupalayam Road corridor (north).
# Earlier 12 × 12 km core-only bbox starved the synthesizer.
bbox = { south = 10.85, west = 76.85, north = 11.15, east = 77.15 }
[[cities]]
slug = "karachi"
country = "PK"
continent = "south-asia"
population = 20300000
population_unit = "Karachi Division (Central + East + Keamari + Korangi + Malir + South + West districts)"
population_source = "Pakistan Bureau of Statistics (PBS) 2023 Digital Census"
population_source_year = 2023
climate = "tropical-arid"
profile = "mega-city-desert"
# ~50 × 50 km mega-coastal extent. Covers DHA Phase 8 + Bahria Town
# (south-east), New Karachi + North Nazimabad (north), Surjani Town
# (north), Hawksbay (west). Clipped east at Bin Qasim industrial
# zone (Port Qasim past the catchment edge).
bbox = { south = 24.65, west = 66.85, north = 25.10, east = 67.30 }
[[cities]]
slug = "yangon"
country = "MM"
continent = "southeast-asia"
population = 5200000
population_unit = "Yangon Region urban core (Yangon city + Insein + Hlaingthaya + Thanlyin / Syriam east of the river)"
population_source = "Myanmar Department of Population 2014 census + 2024 projection (no fresh census post-2021)"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~40 × 40 km. Both banks of the Bago + Yangon rivers — covers
# Thanlyin / Kyauktan (east bank, Pyin Hsalu industrial zone) and
# Hlaingthaya (west bank). Clipped south of Twante to avoid the
# delta marshland which has no metro demand.
bbox = { south = 16.65, west = 95.95, north = 17.00, east = 96.35 }
[[cities]]
slug = "phnom-penh"
country = "KH"
continent = "southeast-asia"
population = 2281000
population_unit = "Phnom Penh capital (12 khans / districts including the 2018 enlargement)"
population_source = "National Institute of Statistics Cambodia (NIS) 2019 census + 2024 projection"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~30 × 30 km at the Mekong / Tonlé Sap / Bassac confluence. Covers
# Russey Keo (north), Chbar Ampov (south-east across the Bassac),
# and the Pochentong airport district (west).
bbox = { south = 11.42, west = 104.78, north = 11.70, east = 105.07 }
[[cities]]
slug = "patna"
country = "IN"
continent = "south-asia"
population = 2520000
population_unit = "Patna Urban Agglomeration (Patna Municipal Corp + Danapur + Khagaul + Phulwari Sharif)"
population_source = "Census of India 2011 + 2024 projection (2021 census postponed)"
population_source_year = 2024
climate = "tropical-wet"
profile = "large-city-tropical"
# ~30 × 22 km on the south bank of the Ganges. Covers Patna City
# (E, old core), Danapur (W, cantonment) + Phulwari Sharif (S).
# Ganges clips N; civil classifier picks bridge for the Mahatma
# Gandhi Setu crossing.
bbox = { south = 25.55, west = 85.00, north = 25.75, east = 85.30 }
[[cities]]
slug = "faisalabad"
country = "PK"
continent = "south-asia"
population = 3556000
population_unit = "Faisalabad Division (Faisalabad city + Khurrianwala + Jaranwala-direction satellites)"
population_source = "Pakistan Bureau of Statistics (PBS) 2023 Digital Census"
population_source_year = 2023
climate = "tropical-arid"
profile = "mega-city-desert"
# ~33 × 33 km flat Punjab plain. Eight ring roads radiate from the
# Clock Tower (Ghanta Ghar). Bbox covers the textile-mill belt SW
# + Jhang Road (NE) + the new ring-road developments.
bbox = { south = 31.27, west = 73.00, north = 31.55, east = 73.30 }
[[cities]]
slug = "multan"
country = "PK"
continent = "south-asia"
population = 2197000
population_unit = "Multan Division (Multan city + Shujabad + Jalalpur Pirwala-direction satellites)"
population_source = "Pakistan Bureau of Statistics (PBS) 2023 Digital Census"
population_source_year = 2023
climate = "tropical-arid"
profile = "large-city-desert"
# ~28 × 28 km on the Chenab-direction plain. City of Sufi shrines
# (Bahauddin Zakariya, Shah Rukn-e-Alam — pilgrim demand). Bbox
# covers Bosan Road suburbs (NW) + cantonment (W).
bbox = { south = 30.10, west = 71.30, north = 30.34, east = 71.60 }
[[cities]]
slug = "kabul"
country = "AF"
continent = "south-asia"
population = 4601000
population_unit = "Kabul Province (Kabul city + Paghman + Bagrami + Surobi-direction; war-displaced rural urbanisation post-2001)"
population_source = "UNFPA Afghanistan 2024 estimate; pre-2001 baseline + return-flow + IDP-camp adjustment"
population_source_year = 2024
climate = "hot-arid-mountain"
profile = "mega-city-cold"
# ~33 × 33 km mountain-bowl city (~1 800 m elevation). Severe
# terrain — Sher Darwaza + Asmai mountains bisect the city.
# Bbox covers Pul-e-Charkhi (E), Khair Khana (N), Darulaman (S).
bbox = { south = 34.42, west = 69.05, north = 34.70, east = 69.40 }
[[cities]]
slug = "kathmandu"
country = "NP"
continent = "south-asia"
population = 1442000
population_unit = "Kathmandu Valley (Kathmandu Metro + Lalitpur Metro + Bhaktapur + Madhyapur Thimi + Kirtipur)"
population_source = "Central Bureau of Statistics (CBS) Nepal 2021 census + 2024 projection"
population_source_year = 2024
climate = "temperate-continental"
profile = "large-city-cold"
# ~28 × 22 km Himalayan-foothill bowl city (~1 400 m elevation).
# Bagmati + Bishnumati confluence. Covers Patan/Lalitpur (S),
# Bhaktapur (E, UNESCO old city), Tribhuvan airport (E),
# Kirtipur (W).
bbox = { south = 27.62, west = 85.18, north = 27.82, east = 85.45 }
[[cities]]
slug = "colombo"
country = "LK"
continent = "south-asia"
population = 5648000
population_unit = "Colombo Metropolitan Region (Colombo Municipal Council + Greater Colombo / Western Province coastal strip)"
population_source = "Department of Census and Statistics Sri Lanka 2024 estimate"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~38 × 28 km Indian Ocean coastal megacity. Bbox covers Negombo
# direction (N), Sri Jayawardenepura Kotte (E, parliamentary
# capital), Dehiwala-Mt Lavinia (S). Sea clips W. Note: a 4-line
# LRT was approved 2018 but funding stalled — kept here for the
# OSR fallback path.
bbox = { south = 6.78, west = 79.82, north = 7.05, east = 80.05 }
# ---- Southeast Asia (additional) ------------------------------------
[[cities]]
slug = "mandalay"
country = "MM"
continent = "southeast-asia"
population = 1726000
population_unit = "Mandalay City (6 townships) + Amarapura + Sagaing-direction across the Irrawaddy"
population_source = "Myanmar Department of Population 2014 census + 2024 projection"
population_source_year = 2024
climate = "tropical-arid"
profile = "large-city-desert"
# ~28 × 28 km Irrawaddy-bank historic capital. Bbox covers
# Mandalay Hill (N), the Royal Palace + Old City moat (centre),
# Mandalay International Airport (S, ~35 km — clipped),
# Amarapura (S, ancient capital). Sagaing across the river.
bbox = { south = 21.85, west = 95.95, north = 22.15, east = 96.20 }
[[cities]]
slug = "surabaya"
country = "ID"
continent = "southeast-asia"
population = 3009000
population_unit = "Surabaya city (31 kecamatan) — Greater Surabaya = Gerbangkertosusila is wider but split here"
population_source = "BPS Indonesia 2024 estimate; 2020 census base"
population_source_year = 2024
climate = "tropical-wet"
profile = "mega-city-tropical"
# ~30 × 30 km. Java Sea coast N; Madura Strait + Suramadu bridge
# E. Bbox covers Sidoarjo-direction industry S, Gresik-direction
# port + chemicals N-W (clipped 30 km). Civil classifier picks
# bridge for the Suramadu (5.4 km cable-stayed) crossing.
bbox = { south = -7.40, west = 112.60, north = -7.13, east = 112.92 }
[[cities]]
slug = "bandung"
country = "ID"
continent = "southeast-asia"
population = 2615000
population_unit = "Bandung City + Cimahi (twin-city) + Kabupaten Bandung Barat-direction inner ring"
population_source = "BPS Indonesia 2024 estimate; 2020 census base"
population_source_year = 2024
climate = "tropical-wet"