diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b614579..aef32a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -316,7 +316,18 @@ jobs: - name: Install Code Quality Tools run: | - sudo apt-get install -y cppcheck clang-format + sudo apt-get update + + # Nonsense to get clang-format-22, which formats different than default 18 + sudo apt-get install -y wget gnupg lsb-release software-properties-common + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo add-apt-repository "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-22 main" + sudo apt-get update + sudo apt-get install -y clang-format-22 cppcheck + sudo ln -sf /usr/bin/clang-format-22 /usr/bin/clang-format + hash -r + clang-format --version + clang-format --version - name: Run Cppcheck run: | diff --git a/codecov.yml b/codecov.yml index 3a5adb4..f54450a 100644 --- a/codecov.yml +++ b/codecov.yml @@ -5,5 +5,6 @@ ignore: # Keep main.c minimal and modularize logic into separate functions whenever possible. - "src/main.c" - "src/core_render.c" +- "include/arg_definitions.h" fixes: - "/home/runner/work/astroterm/astroterm/::" diff --git a/data/cities.csv b/data/cities.csv index c10587a..a797e17 100644 --- a/data/cities.csv +++ b/data/cities.csv @@ -13,15 +13,14 @@ Abomey-Calavi,385755,BJ,Africa/Porto-Novo,6.44852,2.35566 Abu Dhabi,1807000,AE,Asia/Dubai,24.45118,54.39696 Abuja,2690000,NG,Africa/Lagos,9.05785,7.49508 Abū Ghurayb,900000,IQ,Asia/Baghdad,33.30563,44.18477 -Acapulco de Juárez,673479,MX,America/Mexico_City,16.84942,-99.90891 +Acapulco de Juárez,658609,MX,America/Mexico_City,16.84942,-99.90891 Accra,1963264,GH,Africa/Accra,5.55602,-0.1969 -Ad Dīwānīyah,318801,IQ,Asia/Baghdad,31.99289,44.92552 Adachi,695043,JP,Asia/Tokyo,35.76318,139.80761 Adana,1816750,TR,Europe/Istanbul,36.98615,35.32531 Adapazarı,286787,TR,Europe/Istanbul,40.78056,30.40333 Addis Ababa,3860000,ET,Africa/Addis_Ababa,9.02497,38.74689 Adelaide,1469163,AU,Australia/Adelaide,-34.92866,138.59863 -Aden,1079670,YE,Asia/Aden,12.77944,45.03667 +Aden,1079670,YE,Asia/Aden,12.77957,45.03852 Ado-Ekiti,435000,NG,Africa/Lagos,7.62329,5.22087 Adıyaman,267131,TR,Europe/Istanbul,37.76441,38.27629 Afyonkarahisar,251799,TR,Europe/Istanbul,38.75667,30.54333 @@ -36,7 +35,7 @@ Ahvaz,841145,IR,Asia/Tehran,31.31901,48.6842 Aihara,725493,JP,Asia/Tokyo,35.6,139.31667 Aizawl,293416,IN,Asia/Kolkata,23.72894,92.71791 Ajegunle,550000,NG,Africa/Lagos,6.45197,3.33115 -Ajman City,490035,AE,Asia/Dubai,25.40177,55.47878 +Ajman,490035,AE,Asia/Dubai,25.40177,55.47878 Ajmer,542321,IN,Asia/Kolkata,26.4521,74.63867 Akashi,303601,JP,Asia/Tokyo,34.65524,135.00687 Akita,307672,JP,Asia/Tokyo,39.71667,140.11667 @@ -48,14 +47,15 @@ Akure,730000,NG,Africa/Lagos,7.25256,5.19312 Al Ain City,846747,AE,Asia/Dubai,24.19167,55.76056 Al Aḩmadī,637411,KW,Asia/Kuwait,29.07694,48.08389 Al Başrah al Qadīmah,2015483,IQ,Asia/Baghdad,30.50316,47.81507 +Al Diwaniyah,318801,IQ,Asia/Baghdad,31.99289,44.92552 Al Fayyum,519047,EG,Africa/Cairo,29.30995,30.8418 +Al Hillah,455700,IQ,Asia/Baghdad,32.46367,44.41963 Al Hoceïma,395644,MA,Africa/Casablanca,35.25165,-3.93723 Al Hufūf,293179,SA,Asia/Riyadh,25.36467,49.58764 Al Jubayl,237274,SA,Asia/Riyadh,27.0174,49.62251 Al Kharj,425300,SA,Asia/Riyadh,24.15541,47.33457 Al Khums,201943,LY,Africa/Tripoli,32.64861,14.26191 Al Khuşūş,488904,EG,Africa/Cairo,30.15293,31.31501 -Al Kūt,315162,IQ,Asia/Baghdad,32.5128,45.81817 Al Madīnah,255000,IQ,Asia/Baghdad,30.96324,47.26998 Al Mansurah,621953,EG,Africa/Cairo,31.03637,31.38069 Al Mawşil al Jadīdah,2065597,IQ,Asia/Baghdad,36.33271,43.10555 @@ -66,10 +66,10 @@ Al Qadarif,363945,SD,Africa/Khartoum,14.03493,35.38344 Al Qurnah,286073,IQ,Asia/Baghdad,31.01547,47.43362 Al Qāhirah al Jadīdah,313139,EG,Africa/Cairo,30.04214,31.44446 Al Ḩasakah,422445,SY,Asia/Damascus,36.50237,40.74772 -Al Ḩillah,455700,IQ,Asia/Baghdad,32.46367,44.41963 Al Ḩudaydah,734699,YE,Asia/Aden,14.79781,42.95452 Al ‘Amārah,323302,IQ,Asia/Baghdad,31.83561,47.14483 Al ‘Āshir min Ramaḑān,246148,EG,Africa/Cairo,30.29636,31.74633 +Al-Kut,315162,IQ,Asia/Baghdad,32.5128,45.81817 Alanya,364180,TR,Europe/Istanbul,36.54375,31.99982 Alappuzha,240991,IN,Asia/Kolkata,9.49004,76.3264 Albuquerque,564559,US,America/Denver,35.08449,-106.65114 @@ -105,7 +105,7 @@ Anantapur,267161,IN,Asia/Kolkata,14.67784,77.60813 Anchorage,289600,US,America/Anchorage,61.21806,-149.90028 Andijon,747800,UZ,Asia/Tashkent,40.78338,72.35067 Angarsk,243158,RU,Asia/Irkutsk,52.55968,103.91413 -Angeles City,299391,PH,Asia/Manila,15.15,120.58333 +Angeles City,483452,PH,Asia/Manila,15.15,120.58333 Ankang,870126,CN,Asia/Shanghai,32.68,109.01722 Ankara,3517182,TR,Europe/Istanbul,39.91987,32.85427 Annaba,342703,DZ,Africa/Algiers,36.9,7.76667 @@ -117,7 +117,7 @@ Anshun,765313,CN,Asia/Shanghai,26.25,105.93333 Antakya,210000,TR,Europe/Istanbul,36.20655,36.15722 Antalya,1344000,TR,Europe/Istanbul,36.90812,30.69556 Antananarivo,1349501,MG,Indian/Antananarivo,-18.91368,47.53613 -Antipolo,887399,PH,Asia/Manila,14.62578,121.12251 +Antipolo,913712,PH,Asia/Manila,14.62578,121.12251 Antofagasta,401096,CL,America/Santiago,-23.65094,-70.39752 Antsirabe,260907,MG,Indian/Antananarivo,-19.86586,47.03333 Antwerpen,529247,BE,Europe/Brussels,51.22047,4.40026 @@ -131,14 +131,13 @@ Ar Raqqah,531952,SY,Asia/Damascus,35.95283,39.00788 Ar Rayyān,272465,QA,Asia/Qatar,25.29194,51.42444 Aracaju,664908,BR,America/Maceio,-10.91111,-37.07167 Arakawa,216900,JP,Asia/Tokyo,35.73825,139.78047 -Aral,260000,CN,Asia/Urumqi,40.54184,81.26566 Arapiraca,243661,BR,America/Maceio,-9.7525,-36.66111 Arba Minch,201000,ET,Africa/Addis_Ababa,6.03333,37.55 Archway,215667,GB,Europe/London,51.56733,-0.13415 Ardabīl,410753,IR,Asia/Tehran,38.2498,48.2933 Arequipa,1008290,PE,America/Lima,-16.39899,-71.53747 Arica,241653,CL,America/Santiago,-18.47552,-70.30058 -Arkhangel'sk,349742,RU,Europe/Moscow,64.54717,40.55291 +Arkhangel'sk,349742,RU,Europe/Moscow,64.5461,40.55183 Arlington,388125,US,America/Chicago,32.73569,-97.10807 Arlington,207627,US,America/New_York,38.88101,-77.10428 Armenia,304314,CO,America/Bogota,4.53656,-75.67263 @@ -147,10 +146,10 @@ Arroyo Naranjo,210053,CU,America/Havana,23.03811,-82.37703 Artux,285000,CN,Asia/Urumqi,39.70842,76.17971 Arusha,617631,TZ,Africa/Dar_es_Salaam,-3.36667,36.68333 Arāk,503647,IR,Asia/Tehran,34.09493,49.69809 -As Sulaymānīyah,878146,IQ,Asia/Baghdad,35.56496,45.4329 Asahikawa,333530,JP,Asia/Tokyo,43.77063,142.36489 Ashdod,226838,IL,Asia/Jerusalem,31.79213,34.64966 Ashgabat,727700,TM,Asia/Ashgabat,37.95,58.38333 +Ashuganj City,210356,BD,Asia/Dhaka,24.04016,91.0117 Asmara,563930,ER,Africa/Asmara,15.33805,38.93184 Assiut,528669,EG,Africa/Cairo,27.18096,31.18368 Astana,345604,KZ,Asia/Almaty,51.1801,71.44598 @@ -176,6 +175,7 @@ Awasa,422200,ET,Africa/Addis_Ababa,7.06205,38.47635 Az Zāwīyah,200000,LY,Africa/Tripoli,32.7571,12.72764 Azcapotzalco,414711,MX,America/Mexico_City,19.48698,-99.18594 Ba Dinh,221893,VN,Asia/Bangkok,21.03652,105.82684 +Ba Vì,282600,VN,Asia/Bangkok,21.08333,105.38333 Bab Ezzouar,275630,DZ,Africa/Algiers,36.72615,3.18291 Bachuan,208520,CN,Asia/Shanghai,29.84863,106.05046 Bacolod City,454898,PH,Asia/Manila,10.66667,122.95 @@ -197,7 +197,7 @@ Baicheng,316970,CN,Asia/Shanghai,45.61751,122.83302 Baise,686078,CN,Asia/Shanghai,23.89013,106.62684 Baiyin,294400,CN,Asia/Shanghai,36.54696,104.17023 Bakersfield,373640,US,America/Los_Angeles,35.37329,-119.01871 -Baku,1116513,AZ,Asia/Baku,40.37767,49.89201 +Baku,2351300,AZ,Asia/Baku,40.37767,49.89201 Balikpapan,695287,ID,Asia/Makassar,-1.26753,116.82887 Ballari,410445,IN,Asia/Kolkata,15.14205,76.92398 Baltimore,585708,US,America/New_York,39.29038,-76.61219 @@ -215,7 +215,7 @@ Bandundu Province,202904,CD,Africa/Kinshasa,-3.31687,17.38063 Bandung,2444160,ID,Asia/Jakarta,-6.92222,107.60694 Bangkok,5104476,TH,Asia/Bangkok,13.75398,100.50144 Bangui,812407,CF,Africa/Bangui,4.36122,18.55496 -Banja Luka,221106,BA,Europe/Sarajevo,44.77842,17.19386 +Banja Luka,221106,BA,Europe/Sarajevo,44.77879,17.20629 Banjar,200970,ID,Asia/Jakarta,-7.1955,107.4313 Banjarmasin,657663,ID,Asia/Makassar,-3.31987,114.59075 Bannu,1357890,PK,Asia/Karachi,32.98527,70.60403 @@ -227,7 +227,7 @@ Baoji,1437802,CN,Asia/Shanghai,34.36775,107.23705 Baoshan,935618,CN,Asia/Shanghai,25.11626,99.16366 Baotou,2150000,CN,Asia/Shanghai,40.6516,109.84389 Baranagar,260072,IN,Asia/Kolkata,22.64132,88.37727 -Barcelona,1620343,ES,Europe/Madrid,41.38879,2.15899 +Barcelona,1686208,ES,Europe/Madrid,41.38879,2.15899 Barcelona,815141,VE,America/Caracas,10.1384,-64.68769 Barddhamān,301725,IN,Asia/Kolkata,23.25572,87.85691 Bareilly,745435,IN,Asia/Kolkata,28.36678,79.43167 @@ -235,7 +235,7 @@ Bari,316491,IT,Europe/Rome,41.12066,16.86982 Bariadi,260927,TZ,Africa/Dar_es_Salaam,-2.8,33.98333 Barinas,397279,VE,America/Caracas,8.62064,-70.23105 Barishal,202242,BD,Asia/Dhaka,22.70497,90.37013 -Barnaul,632372,RU,Asia/Barnaul,53.3598,83.7456 +Barnaul,632372,RU,Asia/Barnaul,53.36199,83.72786 Barquisimeto,1240714,VE,America/Caracas,10.0647,-69.35703 Barranquilla,1206319,CO,America/Bogota,10.96854,-74.78132 Barueri,316473,BR,America/Sao_Paulo,-23.51056,-46.87611 @@ -270,7 +270,7 @@ Bekasi,2564940,ID,Asia/Jakarta,-6.2349,106.9896 Belagavi,490045,IN,Asia/Kolkata,15.85212,74.50447 Belfast,348005,GB,Europe/London,54.59682,-5.92541 Belford Roxo,466096,BR,America/Sao_Paulo,-22.76417,-43.39944 -Belgorod,345289,RU,Europe/Moscow,50.61074,36.58015 +Belgorod,345289,RU,Europe/Moscow,50.60343,36.58091 Belgrade,1273651,RS,Europe/Belgrade,44.80401,20.46513 Bello,392939,CO,America/Bogota,6.33732,-75.55795 Belo Horizonte,2721564,BR,America/Sao_Paulo,-19.92083,-43.93778 @@ -292,19 +292,18 @@ Berlin,3426354,DE,Europe/Berlin,52.52437,13.41053 Betim,384000,BR,America/Sao_Paulo,-19.96778,-44.19833 Bexley,228000,GB,Europe/London,51.44162,0.14866 Bharatpur,252838,IN,Asia/Kolkata,27.21731,77.49009 -Bharatpur,369377,NP,Asia/Kathmandu,27.6768,84.43589 +Bharatpur,369377,NP,Asia/Kathmandu,27.68027,84.43647 +Bhatara,324300,BD,Asia/Dhaka,23.8,90.45 Bhavnagar,605882,IN,Asia/Kolkata,21.76287,72.15331 Bhayandar,809378,IN,Asia/Kolkata,19.30157,72.85107 Bhilai,627734,IN,Asia/Kolkata,21.20919,81.4285 Bhilwara,359483,IN,Asia/Kolkata,25.34707,74.64081 -Bhimber,342900,PK,Asia/Karachi,32.97465,74.07846 Bhiwandi,874032,IN,Asia/Kolkata,19.30023,73.05881 Bhopal,1798218,IN,Asia/Kolkata,23.25469,77.40289 Bhubaneswar,885363,IN,Asia/Kolkata,20.27241,85.83385 Bhāgalpur,400146,IN,Asia/Kolkata,25.24446,86.97183 Bhātpāra,483129,IN,Asia/Kolkata,22.86643,88.40113 -Bhātāra,324300,BD,Asia/Dhaka,23.8,90.45 -Białystok,291855,PL,Europe/Warsaw,53.13333,23.16433 +Białystok,295683,PL,Europe/Warsaw,53.13333,23.16433 Bida,400000,NG,Africa/Lagos,9.08044,6.0099 Bidar,216020,IN,Asia/Kolkata,17.90802,77.51524 Bielefeld,331906,DE,Europe/Berlin,52.03333,8.53333 @@ -317,11 +316,10 @@ Bilimora,510879,IN,Asia/Kolkata,20.76957,72.96134 Bilāspur,365579,IN,Asia/Kolkata,22.08005,82.15543 Bimbo,348802,CF,Africa/Bangui,4.25671,18.41583 Binangonan,219204,PH,Asia/Manila,14.4646,121.1929 -Binhe,278055,CN,Asia/Shanghai,32.68833,112.8275 Binjai,279302,ID,Asia/Jakarta,3.6001,98.4854 Binzhou,682717,CN,Asia/Shanghai,37.36667,118.01667 Biratnagar,244750,NP,Asia/Kathmandu,26.45505,87.27007 -Birgañj,268273,NP,Asia/Kathmandu,27.01709,84.8808 +Birgañj,268273,NP,Asia/Kathmandu,27.01736,84.88047 Birkenhead,325264,GB,Europe/London,53.39337,-3.01479 Birmingham,1157603,GB,Europe/London,52.48142,-1.89983 Bishan,204702,CN,Asia/Shanghai,29.59491,106.22476 @@ -333,14 +331,14 @@ Bitung,225134,ID,Asia/Makassar,1.44059,125.12824 Biysk,215430,RU,Asia/Barnaul,52.53423,85.19661 Biên Hòa,1272235,VN,Asia/Ho_Chi_Minh,10.94469,106.82432 Biñan,300000,PH,Asia/Manila,14.34267,121.08071 -Blagoveshchensk,225091,RU,Asia/Yakutsk,50.27961,127.5405 +Blagoveshchensk,225091,RU,Asia/Yakutsk,50.27593,127.52637 Blantyre,902588,MW,Africa/Blantyre,-15.78499,35.00854 Blida,331779,DZ,Africa/Algiers,36.47004,2.8277 Bloemfontein,556637,ZA,Africa/Johannesburg,-29.12107,26.214 Blumenau,361855,BR,America/Sao_Paulo,-26.91944,-49.06611 Bnei Brak,214444,IL,Asia/Jerusalem,32.08074,34.8338 Boa Vista,419652,BR,America/Boa_Vista,2.81972,-60.67333 -Bobo-Dioulasso,904920,BF,Africa/Ouagadougou,11.17715,-4.2979 +Bobo-Dioulasso,904920,BF,Africa/Ouagadougou,11.18064,-4.29489 Bobruysk,207351,BY,Europe/Minsk,53.14636,29.20552 Bochum,385729,DE,Europe/Berlin,51.48165,7.21648 Bogor,1127408,ID,Asia/Jakarta,-6.59444,106.78917 @@ -354,7 +352,7 @@ Bologna,394843,IT,Europe/Rome,44.49381,11.33875 Boma,297009,CD,Africa/Kinshasa,-5.85098,13.05364 Bonn,330579,DE,Europe/Berlin,50.73438,7.09549 Borama,597842,SO,Africa/Mogadishu,9.93611,43.18278 -Bordeaux,260958,FR,Europe/Paris,44.84044,-0.5805 +Bordeaux,265328,FR,Europe/Paris,44.84124,-0.58046 Borivli,609617,IN,Asia/Kolkata,19.23496,72.85976 Borūjerd,251958,IR,Asia/Tehran,33.8973,48.7516 Boston,653833,US,America/New_York,42.35843,-71.05977 @@ -382,16 +380,17 @@ Bristol,479024,GB,Europe/London,51.45523,-2.59665 Brno,379466,CZ,Europe/Prague,49.19522,16.60796 Brooklyn,2736074,US,America/New_York,40.6501,-73.94958 Brussels,1019022,BE,Europe/Brussels,50.85045,4.34878 -Bryansk,427236,RU,Europe/Moscow,53.25209,34.37167 +Bryansk,427236,RU,Europe/Moscow,53.27096,34.32143 Brāhmanbāria,264326,BD,Asia/Dhaka,23.97464,91.11228 Bucaramanga,581130,CO,America/Bogota,7.125,-73.11895 Bucharest,1877155,RO,Europe/Bucharest,44.43225,26.10626 Bucheon-si,850731,KR,Asia/Seoul,37.49889,126.78306 +Buda,510108,HU,Europe/Budapest,47.5,19.03333 Budapest,1741041,HU,Europe/Budapest,47.49835,19.04045 Budta,1273715,PH,Asia/Manila,7.20417,124.43972 Buenaventura,240387,CO,America/Bogota,3.8801,-77.03116 Buenaventura,432385,CO,America/Bogota,3.58333,-77 -Buenavista,206081,MX,America/Mexico_City,19.60833,-99.16944 +Buenavista,216776,MX,America/Mexico_City,19.60833,-99.16944 Buenos Aires,2891082,AR,America/Argentina/Buenos_Aires,-34.61315,-58.37723 Buffalo,258071,US,America/New_York,42.88645,-78.87837 Bujumbura,769317,BI,Africa/Bujumbura,-3.38193,29.36142 @@ -405,6 +404,7 @@ Bunamwaya,413400,UG,Africa/Kampala,0.25344,32.55723 Bunia,399282,CD,Africa/Lubumbashi,1.55941,30.25224 Bunkyo,240069,JP,Asia/Tokyo,35.5331,139.4217 Buraydah,745353,SA,Asia/Riyadh,26.32599,43.97497 +Burgas,210646,BG,Europe/Sofia,42.50651,27.46886 Burhānpur,210886,IN,Asia/Kolkata,21.30868,76.23026 Burnaby,249125,CA,America/Vancouver,49.26636,-122.95263 Bursa,3101833,TR,Europe/Istanbul,40.19559,29.06013 @@ -412,8 +412,9 @@ Busan,3343903,KR,Asia/Seoul,35.10168,129.03004 Butembo,286242,CD,Africa/Lubumbashi,0.14164,29.29117 Butuan,309709,PH,Asia/Manila,8.94917,125.54361 Buôn Ma Thuột,434256,VN,Asia/Ho_Chi_Minh,12.66747,108.03775 -Bydgoszcz,366452,PL,Europe/Warsaw,53.1235,18.00762 +Bydgoszcz,330038,PL,Europe/Warsaw,53.1235,18.00762 Bégoua,264067,CF,Africa/Bangui,4.45437,18.53475 +Bình Thạnh,552164,VN,Asia/Ho_Chi_Minh,10.811,106.706 Bābol,202796,IR,Asia/Tehran,36.55102,52.6786 Bāli,296973,IN,Asia/Kolkata,22.64859,88.34115 Bāndarban,495272,BD,Asia/Dhaka,22.19534,92.21946 @@ -423,22 +424,23 @@ Bắc Giang,450000,VN,Asia/Bangkok,21.27307,106.1946 Bắc Ninh,287658,VN,Asia/Bangkok,21.18608,106.07631 Bắc Từ Liêm,340605,VN,Asia/Ho_Chi_Minh,21.06532,105.74661 Bến Cát,364578,VN,Asia/Ho_Chi_Minh,11.15,106.6 -Cabanatuan City,327325,PH,Asia/Manila,15.48586,120.96648 +Cabanatuan City,343672,PH,Asia/Manila,15.48586,120.96648 Cabimas,351736,VE,America/Caracas,10.39907,-71.45206 Cabinda,550000,AO,Africa/Luanda,-5.56198,12.19476 Cabo de Santo Agostinho,216969,BR,America/Recife,-8.28773,-35.02925 Cabo Frio,238166,BR,America/Sao_Paulo,-22.88717,-42.02622 +Cabo San Lucas,202694,MX,America/Mazatlan,22.89088,-109.91238 Cabuyao,308745,PH,Asia/Manila,14.2726,121.1262 -Cagayan de Oro,728402,PH,Asia/Manila,8.48222,124.64722 +Cagayan de Oro,741617,PH,Asia/Manila,8.48222,124.64722 Cainta,283172,PH,Asia/Manila,14.5786,121.1222 Cairo,9606916,EG,Africa/Cairo,30.06263,31.24967 Cajamarca,201329,PE,America/Lima,-7.16378,-78.50027 Calabar,540000,NG,Africa/Lagos,4.95893,8.32695 -Calamba,539671,PH,Asia/Manila,14.21167,121.16528 +Calamba,575046,PH,Asia/Manila,14.21167,121.16528 Calgary,1306784,CA,America/Edmonton,51.05011,-114.08529 Cali,2392877,CO,America/Bogota,3.43054,-76.5199 Callao,1300000,PE,America/Lima,-12.05162,-77.13452 -Caloocan City,1661584,PH,Asia/Manila,14.64953,120.96788 +Caloocan,1712945,PH,Asia/Manila,14.64953,120.96788 Camagüey,347562,CU,America/Havana,21.38083,-77.91694 Camayenne,1871242,GN,Africa/Conakry,9.535,-13.68778 Campeche,220389,MX,America/Merida,19.84073,-90.51676 @@ -448,7 +450,7 @@ Campo Grande,906092,BR,America/Campo_Grande,-20.44278,-54.64639 Campo Limpo,236162,BR,America/Sao_Paulo,-23.63634,-46.76565 Campos dos Goytacazes,511168,BR,America/Sao_Paulo,-21.75227,-41.33044 Canberra,367752,AU,Australia/Sydney,-35.28346,149.12807 -Cancún,628306,MX,America/Cancun,21.17429,-86.84656 +Cancún,888797,MX,America/Cancun,21.17429,-86.84656 Cangzhou,527681,CN,Asia/Shanghai,38.31124,116.85334 Canoas,328291,BR,America/Sao_Paulo,-29.91778,-51.18361 Cao Lãnh,211912,VN,Asia/Ho_Chi_Minh,10.46017,105.63294 @@ -469,9 +471,11 @@ Cascavel,257172,BR,America/Sao_Paulo,-24.95583,-53.45528 Catania,311584,IT,Europe/Rome,37.49223,15.07041 Caucaia,355679,BR,America/Fortaleza,-3.73611,-38.65306 Caxias do Sul,381270,BR,America/Sao_Paulo,-29.16806,-51.17944 -Cebu City,964169,PH,Asia/Manila,10.31672,123.89071 +Cazenga,424528,AO,Africa/Luanda,-8.82488,13.31318 +Cebu City,965332,PH,Asia/Manila,10.31672,123.89071 Ceilândia,287023,BR,America/Sao_Paulo,-15.8091,-48.13096 Celaya,340387,MX,America/Mexico_City,20.52353,-100.8157 +Central Coast,346596,AU,Australia/Sydney,-33.42979,151.37144 Centralniy,214625,RU,Europe/Moscow,59.93111,30.36072 Centurion,236580,ZA,Africa/Johannesburg,-25.85891,28.18577 Chakwama,200000,NG,Africa/Lagos,11.55965,9.66407 @@ -497,8 +501,8 @@ Chaozhou,1750945,CN,Asia/Shanghai,23.65396,116.62262 Charleroi,200132,BE,Europe/Brussels,50.41136,4.44448 Charlotte,911311,US,America/New_York,35.22709,-80.84313 Chattogram,3920222,BD,Asia/Dhaka,22.3384,91.83168 -Cheboksary,492331,RU,Europe/Moscow,56.13222,47.25194 -Chelyabinsk,1202371,RU,Asia/Yekaterinburg,55.15402,61.42915 +Cheboksary,492331,RU,Europe/Moscow,56.13218,47.246 +Chelyabinsk,1202371,RU,Asia/Yekaterinburg,55.1611,61.42877 Chemnitz,247220,DE,Europe/Berlin,50.8357,12.92922 Chengde,449325,CN,Asia/Shanghai,40.9519,117.95883 Chengdu,13568357,CN,Asia/Shanghai,30.66667,104.06667 @@ -527,10 +531,11 @@ Chiniot,318165,PK,Asia/Karachi,31.72091,72.97836 Chinju,307242,KR,Asia/Seoul,35.19278,128.08472 Chipata,327059,ZM,Africa/Lusaka,-13.63333,32.65 Chisinau,635994,MD,Europe/Chisinau,47.00902,28.85938 -Chita,349005,RU,Asia/Chita,52.03171,113.50087 +Chita,349005,RU,Asia/Chita,52.04311,113.49171 Chitato,246880,AO,Africa/Luanda,-7.3,20.73333 Chitungwiza,371246,ZW,Africa/Harare,-18.01274,31.07555 Chizhou,615274,CN,Asia/Shanghai,30.66134,117.47783 +Cholula,292881,MX,America/Mexico_City,19.06406,-98.30352 Chon Buri,219164,TH,Asia/Bangkok,13.3622,100.98345 Chongjin,327000,KP,Asia/Pyongyang,41.79556,129.77583 Chongqing,7457599,CN,Asia/Shanghai,29.56026,106.55771 @@ -541,6 +546,7 @@ Chuncheon,286124,KR,Asia/Seoul,37.87472,127.73417 Chungju,209483,KR,Asia/Seoul,36.97666,127.9287 Chuxiong,555081,CN,Asia/Shanghai,25.03639,101.54556 Chuzhou,782671,CN,Asia/Shanghai,32.32194,118.29778 +Chéngguān Qū,478275,CN,Asia/Shanghai,29.63842,91.04441 Chí Linh,220421,VN,Asia/Ho_Chi_Minh,21.06667,106.31667 Chānda,328351,IN,Asia/Kolkata,19.95076,79.29523 Chāndpur,203000,BD,Asia/Dhaka,23.22714,90.65433 @@ -559,6 +565,7 @@ Ciputat,207858,ID,Asia/Jakarta,-6.2375,106.69556 Cirebon,341980,ID,Asia/Jakarta,-6.7063,108.557 Citeureup,214668,ID,Asia/Jakarta,-6.48556,106.88194 City of Westminster,247614,GB,Europe/London,51.4975,-0.1357 +Ciudad Acuña,216099,MX,America/Matamoros,29.32322,-100.95217 Ciudad Apodaca,467157,MX,America/Monterrey,25.78195,-100.18839 Ciudad Benito Juárez,308285,MX,America/Monterrey,25.64724,-100.09582 Ciudad Bolívar,412619,VE,America/Caracas,8.12366,-63.54694 @@ -568,7 +575,7 @@ Ciudad Guayana,978202,VE,America/Caracas,8.35122,-62.64102 Ciudad Juárez,1512450,MX,America/Ciudad_Juarez,31.72024,-106.46084 Ciudad Lineal,228171,ES,Europe/Madrid,40.44505,-3.65132 Ciudad López Mateos,489160,MX,America/Mexico_City,19.55793,-99.25675 -Ciudad Nezahualcoyotl,1104585,MX,America/Mexico_City,19.40061,-99.01483 +Ciudad Nezahualcoyotl,1077208,MX,America/Mexico_City,19.40061,-99.01483 Ciudad Obregón,329404,MX,America/Hermosillo,27.48642,-109.94079 Ciudad Ojeda,240283,VE,America/Caracas,10.20161,-71.3148 Ciudad Victoria,332100,MX,America/Monterrey,23.74061,-99.14364 @@ -576,7 +583,7 @@ Cixi,1457510,CN,Asia/Shanghai,30.1764,121.2457 Cleveland,365379,US,America/New_York,41.4995,-81.69541 Cluj-Napoca,286598,RO,Europe/Bucharest,46.76667,23.6 Coacalco,277959,MX,America/Mexico_City,19.62923,-99.10689 -Coatzacoalcos,235983,MX,America/Mexico_City,18.14905,-94.4447 +Coatzacoalcos,310698,MX,America/Mexico_City,18.14905,-94.4447 Cobán,212047,GT,America/Guatemala,15.47025,-90.37455 Cochabamba,841276,BO,America/La_Paz,-17.38195,-66.15995 Coimbatore,2136916,IN,Asia/Kolkata,11.00555,76.96612 @@ -587,6 +594,7 @@ Colorado Springs,456568,US,America/Denver,38.83388,-104.82136 Columbus,206922,US,America/New_York,32.46098,-84.98771 Columbus,913175,US,America/New_York,39.96118,-82.99879 Comilla,1030000,BD,Asia/Dhaka,23.46186,91.18503 +Commonwealth,215034,PH,Asia/Manila,14.6969,121.08006 Conakry,1928389,GN,Africa/Conakry,9.53795,-13.67729 Concepción,223574,CL,America/Santiago,-36.82699,-73.04977 Constantine,448028,DZ,Africa/Algiers,36.365,6.61472 @@ -596,16 +604,16 @@ Copenhagen,1153615,DK,Europe/Copenhagen,55.67594,12.56553 Coro,246657,VE,America/Caracas,11.40769,-69.67822 Corpus Christi,316239,US,America/Chicago,27.80058,-97.39638 Corrientes,346334,AR,America/Argentina/Cordoba,-27.46784,-58.8344 -Cotabato,325079,PH,Asia/Manila,7.22361,124.24639 +Cotabato,383383,PH,Asia/Manila,7.22361,124.24639 Cotia,253608,BR,America/Sao_Paulo,-23.60389,-46.91917 Cotonou,679012,BJ,Africa/Porto-Novo,6.36536,2.41833 Coventry,345324,GB,Europe/London,52.40656,-1.51217 Cox's Bāzār,253788,BD,Asia/Dhaka,21.43973,92.00955 -Coyoacán,620416,MX,America/Mexico_City,19.3467,-99.16174 +Coyoacán,614447,MX,America/Mexico_City,19.3467,-99.16174 Craiova,234140,RO,Europe/Bucharest,44.31667,23.8 Croix-des-Bouquets,229127,HT,America/Port-au-Prince,18.57677,-72.22625 Cuauhtémoc,531831,MX,America/Mexico_City,19.44506,-99.14612 -Cuautitlán Izcalli,484573,MX,America/Mexico_City,19.64388,-99.21598 +Cuautitlán Izcalli,555163,MX,America/Mexico_City,19.64388,-99.21598 Cuenca,636996,EC,America/Guayaquil,-2.8953,-78.9963 Cuernavaca,338650,MX,America/Mexico_City,18.9261,-99.23075 Cuiabá,618124,BR,America/Cuiaba,-15.59611,-56.09667 @@ -620,8 +628,10 @@ Częstochowa,248125,PL,Europe/Warsaw,50.79646,19.12409 Cà Mau,226372,VN,Asia/Ho_Chi_Minh,9.17682,105.15242 Córdoba,2106734,AR,America/Argentina/Cordoba,-31.40648,-64.18853 Córdoba,325708,ES,Europe/Madrid,37.89155,-4.77275 +Córdoba,204721,MX,America/Mexico_City,18.8842,-96.92559 Cúcuta,777106,CO,America/Bogota,7.90745,-72.5049 Cần Thơ,1507187,VN,Asia/Ho_Chi_Minh,10.03711,105.78825 +Cầu Giấy,292536,VN,Asia/Bangkok,21.03228,105.80073 Da Nang,1276000,VN,Asia/Ho_Chi_Minh,16.06778,108.22083 Dadu,201017,PK,Asia/Karachi,26.73033,67.7769 Daegu,2365523,KR,Asia/Seoul,35.87028,128.59111 @@ -640,20 +650,21 @@ Dandong,631973,CN,Asia/Shanghai,40.12917,124.39472 Daqing,1604027,CN,Asia/Shanghai,46.58333,125 Dar es Salaam,5383728,TZ,Africa/Dar_es_Salaam,-6.82349,39.26951 Darbhanga,296039,IN,Asia/Kolkata,26.15216,85.89707 +Darnytsya,343384,UA,Europe/Kyiv,50.41596,30.69534 Dasmariñas,441876,PH,Asia/Manila,14.32944,120.93667 Datong,1850000,CN,Asia/Shanghai,40.09361,113.29139 Davangere,435128,IN,Asia/Kolkata,14.46693,75.92694 -Davao,1776949,PH,Asia/Manila,7.07306,125.61278 +Davao,1848947,PH,Asia/Manila,7.07306,125.61278 Daye,347406,CN,Asia/Shanghai,30.08333,114.95 Dayrah,400000,AE,Asia/Dubai,25.27143,55.30207 Dazhou,1589435,CN,Asia/Shanghai,31.2106,107.46308 Debrecen,202402,HU,Europe/Budapest,47.53167,21.62444 Dehiwala-Mount Lavinia,219827,LK,Asia/Colombo,6.84019,79.87116 -Dehra Dūn,522081,IN,Asia/Kolkata,30.32443,78.03392 +Dehradun,522081,IN,Asia/Kolkata,30.32443,78.03392 Deir ez-Zor,271800,SY,Asia/Damascus,35.33588,40.14084 Delhi,11034555,IN,Asia/Kolkata,28.65195,77.23149 Delmas,382920,HT,America/Port-au-Prince,18.54478,-72.30036 -Dengzhou,285032,CN,Asia/Shanghai,32.68222,112.08194 +Dengzhou,285032,CN,Asia/Shanghai,32.68273,112.08873 Denizli,313238,TR,Europe/Istanbul,37.77417,29.0875 Denpasar,725314,ID,Asia/Makassar,-8.65,115.21667 Denver,729019,US,America/Denver,39.73915,-104.9847 @@ -663,15 +674,18 @@ Dera Ghazi Khan,494464,PK,Asia/Karachi,30.04587,70.64029 Dera Ismail Khan,763195,PK,Asia/Karachi,31.83129,70.9017 Derby,270468,GB,Europe/London,52.92277,-1.47663 Des Moines,214133,US,America/Chicago,41.60054,-93.60911 +Desna,368500,UA,Europe/Kyiv,50.52207,30.68228 Dessie,270400,ET,Africa/Addis_Ababa,11.13333,39.63333 Detroit,645705,US,America/Detroit,42.33143,-83.04575 Dewas,289550,IN,Asia/Kolkata,22.96585,76.05526 Deyang,735070,CN,Asia/Shanghai,31.13019,104.38198 +Dezfūl,264709,IR,Asia/Tehran,32.41667,48.21667 Dezhou,679535,CN,Asia/Shanghai,37.44661,116.36706 Dhaka,10356500,BD,Asia/Dhaka,23.7104,90.40744 Dhanbad,1196214,IN,Asia/Kolkata,23.79759,86.42992 Dhangaḍhi̇̄,204788,NP,Asia/Kathmandu,28.70159,80.58991 Dhule,375559,IN,Asia/Kolkata,20.9013,74.77737 +Dhārāvi,700000,IN,Asia/Kolkata,19.05,72.86667 Diadema,393237,BR,America/Sao_Paulo,-23.68611,-46.62278 Diepsloot,350000,ZA,Africa/Johannesburg,-25.93312,28.01213 Diez de Octubre,227293,CU,America/Havana,23.0881,-82.3597 @@ -685,6 +699,7 @@ Diyarbakır,1791373,TR,Europe/Istanbul,37.91363,40.21721 Djelfa,265833,DZ,Africa/Algiers,34.67279,3.263 Djibouti,626512,DJ,Africa/Djibouti,11.58901,43.14503 Dnipro,968502,UA,Europe/Kyiv,48.46664,35.04066 +Dniprovskyi,357900,UA,Europe/Kyiv,50.45366,30.60146 Dodoma,765179,TZ,Africa/Dar_es_Salaam,-6.17221,35.73947 Doha,344939,QA,Asia/Qatar,25.28545,51.53096 Dombivali,1247327,IN,Asia/Kolkata,19.21667,73.08333 @@ -720,9 +735,10 @@ Edmonton,1010899,CA,America/Edmonton,53.55014,-113.46871 Edogawe,697932,JP,Asia/Tokyo,35.69225,139.87308 Efon-Alaaye,279319,NG,Africa/Lagos,7.65649,4.92235 Eimsbüttel,269118,DE,Europe/Berlin,53.57416,9.95679 -Eindhoven,209620,NL,Europe/Amsterdam,51.44083,5.47778 +Eindhoven,235691,NL,Europe/Amsterdam,51.44083,5.47778 Eixample,266477,ES,Europe/Madrid,41.38896,2.16179 El Daein,264734,SD,Africa/Khartoum,11.46186,26.12583 +El Dibir,200000,SO,Africa/Mogadishu,11.76667,51.21667 El Fasher,252609,SD,Africa/Khartoum,13.62793,25.34936 El Jadida,212863,MA,Africa/Casablanca,33.25682,-8.50882 El Obeid,393311,SD,Africa/Khartoum,13.18421,30.21669 @@ -740,7 +756,7 @@ Enshi,279185,CN,Asia/Shanghai,30.3,109.48333 Enugu,950000,NG,Africa/Lagos,6.44132,7.49883 Epworth,206368,ZW,Africa/Harare,-17.89,31.1475 Erbil,1612700,IQ,Asia/Baghdad,36.19117,44.00943 -Erfurt,213692,DE,Europe/Berlin,50.9787,11.03283 +Erfurt,213692,DE,Europe/Berlin,50.97734,11.03536 Erode,521891,IN,Asia/Kolkata,11.3428,77.72741 Erzurum,767848,TR,Europe/Istanbul,39.90861,41.27694 Esenler,520235,TR,Europe/Istanbul,41.0435,28.87619 @@ -748,7 +764,8 @@ Esenyurt,211330,TR,Europe/Istanbul,41.02697,28.67732 Eskişehir,789023,TR,Europe/Istanbul,39.77667,30.52056 Eslamshahr,450000,IR,Asia/Tehran,35.55222,51.23504 Esmeraldas,218727,EC,America/Guayaquil,0.9592,-79.65397 -Espoo,256760,FI,Europe/Helsinki,60.2052,24.6522 +Esna,462787,EG,Africa/Cairo,25.29336,32.55402 +Espoo,323910,FI,Europe/Helsinki,60.2052,24.6522 Essen,593085,DE,Europe/Berlin,51.45657,7.01228 Etobicoke,365000,CA,America/Toronto,43.64415,-79.56985 Etāwah,257448,IN,Asia/Kolkata,26.77615,79.02133 @@ -805,33 +822,36 @@ Gajuwaka,258944,IN,Asia/Kolkata,17.7,83.21667 Galaţi,217851,RO,Europe/Bucharest,45.43687,28.05028 Gandajika,208051,CD,Africa/Lubumbashi,-6.74504,23.95328 Gandhinagar,292797,IN,Asia/Kolkata,23.21667,72.68333 -Ganja,335600,AZ,Asia/Baku,40.68278,46.36056 +Gangneung,208161,KR,Asia/Seoul,37.75266,128.87239 +Ganja,335600,AZ,Asia/Baku,40.68157,46.36134 Ganzhou,1977253,CN,Asia/Shanghai,25.84664,114.9326 Gaomi,391986,CN,Asia/Shanghai,36.38333,119.75278 Gaoping,204368,CN,Asia/Shanghai,30.77576,106.10294 Gaozhou,292164,CN,Asia/Shanghai,21.91965,110.85678 Garland,236897,US,America/Chicago,32.91262,-96.63888 -Gasteiz / Vitoria,249176,ES,Europe/Madrid,42.84998,-2.67268 -Gatineau,242124,CA,America/Toronto,45.47723,-75.70164 +Gasteiz / Vitoria,257407,ES,Europe/Madrid,42.84998,-2.67268 +Gatineau,300045,CA,America/Toronto,45.47723,-75.70164 Gaya,474093,IN,Asia/Kolkata,24.79686,85.00385 Gaza,410000,PS,Asia/Gaza,31.50161,34.46672 Gaziantep,2130432,TR,Europe/Istanbul,37.05944,37.3825 Gazipur,2674697,BD,Asia/Dhaka,23.99844,90.42234 Gboko,365000,NG,Africa/Lagos,7.32275,9.00108 -Gdańsk,461865,PL,Europe/Warsaw,54.35227,18.64912 +Gdańsk,487371,PL,Europe/Warsaw,54.35227,18.64912 Gdynia,257000,PL,Europe/Warsaw,54.51889,18.53188 Gebze,281436,TR,Europe/Istanbul,40.80276,29.43068 -Geelong,268984,AU,Australia/Melbourne,-38.14711,144.36069 +Geelong,282809,AU,Australia/Melbourne,-38.14711,144.36069 Geita,318006,TZ,Africa/Dar_es_Salaam,-2.8725,32.2325 Gelsenkirchen,270028,DE,Europe/Berlin,51.50508,7.09654 -General Santos,697315,PH,Asia/Manila,6.11278,125.17167 +General Santos,722059,PH,Asia/Manila,6.11278,125.17167 Genoa,580097,IT,Europe/Rome,44.40478,8.94439 Gent,265086,BE,Europe/Brussels,51.05,3.71667 Genève,201741,CH,Europe/Zurich,46.20222,6.14569 +Geoje,232921,KR,Asia/Seoul,34.81379,128.70556 Georgetown,235017,GY,America/Guyana,6.80448,-58.15527 +Germiston,255863,ZA,Africa/Johannesburg,-26.23481,28.17665 Ghulja,269158,CN,Asia/Urumqi,43.91515,81.32151 Ghāziābād,1199191,IN,Asia/Kolkata,28.66535,77.43915 -Gia Lâm,309353,VN,Asia/Bangkok,21.05352,106.00712 +Gia Lâm,309353,VN,Asia/Bangkok,21.02,105.939 Gifu,402557,JP,Asia/Tokyo,35.42291,136.76039 Gijón,271780,ES,Europe/Madrid,43.53573,-5.66152 Gilbert,247542,US,America/Phoenix,33.35283,-111.78903 @@ -851,16 +871,16 @@ Gongheyong,204881,CN,Asia/Shanghai,22.75923,113.79452 Gorakhpur,1324570,IN,Asia/Kolkata,29.44768,75.67206 Gorakhpur,674246,IN,Asia/Kolkata,26.76628,83.36889 Gorgān,244937,IR,Asia/Tehran,36.8427,54.44391 -Gosāba,222764,IN,Asia/Kolkata,22.16547,88.8007 Governador Valadares,250878,BR,America/Sao_Paulo,-18.85111,-41.94944 -Goyang-si,1074784,KR,Asia/Seoul,37.65639,126.835 +Goyang-si,1061752,KR,Asia/Seoul,37.65639,126.835 +Gqeberha,1050078,ZA,Africa/Johannesburg,-33.96109,25.61494 Grajaú,384873,BR,America/Sao_Paulo,-23.76979,-46.67112 Granada,233532,ES,Europe/Madrid,37.18817,-3.60667 Gravataí,265074,BR,America/Sao_Paulo,-29.94218,-50.99278 -Graz,303270,AT,Europe/Vienna,47.06667,15.45 +Graz,303270,AT,Europe/Vienna,47.06733,15.44197 Greater Noida,293908,IN,Asia/Kolkata,28.49615,77.53601 Greensboro,285342,US,America/New_York,36.07264,-79.79198 -Groningen,238147,NL,Europe/Amsterdam,53.21917,6.56667 +Groningen,244807,NL,Europe/Amsterdam,53.21917,6.56667 Grozny,297137,RU,Europe/Moscow,43.31195,45.68895 Guadalajara,1385629,MX,America/Mexico_City,20.67738,-103.34749 Guadalupe,673616,MX,America/Monterrey,25.67678,-100.25646 @@ -895,7 +915,7 @@ Guwahati,962334,IN,Asia/Kolkata,26.1844,91.7458 Guyuan,411854,CN,Asia/Shanghai,36.00667,106.28083 Guédiawaye,329659,SN,Africa/Dakar,14.77446,-17.40212 Gwalior,1054420,IN,Asia/Kolkata,26.22983,78.17337 -Gwangju,1411357,KR,Asia/Seoul,35.15472,126.91556 +Gwangju,1398538,KR,Asia/Seoul,35.15472,126.91556 Gwangmyeong,357545,KR,Asia/Seoul,37.47722,126.86639 Gyeongju,245365,KR,Asia/Seoul,35.84278,129.21167 Gyeongsan-si,266951,KR,Asia/Seoul,35.82333,128.73778 @@ -909,6 +929,7 @@ Hachiōji,579355,JP,Asia/Tokyo,35.65583,139.32389 Haeju,222396,KP,Asia/Pyongyang,38.04056,125.71472 Hafar Al-Batin,271642,SA,Asia/Riyadh,28.43279,45.97077 Hafizabad,318621,PK,Asia/Karachi,32.07095,73.68802 +Hai Bà Trưng,303586,VN,Asia/Bangkok,21.01341,105.84772 Haifa,285316,IL,Asia/Jerusalem,32.81303,34.99928 Haikou,2873358,CN,Asia/Shanghai,20.03421,110.34651 Hailar,211066,CN,Asia/Shanghai,49.2,119.7 @@ -946,7 +967,7 @@ Henderson,285667,US,America/Los_Angeles,36.0397,-114.98194 Hengshui,522147,CN,Asia/Shanghai,37.73908,115.68348 Hengyang,1075516,CN,Asia/Shanghai,26.88946,112.61888 Hermosillo,812229,MX,America/Hermosillo,29.08874,-110.96677 -Heroica Matamoros,449815,MX,America/Matamoros,25.87972,-97.50417 +Heroica Matamoros,510739,MX,America/Matamoros,25.87972,-97.50417 Herāt,574300,AF,Asia/Kabul,34.34817,62.19967 Heshan,1249807,CN,Asia/Shanghai,28.56938,112.34733 Heyuan,463907,CN,Asia/Shanghai,23.73333,114.68333 @@ -959,10 +980,12 @@ Hirakata,406331,JP,Asia/Tokyo,34.81352,135.64914 Hiratsuka,258422,JP,Asia/Tokyo,35.32785,139.33735 Hiroshima,1200754,JP,Asia/Tokyo,34.4,132.45 Hisar,307024,IN,Asia/Kolkata,29.15394,75.72294 +Hlaingthaya,687867,MM,Asia/Yangon,16.85,96.06667 Ho Chi Minh City,14002598,VN,Asia/Ho_Chi_Minh,10.82302,106.62965 Hobart,252639,AU,Australia/Hobart,-42.87936,147.32941 Hohhot,2350000,CN,Asia/Shanghai,40.81056,111.65222 Holguín,319102,CU,America/Havana,20.88722,-76.26306 +Holosiyiv,251021,UA,Europe/Kyiv,50.34433,30.55178 Homs,775404,SY,Asia/Damascus,34.72405,36.72559 Homyel',501102,BY,Europe/Minsk,52.4345,30.9754 Honchō,644668,JP,Asia/Tokyo,35.70129,139.98648 @@ -992,6 +1015,7 @@ Huayin,242488,CN,Asia/Shanghai,34.56528,110.06639 Hubballi,943788,IN,Asia/Kolkata,15.34776,75.13378 Huizhou,2900113,CN,Asia/Shanghai,23.11147,114.41523 Hulan Ergi,265344,CN,Asia/Shanghai,47.20417,123.63333 +Huludao,944495,CN,Asia/Shanghai,40.75243,120.83552 Hulunbuir,349400,CN,Asia/Shanghai,49.21141,119.75582 Huntington Beach,201899,US,America/Los_Angeles,33.6603,-117.99923 Huntsville,215006,US,America/Chicago,34.7304,-86.58594 @@ -1002,6 +1026,7 @@ Huế,1380000,VN,Asia/Bangkok,16.4619,107.59546 Hwaseong-si,640890,KR,Asia/Seoul,37.20682,126.8169 Hyderabad,6993262,IN,Asia/Kolkata,17.38405,78.45636 Hyderabad,1921275,PK,Asia/Karachi,25.39689,68.37718 +Hà Tĩnh,266321,VN,Asia/Bangkok,18.34282,105.90569 Hāpur,242920,IN,Asia/Kolkata,28.72985,77.78068 Hāthazāri,498179,BD,Asia/Dhaka,22.50515,91.81339 Hŭngnam,346082,KP,Asia/Pyongyang,39.84198,127.63206 @@ -1029,15 +1054,16 @@ Ile-Ife,560000,NG,Africa/Lagos,7.4824,4.56032 Ilesa,325000,NG,Africa/Lagos,7.62789,4.74161 Iligan,342618,PH,Asia/Manila,8.2289,124.24344 Iligan City,312323,PH,Asia/Manila,8.25,124.4 -Iloilo,457626,PH,Asia/Manila,10.69694,122.56444 +Iloilo,473728,PH,Asia/Manila,10.69694,122.56444 Ilorin,1080000,NG,Africa/Lagos,8.49664,4.54214 Imperatriz,218106,BR,America/Fortaleza,-5.52639,-47.49167 Imphal,277196,IN,Asia/Kolkata,24.80805,93.9442 -Imus,216099,PH,Asia/Manila,14.42972,120.93667 -Incheon,3016250,KR,Asia/Seoul,37.45646,126.70515 +Imus,481949,PH,Asia/Manila,14.42972,120.93667 +Incheon,3039450,KR,Asia/Seoul,37.45646,126.70515 Indaiatuba,256223,BR,America/Sao_Paulo,-23.08842,-47.2119 Indianapolis,887642,US,America/Indiana/Indianapolis,39.76838,-86.15804 Indore,1994397,IN,Asia/Kolkata,22.71792,75.8333 +Ingombota,370000,AO,Africa/Luanda,-8.81806,13.22889 Insein,247675,MM,Asia/Yangon,16.88874,96.10257 Ipatinga,228746,BR,America/Sao_Paulo,-19.46833,-42.53667 Ipoh,759952,MY,Asia/Kuala_Lumpur,4.5841,101.0829 @@ -1045,8 +1071,7 @@ Iquitos,377609,PE,America/Lima,-3.74814,-73.2529 Irapuato,380941,MX,America/Mexico_City,20.67675,-101.35628 Irbid,569068,JO,Asia/Amman,32.55556,35.85 Iringa,202490,TZ,Africa/Dar_es_Salaam,-7.76667,35.7 -Irkutsk,623869,RU,Asia/Irkutsk,52.29795,104.29585 -Ironville,288649,US,America/New_York,38.45647,-82.69238 +Irkutsk,623869,RU,Asia/Irkutsk,52.29566,104.29076 Irvine,256927,US,America/Los_Angeles,33.66946,-117.82311 Irving,236607,US,America/Chicago,32.81402,-96.94889 Isesaki,211850,JP,Asia/Tokyo,36.31667,139.2 @@ -1069,15 +1094,15 @@ Itapevi,240961,BR,America/Sao_Paulo,-23.54889,-46.93417 Itaquaquecetuba,369275,BR,America/Sao_Paulo,-23.48611,-46.34833 Itaquera,210960,BR,America/Sao_Paulo,-23.53194,-46.44417 Ivano-Frankivsk,238196,UA,Europe/Kyiv,48.92312,24.71248 -Ivanovo,406113,RU,Europe/Moscow,56.99719,40.97139 +Ivanovo,406113,RU,Europe/Moscow,56.99988,40.97257 Iwaki,357309,JP,Asia/Tokyo,37.05,140.88333 Iwo,250443,NG,Africa/Lagos,7.63527,4.18156 Ixtapaluca,322271,MX,America/Mexico_City,19.31556,-98.88284 -Izhevsk,648213,RU,Europe/Samara,56.84976,53.20448 +Izhevsk,648213,RU,Europe/Samara,56.85225,53.19862 Iztacalco,384326,MX,America/Mexico_City,19.39528,-99.09778 -Iztapalapa,1815786,MX,America/Mexico_City,19.35529,-99.06224 +Iztapalapa,1835486,MX,America/Mexico_City,19.35529,-99.06224 İskenderun,251682,TR,Europe/Istanbul,36.58718,36.17347 -İzmir,2500603,TR,Europe/Istanbul,38.41273,27.13838 +İzmir,2938292,TR,Europe/Istanbul,38.41273,27.13838 Jabalpur,1081677,IN,Asia/Kolkata,23.16697,79.95006 Jabaquara,214958,BR,America/Sao_Paulo,-23.65055,-46.64591 Jaboatão,702621,BR,America/Recife,-8.18028,-35.00139 @@ -1103,7 +1128,7 @@ Jebel Ali,210000,AE,Asia/Dubai,25.00255,55.10811 Jeddah,4697000,SA,Asia/Riyadh,21.49012,39.18624 Jeju City,488844,KR,Asia/Seoul,33.50972,126.52194 Jember,298585,ID,Asia/Jakarta,-8.17211,113.69953 -Jeonju,638019,KR,Asia/Seoul,35.82194,127.14889 +Jeonju,629618,KR,Asia/Seoul,35.82194,127.14889 Jepara,1257912,ID,Asia/Jakarta,-6.5924,110.671 Jerez de la Frontera,212879,ES,Europe/Madrid,36.68645,-6.13606 Jersey City,264290,US,America/New_York,40.72816,-74.07764 @@ -1143,6 +1168,7 @@ Jinzhou,215386,CN,Asia/Shanghai,39.1,121.71667 Jinzhou,604269,CN,Asia/Shanghai,41.10778,121.14167 Jiujiang,1164268,CN,Asia/Shanghai,29.70475,116.00206 Jiuquan,428346,CN,Asia/Shanghai,39.74318,98.51736 +Jiutepec,215357,MX,America/Mexico_City,18.88139,-99.17778 Jixi,403759,CN,Asia/Shanghai,45.29322,130.96217 Jiyuan,242143,CN,Asia/Shanghai,35.08912,112.58815 Jizhou,362013,CN,Asia/Shanghai,37.55054,115.56871 @@ -1163,6 +1189,7 @@ Jurong Town,262730,SG,Asia/Singapore,1.33417,103.72278 Jurong West,257470,SG,Asia/Singapore,1.35028,103.72278 Jālna,285577,IN,Asia/Kolkata,19.84102,75.88636 Jūnāgadh,319462,IN,Asia/Kolkata,21.51966,70.45981 +Kabankalan,210893,PH,Asia/Manila,9.9839,122.81423 Kabinda,219396,CD,Africa/Lubumbashi,-6.13791,24.48179 Kabul,4434550,AF,Asia/Kabul,34.52813,69.17233 Kabwe,288598,ZM,Africa/Lusaka,-14.4469,28.44644 @@ -1170,18 +1197,21 @@ Kadapa,344893,IN,Asia/Kolkata,14.47995,78.82346 Kaduna,1850000,NG,Africa/Lagos,10.52641,7.43879 Kaech'ŏn,319554,KP,Asia/Pyongyang,39.70056,125.89333 Kaesŏng,338155,KP,Asia/Pyongyang,37.97083,126.55444 +Kafrul,339734,BD,Asia/Dhaka,23.78822,90.37359 Kagoshima,595049,JP,Asia/Tokyo,31.56667,130.55 Kahama,453654,TZ,Africa/Dar_es_Salaam,-3.83333,32.6 Kahramanmaraş,384953,TR,Europe/Istanbul,37.5847,36.92641 Kaifeng,1451741,CN,Asia/Shanghai,34.7986,114.30742 Kaili,275745,CN,Asia/Shanghai,26.58583,107.97972 +Kajang,236240,MY,Asia/Kuala_Lumpur,2.99424,101.78875 Kakamega,1867579,KE,Africa/Nairobi,0.28422,34.75229 Kakogawachō-honmachi,271634,JP,Asia/Tokyo,34.76943,134.82905 Kalaburagi,543147,IN,Asia/Kolkata,17.33583,76.83757 -Kaliningrad,475056,RU,Europe/Kaliningrad,54.70649,20.51095 +Kalemyo,348573,MM,Asia/Yangon,23.19014,94.06405 +Kaliningrad,475056,RU,Europe/Kaliningrad,54.70639,20.51102 Kalininskiy,504641,RU,Europe/Moscow,59.99675,30.3899 Kallakurichi,1682687,IN,Asia/Kolkata,11.73379,78.95925 -Kaluga,340851,RU,Europe/Moscow,54.5293,36.27542 +Kaluga,340851,RU,Europe/Moscow,54.53063,36.27 Kalyān,1262255,IN,Asia/Kolkata,19.2437,73.13554 Kamina,200184,CD,Africa/Lubumbashi,-8.73508,24.99798 Kampala,1680600,UG,Africa/Kampala,0.31628,32.58219 @@ -1208,6 +1238,7 @@ Karachi,11624219,PK,Asia/Karachi,24.8608,67.0104 Karagandy,497777,KZ,Asia/Almaty,49.80187,73.10211 Karaj,1448075,IR,Asia/Tehran,35.83266,50.99155 Karamay,261445,CN,Asia/Urumqi,45.58473,84.88724 +Karawang,307880,ID,Asia/Jakarta,-6.30525,107.3197 Karbala,1218732,IQ,Asia/Baghdad,32.61603,44.02488 Kariega,291052,ZA,Africa/Johannesburg,-33.75562,25.40074 Karlsruhe,283799,DE,Europe/Berlin,49.00937,8.40444 @@ -1217,6 +1248,7 @@ Karol Bāgh,505241,IN,Asia/Kolkata,28.65136,77.19072 Karur,234191,IN,Asia/Kolkata,10.95771,78.08095 Karāwalnagar,224281,IN,Asia/Kolkata,28.72712,77.27047 Karīmnagar,289821,IN,Asia/Kolkata,18.43915,79.12856 +Karşıyaka,339624,TR,Europe/Istanbul,38.45772,27.1142 Kasangati,207800,UG,Africa/Kampala,0.43803,32.60246 Kashgar,506640,CN,Asia/Urumqi,39.46718,75.98675 Kashiwa,433436,JP,Asia/Tokyo,35.86224,139.97732 @@ -1227,10 +1259,10 @@ Kasulu,238321,TZ,Africa/Dar_es_Salaam,-4.57667,30.1025 Kasur,510875,PK,Asia/Karachi,31.11866,74.45025 Kathmandu,1442271,NP,Asia/Kathmandu,27.70169,85.3206 Katihar,240838,IN,Asia/Kolkata,25.53852,87.57044 -Katowice,317316,PL,Europe/Warsaw,50.25841,19.02754 +Katowice,286960,PL,Europe/Warsaw,50.2597,19.02173 Katsina,670000,NG,Africa/Lagos,12.99082,7.60177 Katsushika,453093,JP,Asia/Tokyo,35.73333,139.85 -Kaunas,289380,LT,Europe/Vilnius,54.90272,23.90961 +Kaunas,289380,LT,Europe/Vilnius,54.90156,23.90909 Kawagoe,354571,JP,Asia/Tokyo,35.90861,139.48528 Kawaguchi,607373,JP,Asia/Tokyo,35.80521,139.71072 Kawasaki,1538262,JP,Asia/Tokyo,35.52056,139.71722 @@ -1239,12 +1271,12 @@ Kazan,1243500,RU,Europe/Moscow,55.78874,49.12214 Kediri,235143,ID,Asia/Jakarta,-7.81667,112.01667 Keelung,362487,TW,Asia/Taipei,25.13089,121.74094 Kelar,250000,IQ,Asia/Baghdad,34.62805,45.31852 -Kemerovo,558973,RU,Asia/Novokuznetsk,55.33333,86.08333 +Kemerovo,558973,RU,Asia/Novokuznetsk,55.35417,86.10435 Kendari,345107,ID,Asia/Makassar,-3.9778,122.51507 Kenitra,470949,MA,Africa/Casablanca,34.26101,-6.5802 Kerman,577514,IR,Asia/Tehran,30.28321,57.07879 Kermanshah,621100,IR,Asia/Tehran,34.31417,47.065 -Khabarovsk,618150,RU,Asia/Vladivostok,48.48032,135.08822 +Khabarovsk,618150,RU,Asia/Vladivostok,48.46204,135.0971 Khabarovsk Vtoroy,578303,RU,Asia/Vladivostok,48.43787,135.12994 Khamis Mushait,387553,SA,Asia/Riyadh,18.3,42.73333 Khandwa,200738,IN,Asia/Kolkata,21.82427,76.35086 @@ -1262,7 +1294,6 @@ Khouribga,214241,MA,Africa/Casablanca,32.88108,-6.9063 Khulna,1500689,BD,Asia/Dhaka,22.80979,89.56439 Kibaha,265360,TZ,Africa/Dar_es_Salaam,-6.76667,38.91667 Kiel,246601,DE,Europe/Berlin,54.32133,10.13489 -Kielce,208598,PL,Europe/Warsaw,50.87033,20.62752 Kigali,1132686,RW,Africa/Kigali,-1.94995,30.05885 Kigoma,232388,TZ,Africa/Dar_es_Salaam,-4.87694,29.62667 Kikuyu,323881,KE,Africa/Nairobi,-1.24627,36.66291 @@ -1274,7 +1305,7 @@ Kingston upon Hull,314018,GB,Europe/London,53.7446,-0.33525 Kinshasa,16000000,CD,Africa/Kinshasa,-4.32758,15.31357 Kira,462900,UG,Africa/Kampala,0.4,32.63333 Kirkuk,1031000,IQ,Asia/Baghdad,35.46806,44.39222 -Kirov,507155,RU,Europe/Kirov,58.59665,49.66007 +Kirov,507155,RU,Europe/Kirov,58.59809,49.65783 Kirāri Sulemānnagar,283211,IN,Asia/Kolkata,28.69736,77.0648 Kisangani,1181788,CD,Africa/Lubumbashi,0.51528,25.19099 Kishiwada,205561,JP,Asia/Tokyo,34.46667,135.36667 @@ -1284,8 +1315,9 @@ Kita,332140,JP,Asia/Tokyo,35.75264,139.73348 Kitakyushu,940978,JP,Asia/Tokyo,33.85181,130.85034 Kitchener,256885,CA,America/Toronto,43.42537,-80.5112 Kitwe,665961,ZM,Africa/Lusaka,-12.80243,28.21323 -Klang,879867,MY,Asia/Kuala_Lumpur,3.03667,101.44333 +Klang,240016,MY,Asia/Kuala_Lumpur,3.03667,101.44333 Klerksdorp,227039,ZA,Africa/Johannesburg,-26.85213,26.66672 +Kluang,323762,MY,Asia/Kuala_Lumpur,2.03046,103.31689 Kobe,1525152,JP,Asia/Tokyo,34.6913,135.183 Kochi,633553,IN,Asia/Kolkata,9.93988,76.26022 Kochi,332059,JP,Asia/Tokyo,33.55,133.53333 @@ -1293,34 +1325,36 @@ Kolhāpur,549236,IN,Asia/Kolkata,16.69563,74.23167 Kolkata,4631392,IN,Asia/Kolkata,22.56263,88.36304 Kollam,367107,IN,Asia/Kolkata,8.88113,76.58469 Kolwezi,790248,CD,Africa/Lubumbashi,-10.71484,25.46674 +Kom Ombo,409311,EG,Africa/Cairo,24.47669,32.94626 Komsomolsk-on-Amur,275908,RU,Asia/Vladivostok,50.55034,137.00995 Kon Tum,205762,VN,Asia/Ho_Chi_Minh,14.35451,108.00759 +Konak,332277,TR,Europe/Istanbul,38.4,27.1 Konibodom,211100,TJ,Asia/Dushanbe,40.29414,70.43122 Konya,1433861,TR,Europe/Istanbul,37.87135,32.48464 Korba,419146,IN,Asia/Kolkata,22.3458,82.69633 Korhogo,440926,CI,Africa/Abidjan,9.45803,-5.62961 Korla,549324,CN,Asia/Urumqi,41.76055,86.15231 +Koronadal,201844,PH,Asia/Manila,6.50306,124.84694 Koshigaya,345353,JP,Asia/Tokyo,35.89035,139.78916 Kostanay,210000,KZ,Asia/Qostanay,53.21435,63.62463 Kosti,345068,SD,Africa/Khartoum,13.1629,32.66347 -Kostroma,277280,RU,Europe/Moscow,57.76647,40.92686 +Kostroma,277280,RU,Europe/Moscow,57.76638,40.92828 Kota,1001694,IN,Asia/Kolkata,25.18254,75.83907 Kota Bharu,568900,MY,Asia/Kuala_Lumpur,6.12361,102.24333 Kota Damansara,500000,MY,Asia/Kuala_Lumpur,3.15454,101.58022 Kota Kinabalu,500421,MY,Asia/Kuching,5.9749,116.0724 Kota Kuala Muda,544984,MY,Asia/Kuala_Lumpur,5.58822,100.37085 -Kotli,640000,PK,Asia/Karachi,33.51836,73.9022 Kotō,543730,JP,Asia/Tokyo,32.77856,130.74537 Koumassi,412282,CI,Africa/Abidjan,5.29716,-3.96753 Koutiala,218031,ML,Africa/Bamako,12.38723,-5.46507 Kowloon,2232339,HK,Asia/Hong_Kong,22.31667,114.18333 Kowloon City,418732,HK,Asia/Hong_Kong,22.33047,114.19222 Kozhikode,550440,IN,Asia/Kolkata,11.24802,75.7804 -Košice,225044,SK,Europe/Bratislava,48.71395,21.25808 -Kraków,755050,PL,Europe/Warsaw,50.06143,19.93658 -Krasnodar,899541,RU,Europe/Moscow,45.04484,38.97603 +Košice,225044,SK,Europe/Bratislava,48.71441,21.25802 +Kraków,804237,PL,Europe/Warsaw,50.06143,19.93658 +Krasnodar,899541,RU,Europe/Moscow,45.04534,38.98178 Krasnogvargeisky,337091,RU,Europe/Moscow,59.97305,30.47607 -Krasnoyarsk,1090811,RU,Asia/Krasnoyarsk,56.02668,92.90765 +Krasnoyarsk,1090811,RU,Asia/Krasnoyarsk,56.03742,92.93136 Krefeld,237984,DE,Europe/Berlin,51.33645,6.55381 Kremenchuk,217710,UA,Europe/Kyiv,49.06253,33.40484 Kropyvnytskyy,219676,UA,Europe/Kyiv,48.50834,32.26618 @@ -1340,19 +1374,17 @@ Kunshan,2092496,CN,Asia/Shanghai,31.37762,120.95431 Kupang,442758,ID,Asia/Makassar,-10.17083,123.60694 Kurashiki,483576,JP,Asia/Tokyo,34.58333,133.76667 Kure,214592,JP,Asia/Tokyo,34.23222,132.56658 -Kurgan,309285,RU,Asia/Yekaterinburg,55.45,65.33333 +Kurgan,309285,RU,Asia/Yekaterinburg,55.44905,65.34344 Kurnool,460184,IN,Asia/Kolkata,15.82887,78.03602 -Kursk,448733,RU,Europe/Moscow,51.73758,36.18712 +Kursk,448733,RU,Europe/Moscow,51.72689,36.18457 Kurume,303579,JP,Asia/Tokyo,33.31667,130.51667 Kushinagar,274403,IN,Asia/Kolkata,26.74134,83.88689 Kwai Chung,331600,HK,Asia/Hong_Kong,22.36828,114.13877 -Kyain Seikgyi Township,246065,MM,Asia/Yangon,15.82288,98.25257 Kyengera,285400,UG,Africa/Kampala,0.29517,32.50159 -Kyiv,2797553,UA,Europe/Kyiv,50.45466,30.5238 +Kyiv,2952301,UA,Europe/Kyiv,50.45466,30.5238 Kyoto,1463723,JP,Asia/Tokyo,35.02107,135.75385 Kyzylorda,354800,KZ,Asia/Qyzylorda,44.85278,65.50917 Köln,963395,DE,Europe/Berlin,50.93333,6.95 -Kāfrul,339734,BD,Asia/Dhaka,23.78822,90.37359 Kākināda,384182,IN,Asia/Kolkata,16.96036,82.23809 Kāmārhāti,332965,IN,Asia/Kolkata,22.67111,88.37472 Kōriyama,327692,JP,Asia/Tokyo,37.4,140.38333 @@ -1373,11 +1405,11 @@ Langfang,868066,CN,Asia/Shanghai,39.52079,116.71471 Lankaran,240300,AZ,Asia/Baku,38.75428,48.85062 Lanzhou,3000000,CN,Asia/Shanghai,36.05701,103.83987 Laohekou,253112,CN,Asia/Shanghai,32.38583,111.66778 -Lapu-Lapu City,350467,PH,Asia/Manila,10.31028,123.94944 +Lapu-Lapu City,497813,PH,Asia/Manila,10.31028,123.94944 Laredo,256153,US,America/Chicago,27.50641,-99.50754 Larkana,364033,PK,Asia/Karachi,27.55898,68.21204 -Las Palmas de Gran Canaria,378517,ES,Atlantic/Canary,28.09973,-15.41343 -Las Piñas,590000,PH,Asia/Manila,14.45056,120.98278 +Las Palmas de Gran Canaria,383516,ES,Atlantic/Canary,28.10178,-15.41573 +Las Piñas,615549,PH,Asia/Manila,14.45056,120.98278 Las Tunas,203684,CU,America/Havana,20.96135,-76.95192 Las Vegas,641903,US,America/Los_Angeles,36.17497,-115.13722 Latacunga,205624,EC,America/Guayaquil,-0.93424,-78.6152 @@ -1404,7 +1436,7 @@ Libreville,846090,GA,Africa/Libreville,0.39241,9.45356 Lichinga,281341,MZ,Africa/Maputo,-13.31278,35.24056 Lijiang,211151,CN,Asia/Shanghai,26.86879,100.22072 Likasi,635768,CD,Africa/Lubumbashi,-10.98303,26.7384 -Lille,234475,FR,Europe/Paris,50.63297,3.05858 +Lille,238695,FR,Europe/Paris,50.63391,3.05512 Lilongwe,1115815,MW,Africa/Blantyre,-13.96692,33.78725 Lima,7737002,PE,America/Lima,-12.04318,-77.02824 Limeira,291869,BR,America/Sao_Paulo,-22.56472,-47.40167 @@ -1416,7 +1448,7 @@ Linxia Chengguanzhen,274466,CN,Asia/Shanghai,35.60028,103.20639 Linyi,2743843,CN,Asia/Shanghai,35.06306,118.34278 Linz,204846,AT,Europe/Vienna,48.30639,14.28611 Lipa City,212287,PH,Asia/Manila,13.9411,121.1631 -Lipetsk,509735,RU,Europe/Moscow,52.60311,39.57076 +Lipetsk,509735,RU,Europe/Moscow,52.5876,39.55151 Lisbon,517802,PT,Europe/Lisbon,38.72509,-9.1498 Lishui,451418,CN,Asia/Shanghai,28.46042,119.91029 Little Rock,202591,US,America/Chicago,34.74648,-92.28959 @@ -1426,18 +1458,21 @@ Liverpool,496770,GB,Europe/London,53.41058,-2.97794 Ljubljana,272220,SI,Europe/Ljubljana,46.05108,14.50513 Loa Janan,212816,ID,Asia/Makassar,-0.58295,117.09503 Lobito,357950,AO,Africa/Luanda,-12.3644,13.53601 -Logan City,326615,AU,Australia/Brisbane,-27.63917,153.10944 +Logan City,345098,AU,Australia/Brisbane,-27.63917,153.10944 Loja,274112,EC,America/Guayaquil,-3.99313,-79.20422 Lomé,2188376,TG,Africa/Lome,6.12874,1.22154 London,422324,CA,America/Toronto,42.98339,-81.23304 London,8961989,GB,Europe/London,51.50853,-0.12574 Londrina,588125,BR,America/Sao_Paulo,-23.31028,-51.16278 Long Beach,474140,US,America/Los_Angeles,33.76696,-118.18923 +Long Bien,347829,VN,Asia/Bangkok,21.03333,105.9 Long Xuyên,286140,VN,Asia/Ho_Chi_Minh,10.38639,105.43518 +Longgang,215273,CN,Asia/Shanghai,22.72289,114.26326 Longling County,270000,CN,Asia/Shanghai,24.58663,98.68934 Longshan,465249,CN,Asia/Shanghai,42.88545,125.1367 Longueuil,229330,CA,America/Toronto,45.5152,-73.46818 Longyan,1025087,CN,Asia/Shanghai,25.07485,117.01775 +Loni,516082,IN,Asia/Kolkata,28.75143,77.29023 Los Angeles,3820914,US,America/Los_Angeles,34.05223,-118.24368 Los Mochis,256613,MX,America/Mazatlan,25.79097,-108.99825 Los Teques,252242,VE,America/Caracas,10.34954,-67.04266 @@ -1448,7 +1483,7 @@ Luancheng,597130,CN,Asia/Shanghai,37.88452,114.64629 Luanda,2776168,AO,Africa/Luanda,-8.83682,13.23432 Lubango,600751,AO,Africa/Luanda,-14.91717,13.4925 Lubbock,249042,US,America/Chicago,33.57786,-101.85517 -Lublin,360044,PL,Europe/Warsaw,51.25,22.56667 +Lublin,336339,PL,Europe/Warsaw,51.25058,22.57009 Lubuklinggau,234166,ID,Asia/Jakarta,-3.2945,102.8614 Lubumbashi,2221925,CD,Africa/Lubumbashi,-11.66089,27.47938 Lucena,228758,PH,Asia/Manila,13.93139,121.61722 @@ -1467,7 +1502,7 @@ Luxor,422407,EG,Africa/Cairo,25.69893,32.6421 Luzhou,998900,CN,Asia/Shanghai,28.8903,105.42575 Luziânia,209129,BR,America/Sao_Paulo,-16.2525,-47.95028 Lviv,717273,UA,Europe/Kyiv,49.83826,24.02324 -Lyon,522969,FR,Europe/Paris,45.74846,4.84671 +Lyon,520774,FR,Europe/Paris,45.74906,4.84789 Lübeck,212207,DE,Europe/Berlin,53.86893,10.68729 Lüliang,3346500,CN,Asia/Shanghai,37.5192,111.14436 Lạng Sơn,200108,VN,Asia/Bangkok,21.85264,106.76101 @@ -1486,19 +1521,21 @@ Madurai,1465625,IN,Asia/Kolkata,9.919,78.11953 Madīnat an Naşr,668413,EG,Africa/Cairo,30.06667,31.3 Maebashi,332149,JP,Asia/Tokyo,36.4,139.08333 Magdalena Contreras,238431,MX,America/Mexico_City,19.33212,-99.21118 -Magdeburg,235775,DE,Europe/Berlin,52.12773,11.62916 +Magdeburg,235775,DE,Europe/Berlin,52.13129,11.63189 Magnitogorsk,413351,RU,Asia/Yekaterinburg,53.39808,59.0066 Magugpo Poblacion,233254,PH,Asia/Manila,7.4475,125.8046 Magé,244092,BR,America/Sao_Paulo,-22.65278,-43.04056 Mahajanga,260556,MG,Indian/Antananarivo,-15.71667,46.31667 Maheshtala,448317,IN,Asia/Kolkata,22.50862,88.25322 Mahilyow,353110,BY,Europe/Minsk,53.90876,30.34044 +Maianga,319000,AO,Africa/Luanda,-8.82904,13.23097 Maiduguri,1110000,NG,Africa/Lagos,11.84692,13.15712 -Mainz,217123,DE,Europe/Berlin,49.98419,8.2791 +Mainz,217123,DE,Europe/Berlin,49.98185,8.28008 +Maipú,503635,CL,America/Santiago,-33.51421,-70.7651 Makassar,1423877,ID,Asia/Makassar,-5.14861,119.43194 Makati City,510383,PH,Asia/Manila,14.55027,121.03269 -Makhachkala,596356,RU,Europe/Moscow,42.97638,47.50236 -Makiivka,338968,UA,Europe/Kyiv,48.04782,37.92576 +Makhachkala,596356,RU,Europe/Moscow,42.97782,47.50027 +Makiyivka,338968,UA,Europe/Kyiv,48.04782,37.92576 Makkah,1578722,SA,Asia/Riyadh,21.42664,39.82563 Makurdi,390000,NG,Africa/Lagos,7.73375,8.52139 Malabon,365525,PH,Asia/Manila,14.67333,120.93972 @@ -1511,7 +1548,7 @@ Malingao,1121974,PH,Asia/Manila,7.16083,124.475 Malir Cantonment,300000,PK,Asia/Karachi,24.94343,67.20591 Mallawī,212628,EG,Africa/Cairo,27.73264,30.84129 Malmö,362133,SE,Europe/Stockholm,55.60587,13.00073 -Malolos,261189,PH,Asia/Manila,14.8443,120.81039 +Malolos,269809,PH,Asia/Manila,14.8443,120.81039 Maltepe,427040,TR,Europe/Istanbul,40.93567,29.15507 Man,241969,CI,Africa/Abidjan,7.41251,-7.55383 Man'gyŏngdae-ri,321690,KP,Asia/Pyongyang,38.99182,125.65871 @@ -1521,7 +1558,7 @@ Manaus,2219580,BR,America/Manaus,-3.10194,-60.025 Manchester,568996,GB,Europe/London,53.48095,-2.23743 Mandalay,1208099,MM,Asia/Yangon,21.97473,96.08359 Mandaluyong,425000,PH,Asia/Manila,14.57837,121.03522 -Mandaluyong City,425758,PH,Asia/Manila,14.5832,121.0409 +Mandaluyong City,465902,PH,Asia/Manila,14.5832,121.0409 Mandaue City,331320,PH,Asia/Manila,10.32361,123.92222 Mangaluru,499487,IN,Asia/Kolkata,12.91723,74.85603 Mango,223805,IN,Asia/Kolkata,22.8275,86.21639 @@ -1543,19 +1580,20 @@ Maracaibo,1752602,VE,America/Caracas,10.64232,-71.61089 Maracanaú,234509,BR,America/Fortaleza,-3.87667,-38.62556 Maracay,464700,VE,America/Caracas,10.24972,-67.59475 Maradi,361702,NE,Africa/Niamey,13.5,7.10174 +Marawi City,259993,PH,Asia/Manila,8.0034,124.28395 Marcory,214061,CI,Africa/Abidjan,5.31198,-3.99363 Mardan,300424,PK,Asia/Karachi,34.19794,72.04965 Marg‘ilon,253500,UZ,Asia/Tashkent,40.47237,71.72463 Maricá,211986,BR,America/Sao_Paulo,-22.91944,-42.81861 Marienthal,287101,DE,Europe/Berlin,53.56667,10.08333 -Marikina City,450741,PH,Asia/Manila,14.6481,121.1133 +Marikina City,471323,PH,Asia/Manila,14.6481,121.1133 Maringá,311724,BR,America/Sao_Paulo,-23.42528,-51.93861 Marka,230100,SO,Africa/Mogadishu,1.71594,44.77166 Markham,338503,CA,America/Toronto,43.86682,-79.2663 Marne La Vallée,318325,FR,Europe/Paris,48.83584,2.64241 Maroua,314122,CM,Africa/Douala,10.59095,14.31593 Marrakesh,995871,MA,Africa/Casablanca,31.63416,-7.99994 -Marseille,870731,FR,Europe/Paris,43.29695,5.38107 +Marseille,877215,FR,Europe/Paris,43.29695,5.38107 Maryvale,208189,US,America/Phoenix,33.50199,-112.17765 Marília,240590,BR,America/Sao_Paulo,-22.21389,-49.94583 Marāgheh,262604,IR,Asia/Tehran,37.39206,46.23909 @@ -1604,9 +1642,10 @@ Mesa,471825,US,America/Phoenix,33.42227,-111.82264 Messina,219948,IT,Europe/Rome,38.19394,15.55256 Mexicali,1032686,MX,America/Tijuana,32.62781,-115.45446 Mexico City,12294193,MX,America/Mexico_City,19.42847,-99.12766 +Meycauayan,228023,PH,Asia/Manila,14.73694,120.96083 Miami,487014,US,America/New_York,25.77427,-80.19366 Mianyang,1550000,CN,Asia/Shanghai,31.46784,104.68168 -"Mianzhu, Deyang, Sichuan",510000,CN,Asia/Shanghai,31.33786,104.22057 +Mianzhu,510000,CN,Asia/Shanghai,31.33786,104.22057 Miguel Hidalgo,372889,MX,America/Mexico_City,19.43411,-99.20024 Milan,1371498,IT,Europe/Rome,45.46427,9.18951 Milton Keynes,256385,GB,Europe/London,52.04172,-0.75583 @@ -1631,8 +1670,8 @@ Miyazaki,401339,JP,Asia/Tokyo,31.91667,131.41667 Modesto,211266,US,America/Los_Angeles,37.6391,-120.99688 Mogadishu,2587183,SO,Africa/Mogadishu,2.03711,45.34375 Mogi das Cruzes,325746,BR,America/Sao_Paulo,-23.52278,-46.18833 +Mohammadpur,527571,BD,Asia/Dhaka,24.89843,88.52844 Mohammedia,227799,MA,Africa/Casablanca,33.68607,-7.38298 -Mohāmmadpur,527571,BD,Asia/Dhaka,24.89843,88.52844 Mokotów,217683,PL,Europe/Warsaw,52.1934,21.03487 Mokpo,268402,KR,Asia/Seoul,34.81282,126.39181 Mombasa,1208333,KE,Africa/Nairobi,-4.05466,39.66359 @@ -1651,12 +1690,14 @@ Morioka,290700,JP,Asia/Tokyo,39.7,141.15 Morogoro,471409,TZ,Africa/Dar_es_Salaam,-6.82102,37.66122 Morvi,210451,IN,Asia/Kolkata,22.81731,70.8377 Morādābād,721139,IN,Asia/Kolkata,28.83893,78.77684 -Moscow,10381222,RU,Europe/Moscow,55.75222,37.61556 +Moscow,10381222,RU,Europe/Moscow,55.75204,37.61781 Moshi,221733,TZ,Africa/Dar_es_Salaam,-3.35,37.33333 Mossamedes,255000,AO,Africa/Luanda,-15.19611,12.15222 Mossoró,264577,BR,America/Fortaleza,-5.1875,-37.34417 Mosul,1683000,IQ,Asia/Baghdad,36.335,43.11889 +Motijheel,202308,BD,Asia/Dhaka,23.72772,90.41919 Mpanda,204338,TZ,Africa/Dar_es_Salaam,-6.34379,31.06951 +Muar,314776,MY,Asia/Kuala_Lumpur,2.0442,102.5689 Mubi,225705,NG,Africa/Lagos,10.26858,13.26701 Mudanjiang,665915,CN,Asia/Shanghai,44.54804,129.62594 Mueang Nonthaburi,254375,TH,Asia/Bangkok,13.86075,100.51477 @@ -1668,8 +1709,8 @@ Mumbai,12691836,IN,Asia/Kolkata,19.07283,72.88261 Munger,213303,IN,Asia/Kolkata,25.37459,86.47455 Munich,1260391,DE,Europe/Berlin,48.13743,11.57549 Muratpaşa,450000,TR,Europe/Istanbul,36.89157,30.76498 -Murcia,460349,ES,Europe/Madrid,37.98704,-1.13004 -Murmansk,295374,RU,Europe/Moscow,68.97398,33.09747 +Murcia,471982,ES,Europe/Madrid,37.98704,-1.13004 +Murmansk,295374,RU,Europe/Moscow,68.96778,33.09922 Murwāra,221883,IN,Asia/Kolkata,23.83776,80.39405 Musaffah,243341,AE,Asia/Dubai,24.35893,54.48267 Muscat,797000,OM,Asia/Muscat,23.58413,58.40778 @@ -1692,7 +1733,7 @@ Mönchengladbach,261742,DE,Europe/Berlin,51.18539,6.44172 Münster,270184,DE,Europe/Berlin,51.96236,7.62571 Mỹ Tho,270700,VN,Asia/Ho_Chi_Minh,10.36004,106.35996 N'Djamena,1359526,TD,Africa/Ndjamena,12.10672,15.0444 -Naberezhnyye Chelny,509870,RU,Europe/Moscow,55.72545,52.41122 +Naberezhnyye Chelny,509870,RU,Europe/Moscow,55.73718,52.41961 Nacala,239808,MZ,Africa/Maputo,-14.56257,40.68538 Nada,256652,CN,Asia/Shanghai,19.52134,109.57895 Nadiād,225071,IN,Asia/Kolkata,22.69385,72.86157 @@ -1708,7 +1749,7 @@ Naihāti,253221,IN,Asia/Kolkata,22.89396,88.41521 Nairobi,4397073,KE,Africa/Nairobi,-1.28333,36.81667 Najaf,482576,IQ,Asia/Baghdad,32.02594,44.34625 Najafgarh,1365000,IN,Asia/Kolkata,28.60922,76.97982 -Najafābād,223450,IR,Asia/Tehran,32.63464,51.36525 +Najafābād,235281,IR,Asia/Tehran,32.63464,51.36525 Najrān,505652,SA,Asia/Riyadh,17.49326,44.12766 Nakano,344880,JP,Asia/Tokyo,35.70449,139.66946 Nakuru,570674,KE,Africa/Nairobi,-0.30719,36.07225 @@ -1726,11 +1767,12 @@ Nanjing,9314685,CN,Asia/Shanghai,32.06167,118.77778 Nanning,3839800,CN,Asia/Shanghai,22.81667,108.31667 Nanping,467875,CN,Asia/Shanghai,26.645,118.17361 Nansana,532800,UG,Africa/Kampala,0.36389,32.52861 -Nantes,318808,FR,Europe/Paris,47.21725,-1.55336 +Nantes,325070,FR,Europe/Paris,47.21725,-1.55336 Nantong,2273326,CN,Asia/Shanghai,32.03028,120.87472 -Nanyang,1811812,CN,Asia/Shanghai,32.99472,112.53278 +Nanyang,1811812,CN,Asia/Shanghai,33.00524,112.54659 Naples,909048,IT,Europe/Rome,40.85216,14.26811 Nara-shi,367353,JP,Asia/Tokyo,34.68505,135.80485 +Narayanganj,223622,BD,Asia/Dhaka,23.61352,90.50298 Narela,800000,IN,Asia/Kolkata,28.85267,77.09288 Narsingdi,281080,BD,Asia/Dhaka,23.92298,90.71768 Nashik,1486053,IN,Asia/Kolkata,19.99727,73.79096 @@ -1773,6 +1815,7 @@ Neyshābūr,220929,IR,Asia/Tehran,36.21329,58.79575 Ngaoundéré,238196,CM,Africa/Douala,7.32765,13.58472 Nghi Sơn,302210,VN,Asia/Bangkok,19.32746,105.82145 Nha Trang,579000,VN,Asia/Ho_Chi_Minh,12.24507,109.19432 +NIA Valencia,223620,PH,Asia/Manila,7.90639,125.09417 Niamey,1323691,NE,Africa/Niamey,13.51366,2.1098 Nianbo,260184,CN,Asia/Shanghai,36.48,102.41639 Nice,342669,FR,Europe/Paris,43.70313,7.26608 @@ -1785,13 +1828,13 @@ Ninh Hòa,230566,VN,Asia/Ho_Chi_Minh,12.49187,109.12495 Nishi-Tokyo-shi,207388,JP,Asia/Tokyo,35.72526,139.5383 Nishinomiya,485587,JP,Asia/Tokyo,34.71562,135.33199 Niterói,456456,BR,America/Sao_Paulo,-22.88333,-43.10361 -Nizhnekamsk,234297,RU,Europe/Moscow,55.63657,51.82447 +Nizhnekamsk,234297,RU,Europe/Moscow,55.63794,51.81502 Nizhnevartovsk,244937,RU,Asia/Yekaterinburg,60.9344,76.5531 Nizhniy Novgorod,1259013,RU,Europe/Moscow,56.32867,44.00205 Nizhny Tagil,381116,RU,Asia/Yekaterinburg,57.91944,59.965 Nizāmābād,311152,IN,Asia/Kolkata,18.67154,78.0988 Niš,250000,RS,Europe/Belgrade,43.32472,21.90333 -Nogales,212533,MX,America/Hermosillo,31.30862,-110.94217 +Nogales,264782,MX,America/Hermosillo,31.30862,-110.94217 Noida,293908,IN,Asia/Kolkata,28.58,77.33 Norfolk,238005,US,America/New_York,36.84681,-76.28522 North Las Vegas,234807,US,America/Los_Angeles,36.19886,-115.1175 @@ -1804,26 +1847,26 @@ Novi Sad,215400,RS,Europe/Belgrade,45.25167,19.83694 Novo Hamburgo,253841,BR,America/Sao_Paulo,-29.67833,-51.13056 Novokuznetsk,539616,RU,Asia/Novokuznetsk,53.75752,87.13599 Novorossiysk,241856,RU,Europe/Moscow,44.73188,37.76176 -Novosibirsk,1612833,RU,Asia/Novosibirsk,55.03442,82.94339 +Novosibirsk,1612833,RU,Asia/Novosibirsk,55.02259,82.93175 Nowrangapur,1220946,IN,Asia/Kolkata,19.23114,82.54826 -Nuevo Laredo,373725,MX,America/Matamoros,27.47629,-99.51639 +Nuevo Laredo,416055,MX,America/Matamoros,27.47629,-99.51639 Nukus,332500,UZ,Asia/Samarkand,42.45861,59.60576 Nyala,565734,SD,Africa/Khartoum,12.04888,24.88069 -Nyingchi,238900,CN,Asia/Shanghai,29.65812,94.35892 +Nyingchi,200000,CN,Asia/Shanghai,29.64885,94.35509 Nzérékoré,226426,GN,Africa/Conakry,7.75624,-8.8179 Nürnberg,515543,DE,Europe/Berlin,49.45421,11.07752 Nāgarpur,238422,BD,Asia/Dhaka,24.05783,89.87696 Nāgercoil,224849,IN,Asia/Kolkata,8.17899,77.43227 Nāngloi Jāt,205596,IN,Asia/Kolkata,28.67957,77.06799 -Nārāyanganj,223622,BD,Asia/Dhaka,23.61352,90.50298 Oakland,419267,US,America/Los_Angeles,37.80437,-122.2708 Oakville,213759,CA,America/Toronto,43.45011,-79.68292 Oaxaca,255029,MX,America/Mexico_City,17.06025,-96.72544 Obalende,342000,NG,Africa/Lagos,6.44694,3.41528 Oberhausen,219176,DE,Europe/Berlin,51.47805,6.8625 +Obolon,317300,UA,Europe/Kyiv,50.5132,30.5055 Odesa,1015826,UA,Europe/Kyiv,46.48572,30.74383 Ogbomoso,433030,NG,Africa/Lagos,8.13373,4.24014 -Ojo de Agua,242272,MX,America/Mexico_City,19.68028,-99.01 +Ojo de Agua,386290,MX,America/Mexico_City,19.68028,-99.01 Okara,533693,PK,Asia/Karachi,30.81029,73.45155 Okayama,724691,JP,Asia/Tokyo,34.65,133.93333 Okazaki,384654,JP,Asia/Tokyo,34.95,137.16667 @@ -1843,11 +1886,12 @@ Oral,330000,KZ,Asia/Oral,51.24601,51.42558 Oran,803329,DZ,Africa/Algiers,35.69906,-0.63588 Ordos,1940653,CN,Asia/Shanghai,39.6086,109.78157 Ordu,229214,TR,Europe/Istanbul,40.97782,37.89047 -Orenburg,564773,RU,Asia/Yekaterinburg,51.7727,55.0988 +Orenburg,564773,RU,Asia/Yekaterinburg,51.76712,55.09883 Orlando,334854,US,America/New_York,28.53834,-81.37924 +Ormoc,238545,PH,Asia/Manila,11.00639,124.6075 Orsk,246836,RU,Asia/Yekaterinburg,51.23206,58.48802 Oruro,208684,BO,America/La_Paz,-17.97153,-67.0932 -Orël,303696,RU,Europe/Moscow,52.95932,36.07805 +Orël,303696,RU,Europe/Moscow,52.96879,36.0791 Orūmīyeh,577307,IR,Asia/Tehran,37.55274,45.07605 Osaka,2753862,JP,Asia/Tokyo,34.69379,135.50107 Osan,238788,KR,Asia/Seoul,37.15222,127.07056 @@ -1860,8 +1904,8 @@ Ostrava,279791,CZ,Europe/Prague,49.83465,18.28204 Ottawa,1017449,CA,America/Toronto,45.41117,-75.69812 Ouagadougou,2415266,BF,Africa/Ouagadougou,12.36566,-1.53388 Oujda,539711,MA,Africa/Casablanca,34.68139,-1.90858 -Oulu,209648,FI,Europe/Helsinki,65.01236,25.46816 -Oviedo,220020,ES,Europe/Madrid,43.36029,-5.84476 +Oulu,216066,FI,Europe/Helsinki,65.01236,25.46816 +Oviedo,220027,ES,Europe/Madrid,43.36029,-5.84476 Owerri,545000,NG,Africa/Lagos,5.48363,7.03325 Owo,276574,NG,Africa/Lagos,7.1962,5.58681 Oxnard,207254,US,America/Los_Angeles,34.1975,-119.17705 @@ -1871,16 +1915,18 @@ Pachuca de Soto,256584,MX,America/Mexico_City,20.11697,-98.73329 Padang,909040,ID,Asia/Jakarta,-0.94924,100.35427 Padangsidempuan,236217,ID,Asia/Jakarta,1.37952,99.27146 Padova,203725,IT,Europe/Rome,45.40797,11.88586 +Pagadian,206483,PH,Asia/Manila,7.8257,123.437 Palangkaraya,293500,ID,Asia/Pontianak,-2.20833,113.91667 Palembang,1668848,ID,Asia/Jakarta,-2.91673,104.7458 Palermo,648260,IT,Europe/Rome,38.1166,13.3636 Pallabi,597574,BD,Asia/Dhaka,23.825,90.37 Pallāvaram,233984,IN,Asia/Kolkata,12.96796,80.15025 -Palma,409661,ES,Europe/Madrid,39.56939,2.65024 +Palma,438234,ES,Europe/Madrid,39.56939,2.65024 Palmas,306296,BR,America/Araguaina,-10.16745,-48.32766 Palmira,312519,CO,America/Bogota,3.53944,-76.30361 Palu,373218,ID,Asia/Makassar,-0.90833,119.87083 -Pamplona,209672,ES,Europe/Madrid,42.81687,-1.64323 +Pamplona,208243,ES,Europe/Madrid,42.81687,-1.64323 +Panabo,211242,PH,Asia/Manila,7.30806,125.68417 Panamá,408168,PA,America/Panama,8.9936,-79.51973 Panchkula,211355,IN,Asia/Kolkata,30.69461,76.8504 Pangkalpinang,216893,ID,Asia/Jakarta,-2.12914,106.11377 @@ -1890,18 +1936,18 @@ Panzhihua,787177,CN,Asia/Shanghai,26.58509,101.71276 Paradise,223167,US,America/Los_Angeles,36.09719,-115.14666 Parakou,255478,BJ,Africa/Porto-Novo,9.33716,2.63031 Paramaribo,223757,SR,America/Paramaribo,5.86638,-55.16682 -Paranaque City,689992,PH,Asia/Manila,14.48156,121.01749 +Paranaque City,703245,PH,Asia/Manila,14.48156,121.01749 Paraná,247139,AR,America/Argentina/Cordoba,-31.73271,-60.52897 Parauapebas,267836,BR,America/Belem,-6.0675,-49.90222 Parbhani,307170,IN,Asia/Kolkata,19.26855,76.77081 Paris,2138551,FR,Europe/Paris,48.85341,2.3488 +Paris 15 Vaugirard,229713,FR,Europe/Paris,48.8412,2.3003 Parnamirim,267036,BR,America/Fortaleza,-5.91556,-35.26278 Pasarkemis,273659,ID,Asia/Jakarta,-6.17028,106.53028 Pasay,416522,PH,Asia/Manila,14.53748,121.00144 -Pasig City,617301,PH,Asia/Manila,14.58691,121.0614 -Pasir Gudang,312437,MY,Asia/Kuala_Lumpur,1.462,103.9053 +Pasig City,853050,PH,Asia/Manila,14.58691,121.0614 +Pasir Gudang,534659,MY,Asia/Kuala_Lumpur,1.462,103.9053 Pasir Mas,230424,MY,Asia/Kuala_Lumpur,6.04934,102.13987 -Pasragad Branch,787878,IR,Asia/Tehran,34.77772,48.47168 Pasto,392930,CO,America/Bogota,1.21456,-77.27846 Pasuruan,212466,ID,Asia/Jakarta,-7.6453,112.9075 Pathein,237089,MM,Asia/Yangon,16.77919,94.73212 @@ -1917,12 +1963,13 @@ Pelotas,320674,BR,America/Sao_Paulo,-31.76997,-52.34101 Pematangsiantar,274838,ID,Asia/Jakarta,2.9595,99.0687 Pemba,232932,MZ,Africa/Maputo,-12.97395,40.51775 Pengze,350000,CN,Asia/Shanghai,29.89885,116.54572 -Penza,523553,RU,Europe/Moscow,53.20066,45.00464 +Penza,523553,RU,Europe/Moscow,53.19568,45.01075 Percut,311063,ID,Asia/Jakarta,3.6253,98.864 Pereira,467269,CO,America/Bogota,4.81428,-75.69488 Perm,982419,RU,Asia/Yekaterinburg,58.01046,56.25017 Perth,2309338,AU,Australia/Perth,-31.95224,115.8614 Peshawar,4758762,PK,Asia/Karachi,34.008,71.57849 +Pest,1001748,HU,Europe/Budapest,47.5,19.08333 Petaling Jaya,807879,MY,Asia/Kuala_Lumpur,3.10726,101.60671 Petare,364684,VE,America/Caracas,10.47679,-66.80786 Petaẖ Tiqva,253529,IL,Asia/Jerusalem,32.08707,34.88747 @@ -1930,6 +1977,7 @@ Petrolina,386791,BR,America/Recife,-9.39861,-40.50083 Petropavl,200920,KZ,Asia/Almaty,54.87343,69.15065 Petrozavodsk,279190,RU,Europe/Moscow,61.78491,34.34691 Petrópolis,272691,BR,America/Sao_Paulo,-22.505,-43.17861 +Peñalolén,241599,CL,America/Santiago,-33.46836,-70.53411 Phan Rang-Tháp Chàm,207998,VN,Asia/Ho_Chi_Minh,11.56432,108.98858 Phan Thiết,228536,VN,Asia/Ho_Chi_Minh,10.92889,108.10208 Philadelphia,1573916,US,America/New_York,39.95238,-75.16362 @@ -1937,11 +1985,12 @@ Phnom Penh,1573544,KH,Asia/Phnom_Penh,11.56245,104.91601 Phoenix,1650070,US,America/Phoenix,33.44838,-112.07404 Phu Quoc,294419,VN,Asia/Ho_Chi_Minh,10.22409,103.97156 Phú Mỹ,287055,VN,Asia/Ho_Chi_Minh,10.63333,107.06667 +Phổ Yên,231363,VN,Asia/Bangkok,21.41978,105.8899 Pietermaritzburg,839327,ZA,Africa/Johannesburg,-29.61679,30.39278 Pikine,874062,SN,Africa/Dakar,14.76457,-17.39071 Pimpri,1284606,IN,Asia/Kolkata,18.62292,73.80696 Pimpri-Chinchwad,1727692,IN,Asia/Kolkata,18.61867,73.80375 -Pingdingshan,979130,CN,Asia/Shanghai,33.73847,113.30119 +Pingdingshan,979130,CN,Asia/Shanghai,33.73091,113.31554 Pingdu,542234,CN,Asia/Shanghai,36.78444,119.94639 Pingliang,504848,CN,Asia/Shanghai,35.53917,106.68611 Pingxiang,893550,CN,Asia/Shanghai,27.61672,113.85353 @@ -1950,19 +1999,18 @@ Pittsburgh,304391,US,America/New_York,40.44062,-79.99589 Piura,484475,PE,America/Lima,-5.18192,-80.65715 Pizhou,343421,CN,Asia/Shanghai,34.31139,117.95028 Plano,283558,US,America/Chicago,33.01984,-96.69889 -Plovdiv,346893,BG,Europe/Sofia,42.15,24.75 +Plovdiv,329489,BG,Europe/Sofia,42.15387,24.75001 Plymouth,260203,GB,Europe/London,50.37153,-4.14305 Podgorica,236852,ME,Europe/Podgorica,42.44124,19.26309 Pohang,492041,KR,Asia/Seoul,36.02917,129.36481 Pointe-Noire,1032000,CG,Africa/Brazzaville,-4.77609,11.86352 -Pokhara,599504,NP,Asia/Kathmandu,28.26689,83.96851 +Pokhara,600051,NP,Asia/Kathmandu,28.26689,83.96851 Polokwane,272461,ZA,Africa/Johannesburg,-23.90449,29.46885 Poltava,283402,UA,Europe/Kyiv,49.58925,34.55367 Ponta Grossa,292177,BR,America/Sao_Paulo,-25.095,-50.16194 Pontianak,658685,ID,Asia/Pontianak,-0.03194,109.325 Popayán,318059,CO,America/Bogota,2.43823,-76.61316 Porlamar,216234,VE,America/Caracas,10.95771,-63.86971 -Port Elizabeth,1050078,ZA,Africa/Johannesburg,-33.96109,25.61494 Port Harcourt,2120000,NG,Africa/Lagos,4.77742,7.0134 Port Moresby,283733,PG,Pacific/Port_Moresby,-9.47723,147.15089 Port Said,780515,EG,Africa/Cairo,31.26531,32.3019 @@ -1970,14 +2018,14 @@ Port Sudan,489725,SD,Africa/Khartoum,19.61745,37.21644 Port-au-Prince,1234742,HT,America/Port-au-Prince,18.54349,-72.33881 Port-de-Paix,306217,HT,America/Port-au-Prince,19.93984,-72.83037 Portland,652503,US,America/Los_Angeles,45.52345,-122.67621 -Porto,249633,PT,Europe/Lisbon,41.14961,-8.61099 +Porto,252687,PT,Europe/Lisbon,41.1485,-8.61097 Porto Alegre,1488252,BR,America/Sao_Paulo,-30.03283,-51.23019 Porto Velho,548952,BR,America/Porto_Velho,-8.76194,-63.90389 Porto-Novo,264320,BJ,Africa/Porto-Novo,6.49646,2.60359 Portoviejo,321800,EC,America/Guayaquil,-1.05764,-80.45145 Portsmouth,208100,GB,Europe/London,50.79899,-1.09125 Posadas,305874,AR,America/Argentina/Cordoba,-27.39184,-55.92379 -Poznań,570352,PL,Europe/Warsaw,52.40692,16.92993 +Poznań,536151,PL,Europe/Warsaw,52.40692,16.92993 Prague,1165581,CZ,Europe/Prague,50.08804,14.42076 Praia Grande,349935,BR,America/Sao_Paulo,-24.00583,-46.40278 Prayagraj,1073438,IN,Asia/Kolkata,25.44478,81.84322 @@ -1987,7 +2035,8 @@ Pretoria,2112693,ZA,Africa/Johannesburg,-25.74486,28.18783 Pristina,550000,XK,Europe/Belgrade,42.67272,21.16688 Probolinggo,246980,ID,Asia/Jakarta,-7.7543,113.2159 Prokop'yevsk,219000,RU,Asia/Novokuznetsk,53.91518,86.71891 -Pskov,210501,RU,Europe/Moscow,57.81404,28.34493 +Pskov,210501,RU,Europe/Moscow,57.81922,28.33181 +Pu'er,296565,CN,Asia/Shanghai,22.78863,100.97481 Pucallpa,326040,PE,America/Lima,-8.37915,-74.55387 Puchong,375181,MY,Asia/Kuala_Lumpur,3,101.61667 Puducherry,657209,IN,Asia/Kolkata,11.93381,79.82979 @@ -1997,7 +2046,7 @@ Puente de Vallecas,244151,ES,Europe/Madrid,40.39354,-3.662 Puerto La Cruz,370000,VE,America/Caracas,10.21382,-64.6328 Puerto Montt,245902,CL,America/Santiago,-41.4693,-72.94237 Puerto Princesa,222673,PH,Asia/Manila,9.73917,118.73528 -Puerto Vallarta,203342,MX,America/Mexico_City,20.617,-105.23018 +Puerto Vallarta,224166,MX,America/Mexico_City,20.617,-105.23018 Pune,3124458,IN,Asia/Kolkata,18.51957,73.85535 Puning,874954,CN,Asia/Shanghai,23.31072,116.16869 Punāsa,350000,IN,Asia/Kolkata,22.23507,76.39335 @@ -2010,12 +2059,14 @@ Puyang,655674,CN,Asia/Shanghai,35.75641,115.04363 Pyeongtaek,364694,KR,Asia/Seoul,36.99472,127.08889 Pyongyang,3222000,KP,Asia/Pyongyang,39.03385,125.75432 Pétionville,283052,HT,America/Port-au-Prince,18.5125,-72.28528 +Pākdasht,236319,IR,Asia/Tehran,35.47854,51.6834 Pāli,230075,IN,Asia/Kolkata,25.77276,73.32335 Pānihāti,378705,IN,Asia/Kolkata,22.69089,88.37404 Pātan,299283,NP,Asia/Kathmandu,27.67658,85.31417 Qarchak,251834,IR,Asia/Tehran,35.42873,51.57757 Qarshi,278300,UZ,Asia/Samarkand,38.86056,65.78905 Qazvin,333635,IR,Asia/Tehran,36.26877,50.0041 +Qibao,283352,CN,Asia/Shanghai,31.15267,121.35688 Qina,252883,EG,Africa/Cairo,26.16418,32.72671 Qingdao,7172451,CN,Asia/Shanghai,36.06488,120.38042 Qingyang,2125400,CN,Asia/Shanghai,35.70976,107.64455 @@ -2033,8 +2084,9 @@ Queens,2316841,US,America/New_York,40.68149,-73.83652 Quelimane,349842,MZ,Africa/Maputo,-17.87861,36.88833 Quetta,1565546,PK,Asia/Karachi,30.18414,67.00141 Quevedo,213842,EC,America/Guayaquil,-1.02881,-79.46264 -Quezon City,2960048,PH,Asia/Manila,14.6488,121.0509 +Quezon City,3084270,PH,Asia/Manila,14.6488,121.0509 Qui Nhon,519208,VN,Asia/Ho_Chi_Minh,13.77648,109.22367 +Quilicura,210410,CL,America/Santiago,-33.36799,-70.71388 Quilmes,262379,AR,America/Argentina/Buenos_Aires,-34.72065,-58.25454 Quito,2781641,EC,America/Guayaquil,-0.22985,-78.52495 Qujing,1408500,CN,Asia/Shanghai,25.48333,103.78333 @@ -2046,6 +2098,7 @@ Quận Ba,220375,VN,Asia/Ho_Chi_Minh,10.77494,106.68628 Quận Mười,399000,VN,Asia/Ho_Chi_Minh,10.76823,106.66632 Quận Mười Một,332536,VN,Asia/Ho_Chi_Minh,10.76383,106.64355 Quận Sáu,271050,VN,Asia/Ho_Chi_Minh,10.7468,106.64903 +Qā'em Shahr,204953,IR,Asia/Tehran,36.46306,52.86007 Ra's Bayrūt,1251739,LB,Asia/Beirut,33.9,35.48333 Rabat,1655753,MA,Africa/Casablanca,34.01325,-6.83255 Radom,226794,PL,Europe/Warsaw,51.40253,21.14714 @@ -2060,18 +2113,20 @@ Ramagundam,242979,IN,Asia/Kolkata,18.755,79.474 Rancagua,212695,CL,America/Santiago,-34.1691,-70.74053 Ranchi,1120374,IN,Asia/Kolkata,23.34316,85.3094 Randburg,337053,ZA,Africa/Johannesburg,-26.0941,28.00123 +Rangel,261000,AO,Africa/Luanda,-8.82644,13.26285 Rangpur,1031388,BD,Asia/Dhaka,25.74664,89.25166 -Ras Al Khaimah City,351943,AE,Asia/Dubai,25.78953,55.9432 +Ras Al Khaimah,351943,AE,Asia/Dubai,25.78953,55.9432 Rasapūdipalem,1728128,IN,Asia/Kolkata,17.73308,83.31622 Rasht,594590,IR,Asia/Tehran,37.27611,49.58862 Ratlām,264914,IN,Asia/Kolkata,23.33033,75.04032 Raurkela Industrial Township,216410,IN,Asia/Kolkata,22.19994,84.86176 Rawalpindi,3357612,PK,Asia/Karachi,33.59733,73.0479 +Rayon KTZ,200000,UA,Europe/Kyiv,49.94349,36.36959 Reading,318014,GB,Europe/London,51.45625,-0.97113 Recife,1653461,BR,America/Recife,-8.05389,-34.88111 Regina,226404,CA,America/Regina,50.45008,-104.6178 Rengasdengklok,201463,ID,Asia/Jakarta,-6.15917,107.29806 -Rennes,220488,FR,Europe/Paris,48.11198,-1.67429 +Rennes,227830,FR,Europe/Paris,48.11109,-1.67431 Reno,264165,US,America/Los_Angeles,39.52963,-119.8138 Resistencia,290793,AR,America/Argentina/Cordoba,-27.46363,-58.98665 Rewa,235654,IN,Asia/Kolkata,24.53256,81.29234 @@ -2100,9 +2155,9 @@ Rome,2318895,IT,Europe/Rome,41.89193,12.51133 Rondonópolis,259167,BR,America/Cuiaba,-16.47083,-54.63556 Roodepoort,326416,ZA,Africa/Johannesburg,-26.1625,27.8725 Rosario,948312,AR,America/Argentina/Cordoba,-32.94682,-60.63932 -Rostov-na-Donu,1130305,RU,Europe/Moscow,47.23135,39.72328 -Rotterdam,598199,NL,Europe/Amsterdam,51.9225,4.47917 -Rouen,234475,FR,Europe/Paris,49.44313,1.09932 +Rosetta,301795,EG,Africa/Cairo,31.39951,30.41718 +Rostov-na-Donu,1130305,RU,Europe/Moscow,47.21997,39.70769 +Rotterdam,868135,NL,Europe/Amsterdam,51.9225,4.47917 Rourkela,273317,IN,Asia/Kolkata,22.22496,84.86414 Rufisque,295459,SN,Africa/Dakar,14.71542,-17.27334 Rufisque est,221066,SN,Africa/Dakar,14.7162,-17.27283 @@ -2111,7 +2166,7 @@ Rui'an,927383,CN,Asia/Shanghai,27.77605,120.65859 Ruiru,490120,KE,Africa/Nairobi,-1.14665,36.96087 Russeifa,268237,JO,Asia/Amman,32.01778,36.04639 Rustenburg,373695,ZA,Africa/Johannesburg,-25.66756,27.24208 -Ryazan',538962,RU,Europe/Moscow,54.6269,39.6916 +Ryazan',538962,RU,Europe/Moscow,54.62696,39.70415 Rybinsk,216724,RU,Europe/Moscow,58.04562,38.83811 Rāichūr,234073,IN,Asia/Kolkata,16.20546,77.35567 Rājkot,1390640,IN,Asia/Kolkata,22.29161,70.79322 @@ -2145,9 +2200,10 @@ Salvador,2711840,BR,America/Bahia,-12.97563,-38.49096 Salé,972299,MA,Africa/Casablanca,34.0531,-6.79846 Salé Al Jadida,200000,MA,Africa/Casablanca,33.99722,-6.74047 Samambaia,218840,BR,America/Sao_Paulo,-15.88231,-48.10428 -Samara,1163399,RU,Europe/Samara,53.20007,50.15 +Samara,1163399,RU,Europe/Samara,53.20767,50.13553 Samarinda,831460,ID,Asia/Makassar,-0.49167,117.14583 Samarkand,595200,UZ,Asia/Samarkand,39.65456,66.96445 +Sambizanga,244000,AO,Africa/Luanda,-8.78883,13.27506 Samsun,394050,TR,Europe/Istanbul,41.27976,36.3361 Samut Prakan,388920,TH,Asia/Bangkok,13.5976,100.5972 San Antonio,1526656,US,America/Chicago,29.42412,-98.49363 @@ -2169,9 +2225,9 @@ San Luis Potosí,722772,MX,America/Monterrey,22.15234,-100.97135 San Miguel,247126,SV,America/El_Salvador,13.48261,-88.18211 San Miguel de Tucumán,548866,AR,America/Argentina/Tucuman,-26.81601,-65.21051 San Miguelito,321501,PA,America/Panama,9.05032,-79.47068 -San Nicolás de los Garza,443273,MX,America/Monterrey,25.74167,-100.30222 -San Pablo,285348,PH,Asia/Manila,14.0683,121.3256 -San Pedro,270216,PH,Asia/Manila,14.3595,121.0473 +San Nicolás de los Garza,412199,MX,America/Monterrey,25.74167,-100.30222 +San Pablo,300166,PH,Asia/Manila,14.0683,121.3256 +San Pedro,348968,PH,Asia/Manila,14.3595,121.0473 San Pedro de Macorís,217899,DO,America/Santo_Domingo,18.4539,-69.30864 San Pedro Sula,801259,HN,America/Tegucigalpa,15.50585,-88.02588 San Salvador,525990,SV,America/El_Salvador,13.68935,-89.18718 @@ -2181,19 +2237,19 @@ Sanaa,1937451,YE,Asia/Aden,15.35452,44.20646 Sanandaj,349176,IR,Asia/Tehran,35.31495,46.99883 Sancaktepe,241000,TR,Europe/Istanbul,41.00244,29.23187 Sandakan,439050,MY,Asia/Kuching,5.8402,118.1179 +Sanhe,965075,CN,Asia/Shanghai,39.98049,117.06887 Sanmenxia,669307,CN,Asia/Shanghai,34.78081,111.19287 Sanming,602166,CN,Asia/Shanghai,26.24861,117.61861 Sant Martí,235719,ES,Europe/Madrid,41.41814,2.19933 Santa Ana,310227,US,America/Los_Angeles,33.74557,-117.86783 -Santa Catarina,268347,MX,America/Monterrey,25.67325,-100.45813 +Santa Catarina,304052,MX,America/Monterrey,25.67325,-100.45813 Santa Clara,250512,CU,America/Havana,22.40711,-79.96581 Santa Cruz de la Sierra,1831434,BO,America/La_Paz,-17.78629,-63.18117 -Santa Cruz de Tenerife,211436,ES,Atlantic/Canary,28.46824,-16.25462 +Santa Cruz de Tenerife,211359,ES,Atlantic/Canary,28.46824,-16.25462 Santa Fe,391164,AR,America/Argentina/Cordoba,-31.64881,-60.70868 Santa Luzia,219132,BR,America/Sao_Paulo,-19.76972,-43.85139 Santa Maria,283677,BR,America/Sao_Paulo,-29.68417,-53.80694 Santa Marta,499192,CO,America/Bogota,11.23855,-74.19427 -Santa María Chimalhuacán,612383,MX,America/Mexico_City,19.42155,-98.95038 Santa Rosa,216650,PH,Asia/Manila,14.31222,121.11139 Santa Teresa del Tuy,278890,VE,America/Caracas,10.23291,-66.66474 Santiago,4837295,CL,America/Santiago,-33.45694,-70.64827 @@ -2214,8 +2270,8 @@ Sapele,305000,NG,Africa/Lagos,5.89405,5.67666 Sapopemba,266715,BR,America/Sao_Paulo,-23.59556,-46.52472 Sapporo,1973832,JP,Asia/Tokyo,43.06667,141.35 Sarajevo,696731,BA,Europe/Sarajevo,43.84864,18.35644 -Saransk,318841,RU,Europe/Moscow,54.1838,45.1749 -Saratov,844858,RU,Europe/Saratov,51.54056,46.00861 +Saransk,318841,RU,Europe/Moscow,54.18485,45.17166 +Saratov,844858,RU,Europe/Saratov,51.54048,45.9901 Sargodha,975886,PK,Asia/Karachi,32.08586,72.67418 Sari,255396,IR,Asia/Tehran,36.56332,53.06009 Sariwŏn-si,310100,KP,Asia/Pyongyang,38.50722,125.75583 @@ -2235,7 +2291,7 @@ Sector 5,271575,RO,Europe/Bucharest,44.38808,26.07144 Sector 6,367760,RO,Europe/Bucharest,44.43579,26.01649 Secunderabad,204182,IN,Asia/Kolkata,17.50427,78.54263 Seeb,470878,OM,Asia/Muscat,23.67027,58.18911 -Sejong,351007,KR,Asia/Seoul,36.59245,127.29223 +Sejong,394630,KR,Asia/Seoul,36.59245,127.29223 Sekondi,285506,GH,Africa/Accra,4.93422,-1.71454 Selayang Baru Utara,542409,MY,Asia/Kuala_Lumpur,3.2549,101.6668 Semarang,1653524,ID,Asia/Jakarta,-6.99306,110.42083 @@ -2254,13 +2310,14 @@ Setapak,353268,MY,Asia/Kuala_Lumpur,3.207,101.727 Sete Lagoas,227397,BR,America/Sao_Paulo,-19.46583,-44.24667 Sevastopol,547820,UA,Europe/Simferopol,44.60795,33.52134 Severnyy,200000,RU,Europe/Moscow,55.93583,37.54889 -Sevilla,687488,ES,Europe/Madrid,37.38283,-5.97317 +Sevilla,686741,ES,Europe/Madrid,37.38283,-5.97317 Sfax,280566,TN,Africa/Tunis,34.74056,10.76028 Sha Tin,495200,HK,Asia/Hong_Kong,22.38333,114.18333 Shagamu,214558,NG,Africa/Lagos,6.8485,3.64633 Shah Alam,740750,MY,Asia/Kuala_Lumpur,3.08507,101.53281 Shahkot,200000,PK,Asia/Karachi,31.5709,73.48531 Shahr-e Qods,309605,IR,Asia/Tehran,35.7214,51.109 +Shahrīār,309607,IR,Asia/Tehran,35.65884,51.05775 Shakhty,221312,RU,Europe/Moscow,47.71916,40.21603 Sham Shui Po,431090,HK,Asia/Hong_Kong,22.33023,114.15945 Shanghai,24874500,CN,Asia/Shanghai,31.22222,121.45806 @@ -2273,17 +2330,19 @@ Shanwei,491766,CN,Asia/Shanghai,22.78199,115.3475 Shaoguan,1028460,CN,Asia/Shanghai,24.8,113.58333 Shaoxing,2300000,CN,Asia/Shanghai,30.00237,120.57864 Shaoyang,753194,CN,Asia/Shanghai,27.23818,111.46214 -Sharjah,1800000,AE,Asia/Dubai,25.33737,55.41206 +Sharjah,1800000,AE,Asia/Dubai,25.3342,55.41221 Shashamane,208400,ET,Africa/Addis_Ababa,7.2,38.6 Sheffield,556500,GB,Europe/London,53.38297,-1.4659 Shekhupura,591424,PK,Asia/Karachi,31.71287,73.98556 Shenyang,7050000,CN,Asia/Shanghai,41.79222,123.43278 Shenzhen,17494398,CN,Asia/Shanghai,22.54554,114.0683 +Shevchenkivskyi,220077,UA,Europe/Kyiv,50.46408,30.46576 Shibganj,378701,BD,Asia/Dhaka,25.00146,89.32266 Shibuya,230609,JP,Asia/Tokyo,35.6589,139.70665 Shibīn al Kawm,267945,EG,Africa/Cairo,30.55258,31.00904 Shihezi,572772,CN,Asia/Urumqi,44.3023,86.03694 Shijiazhuang,3938513,CN,Asia/Shanghai,38.04139,114.47861 +Shijie,246960,CN,Asia/Shanghai,23.09546,113.79195 Shikarpur,204938,PK,Asia/Karachi,27.95558,68.63823 Shimonoseki,265684,JP,Asia/Tokyo,33.95548,130.93713 Shinagawa,422488,JP,Asia/Tokyo,33.63627,133.00572 @@ -2307,7 +2366,6 @@ Sialkot,911817,PK,Asia/Karachi,32.49268,74.53134 Sidi Bel Abbes,210146,DZ,Africa/Algiers,35.18994,-0.63085 Sikasso,349324,ML,Africa/Bamako,11.31755,-5.66654 Siliguri,515574,IN,Asia/Kolkata,26.71004,88.42851 -Simao,296565,CN,Asia/Shanghai,22.78863,100.97481 Simferopol,336460,UA,Europe/Simferopol,44.95719,34.11079 Sincelejo,277773,CO,America/Bogota,9.3045,-75.3905 Sinfra,245226,CI,Africa/Abidjan,6.62103,-5.91144 @@ -2325,8 +2383,8 @@ Sivakasi,234704,IN,Asia/Kolkata,9.44999,77.79797 Sivas,264022,TR,Europe/Istanbul,39.74833,37.01611 Skardu,260000,PK,Asia/Karachi,35.29787,75.63372 Skopje,474889,MK,Europe/Skopje,41.99646,21.43141 -Smolensk,330025,RU,Europe/Moscow,54.77944,32.04371 -Soacha,313945,CO,America/Bogota,4.57937,-74.21682 +Smolensk,330025,RU,Europe/Moscow,54.77826,32.05088 +Soacha,655025,CO,America/Bogota,4.57937,-74.21682 Sobral,203023,BR,America/Fortaleza,-3.68611,-40.34972 Sochi,327608,RU,Europe/Moscow,43.59699,39.72477 Sodo,204100,ET,Africa/Addis_Ababa,6.86,37.76159 @@ -2335,6 +2393,7 @@ Sohag,266944,EG,Africa/Cairo,26.55695,31.69478 Sokoto,1040000,NG,Africa/Lagos,13.06269,5.24322 Soledad,342556,CO,America/Bogota,10.91843,-74.76459 Soledad de Graciano Sánchez,332072,MX,America/Mexico_City,22.18912,-100.93792 +Solomyansk,280400,UA,Europe/Kyiv,50.42838,30.45211 Solwezi,301370,ZM,Africa/Lusaka,-12.1688,26.38938 Somerset West,225289,ZA,Africa/Johannesburg,-34.08401,18.82113 Songea,286285,TZ,Africa/Dar_es_Salaam,-10.68333,35.65 @@ -2357,10 +2416,9 @@ Sri Ganganagar,237780,IN,Asia/Kolkata,29.92009,73.87496 Srinagar,1206419,IN,Asia/Kolkata,34.08565,74.80555 St. Louis,279695,US,America/Chicago,38.62727,-90.19789 St. Petersburg,257083,US,America/New_York,27.77086,-82.67927 -Stara Darnytsya,339299,UA,Europe/Kyiv,50.43333,30.63333 Staryy Oskol,226977,RU,Europe/Moscow,51.3025,37.84613 Staten Island,468730,US,America/New_York,40.56233,-74.13986 -Stavropol',433931,RU,Europe/Moscow,45.0428,41.9734 +Stavropol',433931,RU,Europe/Moscow,45.03442,41.9642 Sterlitamak,267231,RU,Asia/Yekaterinburg,53.63793,55.9533 Stockholm,1515017,SE,Europe/Stockholm,59.32938,18.06871 Stockton,305658,US,America/Los_Angeles,37.9577,-121.29078 @@ -2378,6 +2436,7 @@ Suita,385567,JP,Asia/Tokyo,34.76143,135.51567 Suizhou,618582,CN,Asia/Shanghai,31.71111,113.36306 Sukabumi,360644,ID,Asia/Jakarta,-6.91806,106.92667 Sukkur,563851,PK,Asia/Karachi,27.70323,68.85889 +Sulaymaniyah,878146,IQ,Asia/Baghdad,35.56496,45.4329 Sultanbeyli,286622,TR,Europe/Istanbul,40.96072,29.27067 Sultangazi,436935,TR,Europe/Istanbul,41.10652,28.86847 Sulţānah,946697,SA,Asia/Riyadh,24.49258,39.58572 @@ -2391,7 +2450,7 @@ Sumy,259660,UA,Europe/Kyiv,50.91741,34.79906 Sunch'ŏn,437000,KP,Asia/Pyongyang,39.43167,125.93278 Suncheon,276375,KR,Asia/Seoul,34.9505,127.48784 Sungai Buloh,222858,MY,Asia/Kuala_Lumpur,3.21,101.561 -Sungai Petani,228843,MY,Asia/Kuala_Lumpur,5.647,100.48772 +Sungai Petani,544851,MY,Asia/Kuala_Lumpur,5.647,100.48772 Sunshine Coast,346522,AU,Australia/Brisbane,-26.65682,153.07955 Suqian,1437685,CN,Asia/Shanghai,33.94917,118.29583 Surabaya,2874314,ID,Asia/Jakarta,-7.24917,112.75083 @@ -2399,16 +2458,17 @@ Surakarta,526870,ID,Asia/Jakarta,-7.55611,110.83167 Surat,4591246,IN,Asia/Kolkata,21.19594,72.83023 Surgut,300367,RU,Asia/Yekaterinburg,61.25757,73.41775 Surrey,568322,CA,America/Vancouver,49.10635,-122.82509 -Suwon,1195045,KR,Asia/Seoul,37.29111,127.00889 +Suwon,1191063,KR,Asia/Seoul,37.29111,127.00889 Suzano,307429,BR,America/Sao_Paulo,-23.5425,-46.31083 Suzhou,1647642,CN,Asia/Shanghai,33.63611,116.97889 Suzhou,6715559,CN,Asia/Shanghai,31.30408,120.59538 +Svyatoshyn,340399,UA,Europe/Kyiv,50.46341,30.34612 Swansea,300352,GB,Europe/London,51.62079,-3.94323 Swindon,201669,GB,Europe/London,51.55797,-1.78116 Sydney,5557233,AU,Australia/Sydney,-33.86785,151.20732 -Syktyvkar,245083,RU,Europe/Moscow,61.68523,50.80819 +Syktyvkar,245083,RU,Europe/Moscow,61.66393,50.8163 Sylhet,237000,BD,Asia/Dhaka,24.89904,91.87198 -Szczecin,407811,PL,Europe/Warsaw,53.42894,14.55302 +Szczecin,395513,PL,Europe/Warsaw,53.42894,14.55302 São Bernardo do Campo,743372,BR,America/Sao_Paulo,-23.69389,-46.565 São Carlos,205035,BR,America/Sao_Paulo,-22.0175,-47.89083 São José,200000,BR,America/Sao_Paulo,-28.21344,-49.16383 @@ -2434,11 +2494,11 @@ Tabora,308741,TZ,Africa/Dar_es_Salaam,-5.01622,32.82663 Taboão da Serra,273542,BR,America/Sao_Paulo,-23.62611,-46.79167 Tabriz,1424641,IR,Asia/Tehran,38.08,46.2919 Tabuk,667000,SA,Asia/Riyadh,28.3998,36.57151 -Tacloban,251881,PH,Asia/Manila,11.24333,125.00472 +Tacloban,259353,PH,Asia/Manila,11.24333,125.00472 Tacna,286240,PE,America/Lima,-18.01465,-70.25362 Tacoma,222906,US,America/Los_Angeles,47.25288,-122.44429 Taganrog,279056,RU,Europe/Moscow,47.23627,38.9053 -Taguig,644473,PH,Asia/Manila,14.5243,121.0792 +Taguig,1308085,PH,Asia/Manila,14.5243,121.0792 Tai Po,274100,HK,Asia/Hong_Kong,22.45007,114.16877 Tai'an,1735425,CN,Asia/Shanghai,36.18528,117.12 Taicang,831113,CN,Asia/Shanghai,31.44778,121.09389 @@ -2457,14 +2517,14 @@ Takasaki,372973,JP,Asia/Tokyo,36.33333,139.01667 Takatsuki,354468,JP,Asia/Tokyo,34.84833,135.61678 Takeo,843931,KH,Asia/Phnom_Penh,10.99081,104.78498 Takoradi,389114,GH,Africa/Accra,4.89816,-1.76029 -Talcahuano,252968,CL,America/Santiago,-36.72494,-73.11684 +Talatona,500000,AO,Africa/Luanda,-8.91783,13.18562 Tallahassee,201731,US,America/New_York,30.43826,-84.28073 Tallinn,394024,EE,Europe/Tallinn,59.43696,24.75353 Tamale,464316,GH,Africa/Accra,9.40079,-0.8393 Taman Petaling,423062,MY,Asia/Kuala_Lumpur,3.19916,101.64983 -Tambov,293661,RU,Europe/Moscow,52.73169,41.44326 +Tambov,293661,RU,Europe/Moscow,52.73632,41.44102 Tampa,414547,US,America/New_York,27.94752,-82.45843 -Tampere,244315,FI,Europe/Helsinki,61.49911,23.78712 +Tampere,260646,FI,Europe/Helsinki,61.49911,23.78712 Tampico,309003,MX,America/Monterrey,22.28519,-97.87777 Tampines Estate,265340,SG,Asia/Singapore,1.35806,103.94028 Tampines New Town,259900,SG,Asia/Singapore,1.34917,103.94972 @@ -2472,17 +2532,19 @@ Tando Allahyar,421923,PK,Asia/Karachi,25.4605,68.71745 Tanga,393429,TZ,Africa/Dar_es_Salaam,-5.06893,39.09875 Tangerang,1912679,ID,Asia/Jakarta,-6.17806,106.63 Tanggu,535298,CN,Asia/Shanghai,39.02111,117.64694 +Tanghe,278055,CN,Asia/Shanghai,32.68545,112.83234 Tangier,1035141,MA,Africa/Casablanca,35.76727,-5.79975 Tangshan,3372102,CN,Asia/Shanghai,39.64381,118.18319 Tanjung Pinang,227663,ID,Asia/Jakarta,0.91667,104.45833 Tanta,576648,EG,Africa/Cairo,30.78847,31.00192 Tantou,320304,CN,Asia/Shanghai,22.75121,113.83496 +Tanzhou,382445,CN,Asia/Shanghai,22.25503,113.46692 Taoyuan,475798,TW,Asia/Taipei,24.9896,121.3187 Taoyuan City,402014,TW,Asia/Taipei,24.99368,121.29696 Tapachula,353706,MX,America/Merida,14.90541,-92.25891 Tarakan,249960,ID,Asia/Makassar,3.31332,117.59152 Taraz,358153,KZ,Asia/Almaty,42.89799,71.37334 -Tarlac City,385398,PH,Asia/Manila,15.48017,120.59794 +Tarlac City,401892,PH,Asia/Manila,15.48017,120.59794 Tarsus,350732,TR,Europe/Istanbul,36.91766,34.89277 Tashkent,1978028,UZ,Asia/Tashkent,41.26465,69.21627 Tasikmalaya,741760,ID,Asia/Jakarta,-7.3274,108.2207 @@ -2495,6 +2557,7 @@ Tegucigalpa,850848,HN,America/Tegucigalpa,14.0818,-87.20681 Tehran,7153309,IR,Asia/Tehran,35.69439,51.42151 Tehuacán,248716,MX,America/Mexico_City,18.46422,-97.39735 Tel Aviv,432892,IL,Asia/Jerusalem,32.08088,34.78057 +Teluk Intan,232800,MY,Asia/Kuala_Lumpur,4.02219,101.02083 Temara,342345,MA,Africa/Casablanca,33.92866,-6.90656 Temuco,238129,CL,America/Santiago,-38.73628,-72.59738 Teni,1034724,IN,Asia/Kolkata,10.01115,77.47772 @@ -2505,11 +2568,13 @@ Ternopil,225238,UA,Europe/Kyiv,49.55404,25.59067 Terrassa,218535,ES,Europe/Madrid,41.56667,2.01667 Tete,357000,MZ,Africa/Maputo,-16.15639,33.58667 Thanh Hóa,850000,VN,Asia/Bangkok,19.8,105.76667 +Thanh Khê,201240,VN,Asia/Ho_Chi_Minh,16.0706,108.19102 +Thanh Xuân,293292,VN,Asia/Bangkok,20.99472,105.79977 Thanjavur,291067,IN,Asia/Kolkata,10.78523,79.13909 The Bronx,1385108,US,America/New_York,40.84985,-73.86641 The Hague,474292,NL,Europe/Amsterdam,52.07667,4.29861 Thembisa,511655,ZA,Africa/Johannesburg,-25.99636,28.2268 -Thessaloníki,317778,GR,Europe/Athens,40.64361,22.93086 +Thessaloníki,317778,GR,Europe/Athens,40.64072,22.93493 Thika,251407,KE,Africa/Nairobi,-1.03326,37.06933 Thiruvananthapuram,788271,IN,Asia/Kolkata,8.4855,76.94924 Thiès,317763,SN,Africa/Dakar,14.78944,-16.92602 @@ -2521,12 +2586,14 @@ Thuận An,588616,VN,Asia/Ho_Chi_Minh,10.9239,106.71428 Thành Phố Bà Rịa,235192,VN,Asia/Ho_Chi_Minh,10.49626,107.1685 Thái Nguyên,420000,VN,Asia/Bangkok,21.59422,105.84817 Thāne,1841488,IN,Asia/Kolkata,19.19704,72.96355 +Thị Trấn Đông Triều,248896,VN,Asia/Bangkok,21.08242,106.5138 Thủ Dầu Một,373105,VN,Asia/Ho_Chi_Minh,10.9804,106.6519 Thủ Đức,524670,VN,Asia/Ho_Chi_Minh,10.84863,106.77209 Tianjin,11090314,CN,Asia/Shanghai,39.14222,117.17667 Tianshui,1212791,CN,Asia/Shanghai,34.57952,105.74238 Tieling,333907,CN,Asia/Shanghai,42.29306,123.84139 Tijuana,1922523,MX,America/Tijuana,32.5027,-117.00371 +Tilburg,221947,NL,Europe/Amsterdam,51.55551,5.0913 Timişoara,250849,RO,Europe/Bucharest,45.75372,21.22571 Tin Shui Wai,282400,HK,Asia/Hong_Kong,22.45679,114.00234 Tirana,418495,AL,Europe/Tirane,41.32744,19.81866 @@ -2543,11 +2610,11 @@ Toamasina,345107,MG,Indian/Antananarivo,-18.1492,49.40234 Tokorozawa,344194,JP,Asia/Tokyo,35.79916,139.46903 Tokushima,267345,JP,Asia/Tokyo,34.06667,134.56667 Tokyo,9733276,JP,Asia/Tokyo,35.6895,139.69171 -Toledo,207314,PH,Asia/Manila,10.3773,123.6386 +Toledo,206692,PH,Asia/Manila,10.3773,123.6386 Toledo,265638,US,America/New_York,41.66394,-83.55521 Toluca,489333,MX,America/Mexico_City,19.28786,-99.65324 Tolyatti,702879,RU,Europe/Samara,53.5303,49.3461 -Tomsk,574002,RU,Asia/Tomsk,56.50032,84.98204 +Tomsk,574002,RU,Asia/Tomsk,56.50049,84.98216 Tonalá,408759,MX,America/Mexico_City,20.62263,-103.24168 Tongchuan,417740,CN,Asia/Shanghai,34.8988,108.95056 Tongchuanshi,223603,CN,Asia/Shanghai,35.07474,109.08495 @@ -2558,8 +2625,9 @@ Tongshan,329661,CN,Asia/Shanghai,34.18045,117.15707 Toronto,2794356,CA,America/Toronto,43.70643,-79.39864 Torreón,735340,MX,America/Monterrey,25.54389,-103.41898 Toshima,301599,JP,Asia/Tokyo,35.76126,139.74491 -Touba,1120824,SN,Africa/Dakar,14.85,-15.88333 -Toulouse,493465,FR,Europe/Paris,43.60426,1.44367 +Touba,1120824,SN,Africa/Dakar,14.86229,-15.87532 +Toulouse,511684,FR,Europe/Paris,43.60426,1.44367 +Townsville,201313,AU,Australia/Brisbane,-19.26639,146.80569 Toyama,415844,JP,Asia/Tokyo,36.7,137.21667 Toyohashi,377453,JP,Asia/Tokyo,34.76667,137.38333 Toyonaka,401558,JP,Asia/Tokyo,34.78244,135.46932 @@ -2569,7 +2637,7 @@ Tri-Cities,244036,US,America/Los_Angeles,46.2454,-119.19617 Trieste,204338,IT,Europe/Rome,45.64953,13.77678 Tripoli,229398,LB,Asia/Beirut,34.43352,35.84415 Tripoli,1302947,LY,Africa/Tripoli,32.88743,13.18733 -Trondheim,212660,NO,Europe/Oslo,63.43049,10.39506 +Trondheim,216518,NO,Europe/Oslo,63.43049,10.39506 Trujillo,919899,PE,America/Lima,-8.11599,-79.02998 Tseung Kwan O,412900,HK,Asia/Hong_Kong,22.32789,114.24992 Tshikapa,634529,CD,Africa/Lubumbashi,-6.41621,20.79995 @@ -2587,6 +2655,7 @@ Tungi,337579,BD,Asia/Dhaka,23.89154,90.40232 Tunis,693210,TN,Africa/Tunis,36.81897,10.16579 Turin,847287,IT,Europe/Rome,45.07049,7.68682 Turkestan,227098,KZ,Asia/Almaty,43.29458,68.25685 +Turku,206655,FI,Europe/Helsinki,60.45148,22.26869 Turmero,344700,VE,America/Caracas,10.22856,-67.47421 Turpan,273385,CN,Asia/Urumqi,42.94769,89.17886 Tuxtla,604147,MX,America/Merida,16.75357,-93.11578 @@ -2605,37 +2674,38 @@ Ugep,200276,NG,Africa/Lagos,5.80865,8.08098 Uijeongbu-si,479141,KR,Asia/Seoul,37.7415,127.0474 Ujjain,515215,IN,Asia/Kolkata,23.18239,75.77643 Ulan Bator,844818,MN,Asia/Ulaanbaatar,47.90771,106.88324 -Ulan-Ude,360278,RU,Asia/Irkutsk,51.82721,107.60627 +Ulan-Ude,360278,RU,Asia/Irkutsk,51.82648,107.59979 Ulanqab,550231,CN,Asia/Shanghai,40.993,113.133 Ulhasnagar,516584,IN,Asia/Kolkata,19.21667,73.15 -Ulsan,1098728,KR,Asia/Seoul,35.53722,129.31667 +Ulsan,1095014,KR,Asia/Seoul,35.53722,129.31667 Ulu Bedok,276990,SG,Asia/Singapore,1.33333,103.93333 Uluberiya,235345,IN,Asia/Kolkata,22.4756,88.09898 Ulyanovsk,626540,RU,Europe/Ulyanovsk,54.32824,48.38657 Umraniye,573265,TR,Europe/Istanbul,41.01643,29.12476 Umuahia,370000,NG,Africa/Lagos,5.52491,7.49461 Upper West Side,226989,US,America/New_York,40.78705,-73.97542 -Uruapan,299523,MX,America/Mexico_City,19.41116,-102.05644 +Uruapan,299523,MX,America/Mexico_City,19.41677,-102.05842 Ust-Kamenogorsk,319067,KZ,Asia/Almaty,49.97143,82.60586 -Utrecht,375161,NL,Europe/Amsterdam,52.09083,5.12222 +Utrecht,376435,NL,Europe/Amsterdam,52.09083,5.12222 Utsunomiya,518757,JP,Asia/Tokyo,36.56667,139.88333 Uvira,407092,CD,Africa/Lubumbashi,-3.39534,29.13779 Uyo,436606,NG,Africa/Lagos,5.05127,7.9335 Uíge,322531,AO,Africa/Luanda,-7.60874,15.06131 Uşak,369433,TR,Europe/Istanbul,38.67351,29.4058 Vadodara,1822221,IN,Asia/Kolkata,22.29941,73.20812 -Valencia,825948,ES,Europe/Madrid,39.47391,-0.37966 +Valencia,824340,ES,Europe/Madrid,39.47391,-0.37966 Valencia,1619470,VE,America/Caracas,10.16153,-68.00044 -Valenzuela,714978,PH,Asia/Manila,14.7,120.9667 +Valenzuela,725173,PH,Asia/Manila,14.7,120.9667 Valera,244708,VE,America/Caracas,9.31778,-70.60361 -Valladolid,300618,ES,Europe/Madrid,41.65518,-4.72372 +Valladolid,300618,ES,Europe/Madrid,41.65541,-4.72353 Valledupar,490075,CO,America/Bogota,10.46538,-73.2531 Valparaíso,282448,CL,America/Santiago,-33.036,-71.62963 Van,525016,TR,Europe/Istanbul,38.49457,43.38323 Vancouver,662248,CA,America/Vancouver,49.24966,-123.11934 Vanderbijlpark,246754,ZA,Africa/Johannesburg,-26.71171,27.83795 +Vantaa,252724,FI,Europe/Helsinki,60.29414,25.04099 Varanasi,1164404,IN,Asia/Kolkata,25.31668,83.01041 -Varna,312770,BG,Europe/Sofia,43.21667,27.91667 +Varna,318737,BG,Europe/Sofia,43.21912,27.91024 Vasyl'evsky Ostrov,203058,RU,Europe/Moscow,59.94091,30.25377 Vaughan,323103,CA,America/Toronto,43.8361,-79.49827 Velikiy Novgorod,222868,RU,Europe/Moscow,58.52131,31.27104 @@ -2649,6 +2719,7 @@ Victoria,289625,CA,America/Vancouver,48.4359,-123.35155 Victoria,956800,HK,Asia/Hong_Kong,22.2875,114.14417 Victoria de Durango,518709,MX,America/Monterrey,24.02032,-104.65756 Vienna,1691468,AT,Europe/Vienna,48.20849,16.37208 +Vientiane,840940,LA,Asia/Vientiane,17.96667,102.6 Vigo,293642,ES,Europe/Madrid,42.23282,-8.72264 Vijayapura,327427,IN,Asia/Kolkata,16.82442,75.71537 Vijayawada,1143232,IN,Asia/Kolkata,16.50745,80.6466 @@ -2666,22 +2737,23 @@ Vitebsk,358395,BY,Europe/Minsk,55.1904,30.2049 Vitória,312656,BR,America/Sao_Paulo,-20.31944,-40.33778 Vitória da Conquista,253137,BR,America/Bahia,-14.86611,-40.83944 Vizianagaram,228720,IN,Asia/Kolkata,18.11692,83.41148 -Viña del Mar,294551,CL,America/Santiago,-33.02457,-71.55183 +Viña del Mar,334248,CL,America/Santiago,-33.02457,-71.55183 Việt Trì,415280,VN,Asia/Bangkok,21.32274,105.40198 Việt Yên,205900,VN,Asia/Ho_Chi_Minh,21.26667,106.13333 -Vladikavkaz,306258,RU,Europe/Moscow,43.03667,44.66778 -Vladimir,357024,RU,Europe/Moscow,56.13655,40.39658 +Vladikavkaz,306258,RU,Europe/Moscow,43.04101,44.66986 +Vladimir,357024,RU,Europe/Moscow,56.13854,40.39976 Vladivostok,604901,RU,Asia/Vladivostok,43.10562,131.87353 -Volgograd,1013533,RU,Europe/Volgograd,48.71939,44.50183 +Volgograd,1013533,RU,Europe/Volgograd,48.71378,44.4976 Vologda,312420,RU,Europe/Moscow,59.2239,39.88398 Volta Redonda,279898,BR,America/Sao_Paulo,-22.52306,-44.10417 Volzhsky,323293,RU,Europe/Volgograd,48.78583,44.77973 -Voronezh,1047549,RU,Europe/Moscow,51.67204,39.1843 +Voronezh,1047549,RU,Europe/Moscow,51.66833,39.19204 +Vyhurivshchyna-Troyeshchyna,240000,UA,Europe/Kyiv,50.51137,30.60251 Vykhino-Zhulebino,216000,RU,Europe/Moscow,55.70196,37.81178 Várzea Grande,314627,BR,America/Cuiaba,-15.64667,-56.1325 Vũng Tàu,464860,VN,Asia/Ho_Chi_Minh,10.34599,107.08426 Wad Medani,332714,SD,Africa/Khartoum,14.40118,33.51989 -Wafangdian,250591,CN,Asia/Shanghai,39.61833,122.00806 +Wafangdian,454338,CN,Asia/Shanghai,39.61833,122.00806 Wah Cantt,400733,PK,Asia/Karachi,33.77094,72.75116 Wakayama,356729,JP,Asia/Tokyo,34.23333,135.16667 Wandsbek,411422,DE,Europe/Berlin,53.58334,10.08305 @@ -2690,6 +2762,7 @@ Wanning,545992,CN,Asia/Shanghai,18.79931,110.3841 Wanxian,859662,CN,Asia/Shanghai,30.81601,108.37407 Wanzhou,1545900,CN,Asia/Shanghai,30.76451,108.39586 Warangal,704570,IN,Asia/Kolkata,18,79.58333 +Warder,450400,ET,Africa/Addis_Ababa,6.97444,45.34083 Warri,910000,NG,Africa/Lagos,5.51737,5.75006 Warsaw,1702139,PL,Europe/Warsaw,52.22977,21.01178 Washington,689545,US,America/New_York,38.89511,-77.03637 @@ -2704,7 +2777,7 @@ Wenzhou,2650000,CN,Asia/Shanghai,27.99942,120.66682 West Jerusalem,400000,IL,Asia/Jerusalem,31.78199,35.21961 West Raleigh,338759,US,America/New_York,35.78682,-78.66389 Wichita,396119,US,America/Chicago,37.69224,-97.33754 -Wiesbaden,278609,DE,Europe/Berlin,50.08258,8.24932 +Wiesbaden,278609,DE,Europe/Berlin,50.08601,8.24435 Windhoek,386219,NA,Africa/Windhoek,-22.55941,17.08323 Windsor,229660,CA,America/Toronto,42.30008,-83.01654 Winejok,300000,SS,Africa/Juba,9.01222,27.57081 @@ -2715,7 +2788,7 @@ Wolverhampton,263700,GB,Europe/London,52.58547,-2.12296 Wong Tai Sin,425235,HK,Asia/Hong_Kong,22.35,114.18333 Woodlands,255180,SG,Asia/Singapore,1.43801,103.78877 Worcester,206518,US,America/New_York,42.26259,-71.80229 -Wrocław,634893,PL,Europe/Warsaw,51.1,17.03333 +Wrocław,672545,PL,Europe/Warsaw,51.10286,17.03006 Wuhai,218427,CN,Asia/Shanghai,39.68442,106.81583 Wuhan,10392693,CN,Asia/Shanghai,30.58333,114.26667 Wuhu,1598165,CN,Asia/Shanghai,31.35259,118.42947 @@ -2723,6 +2796,7 @@ Wuppertal,360797,DE,Europe/Berlin,51.25627,7.14816 Wuwei,1010295,CN,Asia/Shanghai,37.92672,102.63202 Wuxi,4396835,CN,Asia/Shanghai,31.56887,120.28857 Wuxue,220661,CN,Asia/Shanghai,29.85058,115.5525 +Wuzhong,7202654,CN,Asia/Shanghai,37.9867,106.201 Wuzhou,761948,CN,Asia/Shanghai,23.48054,111.28848 Wŏnju,332849,KR,Asia/Seoul,37.35139,127.94528 Wŏnsan,329207,KP,Asia/Pyongyang,39.15278,127.44361 @@ -2751,14 +2825,14 @@ Xinyuan,282718,CN,Asia/Urumqi,43.42649,83.24959 Xinzhou,544683,CN,Asia/Shanghai,38.40917,112.73333 Xiuying,290000,CN,Asia/Shanghai,20.00073,110.29359 Xizhi,204619,TW,Asia/Taipei,25.06615,121.65985 -Xochimilco,407885,MX,America/Mexico_City,19.25465,-99.10356 +Xochimilco,442178,MX,America/Mexico_City,19.25465,-99.10356 +Xuancheng,774332,CN,Asia/Shanghai,30.9525,118.75528 Xuanhua,373422,CN,Asia/Shanghai,40.61205,115.06463 -Xuanzhou,774332,CN,Asia/Shanghai,30.9525,118.75528 Xuchang,1265536,CN,Asia/Shanghai,34.03189,113.86299 Xuzhou,1253991,CN,Asia/Shanghai,34.20442,117.28386 Xuân Lộc,253140,VN,Asia/Ho_Chi_Minh,10.93333,107.23333 Ya'an,612056,CN,Asia/Shanghai,29.98521,102.999 -Yakutsk,235600,RU,Asia/Yakutsk,62.03389,129.73306 +Yakutsk,235600,RU,Asia/Yakutsk,62.03114,129.72288 Yamagata,248772,JP,Asia/Tokyo,38.23333,140.36667 Yamato,242065,JP,Asia/Tokyo,35.47276,139.45101 Yamoussoukro,275686,CI,Africa/Abidjan,6.82055,-5.27674 @@ -2780,10 +2854,10 @@ Yaoundé,1299369,CM,Africa/Douala,3.86667,11.51667 Yaroslavl,608722,RU,Europe/Moscow,57.62987,39.87368 Yazd,477905,IR,Asia/Tehran,31.89722,54.3675 Yei,260720,SS,Africa/Juba,4.09444,30.67639 -Yekaterinburg,1495066,RU,Asia/Yekaterinburg,56.8519,60.6122 +Yekaterinburg,1495066,RU,Asia/Yekaterinburg,56.85733,60.61529 Yenagoa,365000,NG,Africa/Lagos,4.92675,6.26764 Yeosu,268823,KR,Asia/Seoul,34.76062,127.66215 -Yerevan,1141100,AM,Asia/Yerevan,40.17765,44.5126 +Yerevan,1144700,AM,Asia/Yerevan,40.17765,44.5126 Yibin,836340,CN,Asia/Shanghai,28.7593,104.63994 Yichang,1350150,CN,Asia/Shanghai,30.71444,111.28472 Yichun,1045952,CN,Asia/Shanghai,27.83333,114.4 @@ -2815,7 +2889,7 @@ Yunusobod,352000,UZ,Asia/Tashkent,41.37139,69.27944 Zagazig,430445,EG,Africa/Cairo,30.58768,31.502 Zagreb,663592,HR,Europe/Zagreb,45.81444,15.97798 Zahedan,551980,IR,Asia/Tehran,29.4963,60.8629 -Zamboanga,977234,PH,Asia/Manila,6.91028,122.07389 +Zamboanga,1018849,PH,Asia/Manila,6.91028,122.07389 Zanjan,357471,IR,Asia/Tehran,36.67642,48.49628 Zanzibar,709809,TZ,Africa/Dar_es_Salaam,-6.16394,39.19793 Zaozhuang,899753,CN,Asia/Shanghai,34.86472,117.55417 @@ -2855,6 +2929,7 @@ Zitong,212819,CN,Asia/Shanghai,30.1782,105.82991 Ziyang,905729,CN,Asia/Shanghai,30.12108,104.64811 Zliten,203790,LY,Africa/Tripoli,32.46739,14.56874 Zoucheng,277400,CN,Asia/Shanghai,35.40056,116.96556 +Zumpango,280455,MX,America/Mexico_City,19.7967,-99.09946 Zunyi,2037775,CN,Asia/Shanghai,27.68667,106.90722 Zürich,415367,CH,Europe/Zurich,47.36667,8.55 Águas Lindas de Goiás,225693,BR,America/Sao_Paulo,-15.76194,-48.28167 @@ -2864,12 +2939,15 @@ Zürich,415367,CH,Europe/Zurich,47.36667,8.55 Çorlu,202578,TR,Europe/Istanbul,41.16069,27.80093 Çorum,269595,TR,Europe/Istanbul,40.54889,34.95333 Ðà Lạt,258014,VN,Asia/Ho_Chi_Minh,11.94646,108.44193 +Ñuñoa,255823,CL,America/Santiago,-33.44735,-70.58279 Ürümqi,3029372,CN,Asia/Urumqi,43.80096,87.60046 Üsküdar,524452,TR,Europe/Istanbul,41.02274,29.01366 +Āmol,237528,IR,Asia/Tehran,36.46961,52.35072 Āsansol,504271,IN,Asia/Kolkata,23.68333,86.98333 Āzādshahr,514102,IR,Asia/Tehran,34.79049,48.57011 Điện Bàn,226564,VN,Asia/Ho_Chi_Minh,15.88853,108.25447 -Łódź,768755,PL,Europe/Warsaw,51.77058,19.47395 +Đống Đa,371606,VN,Asia/Bangkok,21.013,105.825 +Łódź,645693,PL,Europe/Warsaw,51.77058,19.47395 Ōita,477715,JP,Asia/Tokyo,33.23333,131.6 Ōta,224358,JP,Asia/Tokyo,36.3,139.36667 Ōta,748081,JP,Asia/Tokyo,35.56126,139.71605 diff --git a/include/arg_definitions.h b/include/arg_definitions.h new file mode 100644 index 0000000..3450bf3 --- /dev/null +++ b/include/arg_definitions.h @@ -0,0 +1,67 @@ +/* Contains definitions for command line arguments. + * + * Each line is an invocation of a macro whose arguments define a command line argument of a particular type. + * + * The macro arguments are: + * - The source-code variable name of the argument definition. + * - The short and long versions of the argument. + * - The type of the argument (where applicable). + * - The help text for the argument. + * + * To use these definitions, define the 4 macros below so that they use the arguments, then + * include this file in the source code. + * + * This approach is based on the idea of "X macros" (https://en.wikipedia.org/wiki/X_macro) + * + */ + +#if !defined(INCLUDE_ARG_DEFINITION_DBL0) +#define INCLUDE_ARG_DEFINITION_DBL0(...) +#endif + +#if !defined(INCLUDE_ARG_DEFINITION_STR0) +#define INCLUDE_ARG_DEFINITION_STR0(...) +#endif + +#if !defined(INCLUDE_ARG_DEFINITION_LIT0) +#define INCLUDE_ARG_DEFINITION_LIT0(...) +#endif + +#if !defined(INCLUDE_ARG_DEFINITION_INT0) +#define INCLUDE_ARG_DEFINITION_INT0(...) +#endif + +INCLUDE_ARG_DEFINITION_DBL0(latitude_arg, "a", "latitude", "", "Observer latitude [-90°, 90°] (default: 0.0)"); +INCLUDE_ARG_DEFINITION_DBL0(longitude_arg, "o", "longitude", "", "Observer longitude [-180°, 180°] (default: 0.0)"); +INCLUDE_ARG_DEFINITION_DBL0(threshold_arg, "t", "threshold", "", + "Only render stars brighter than this magnitude (default: 5.0)"); +INCLUDE_ARG_DEFINITION_DBL0(label_arg, "l", "label-thresh", "", + "Label stars brighter than this magnitude (default: 0.25)"); +INCLUDE_ARG_DEFINITION_DBL0(speed_arg, "s", "speed", "", "Animation speed multiplier (default: 1.0)"); +INCLUDE_ARG_DEFINITION_DBL0(ratio_arg, "r", "aspect-ratio", "", + "Override the calculated terminal cell aspect ratio. Use this if your projection is not 'square.' " + "A value around 2.0 works well for most cases"); +INCLUDE_ARG_DEFINITION_STR0(datetime_arg, "d", "datetime", "", "Observation datetime in UTC"); +INCLUDE_ARG_DEFINITION_STR0( + city_arg, "i", "city", "", + "Use the latitude and longitude of the provided city. If the name contains multiple words, enclose the name in single or " + "double quotes. For a list of available cities, see: https://github.com/da-luce/astroterm/blob/v" PROJ_VERSION + "/data/cities.csv"); +INCLUDE_ARG_DEFINITION_LIT0(color_arg, "c", "color", "Enable terminal colors"); +INCLUDE_ARG_DEFINITION_LIT0( + constell_arg, "C", "constellations", + "Draw constellation stick figures. Note: a constellation is only drawn if all stars in the figure are over the threshold"); +INCLUDE_ARG_DEFINITION_LIT0(grid_arg, "g", "grid", "Draw an azimuthal grid"); +INCLUDE_ARG_DEFINITION_LIT0(unicode_arg, "u", "unicode", "Use unicode characters"); +INCLUDE_ARG_DEFINITION_LIT0(braille_arg, "b", "braille", "Use braille characters for constellation lines (requires Unicode)"); +INCLUDE_ARG_DEFINITION_LIT0(quit_arg, "q", "quit-on-any", "Quit on any keypress (default is to quit on 'q' or 'ESC' only)"); +INCLUDE_ARG_DEFINITION_LIT0(meta_arg, "m", "metadata", "Display metadata"); +INCLUDE_ARG_DEFINITION_LIT0(help_arg, "h", "help", "Print this help message"); +INCLUDE_ARG_DEFINITION_LIT0(completions_arg, "B", "bash-completions", "Print bash completions"); +INCLUDE_ARG_DEFINITION_LIT0(version_arg, "v", "version", "Display version info and exit"); +INCLUDE_ARG_DEFINITION_INT0(fps_arg, "f", "fps", "", "Frames per second (default: 24)"); + +#undef INCLUDE_ARG_DEFINITION_DBL0 +#undef INCLUDE_ARG_DEFINITION_STR0 +#undef INCLUDE_ARG_DEFINITION_LIT0 +#undef INCLUDE_ARG_DEFINITION_INT0 diff --git a/include/city.h b/include/city.h index cc8210c..26fd7d0 100644 --- a/include/city.h +++ b/include/city.h @@ -16,4 +16,8 @@ CityData *get_city(const char *name); */ void free_city(CityData *city); +/* Apply a callback and some associated data to all city definitions + */ +void iter_cities(void (*callback)(const CityData *city, void *data), void *data); + #endif // CITY_H diff --git a/include/split_lines.h b/include/split_lines.h new file mode 100644 index 0000000..5f8b6d5 --- /dev/null +++ b/include/split_lines.h @@ -0,0 +1,6 @@ +#ifndef SPLIT_LINES_H +#define SPLIT_LINES_H + +char **split_lines(char *data, int *line_count_out); + +#endif // SPLIT_LINES_H diff --git a/scripts/filter_cities.py b/scripts/filter_cities.py index 0c79a6a..af9a8e8 100644 --- a/scripts/filter_cities.py +++ b/scripts/filter_cities.py @@ -32,6 +32,12 @@ def process_cities(input_txt, output_csv, population_threshold=15000): for row in reader: try: city_name = row[1].replace("’", "'") + + # FIX: Handle the "Mianzhu, Deyang, Sichuan" anomaly + # by splitting at the comma and taking the first element + # (See PR #80) + city_name = city_name.split(',')[0].strip() + population = int(row[14]) country_code = row[8] timezone = row[17] diff --git a/src/city.c b/src/city.c index 12f10f6..d0d6dfc 100644 --- a/src/city.c +++ b/src/city.c @@ -1,6 +1,7 @@ #include "city.h" #include "cities.h" #include "macros.h" +#include "split_lines.h" #include #include @@ -105,10 +106,6 @@ CityData *get_city(const char *name) return NULL; } - // Convert the byte array into an array of lines - char **lines = NULL; - size_t line_count = 0; - char *data = malloc(cities_len + 1); if (data == NULL) { @@ -119,48 +116,129 @@ CityData *get_city(const char *name) memcpy(data, cities, cities_len); data[cities_len] = '\0'; - const char *line = strtok(data, "\n"); - while (line != NULL) + // Convert the byte array into an array of lines + int line_count = 0; + char **lines = split_lines(data, &line_count); + if (lines == NULL) { - char *line_copy = strdup(line); - if (line_copy == NULL) + free(normalized_name); + free(data); + return NULL; + } + + // Perform a linear search through the lines to find the best match + // (largest population) for the city name. E.g. London UK vs London Ontario. + CityData *best_city = NULL; + int best_population = -1; + + for (int i = 0; i < line_count; i++) + { + char *line = strdup(lines[i]); // strtok modifies the string + if (!line) + continue; + + char *city_name = strtok(line, ","); + char *population_str = strtok(NULL, ","); + char *country_code = strtok(NULL, ","); + strtok(NULL, ","); // timezone + char *latitude_str = strtok(NULL, ","); + char *longitude_str = strtok(NULL, ","); + + if (!city_name || !population_str || !latitude_str || !longitude_str) { - perror("Memory allocation failed"); - free(normalized_name); - free(data); - return NULL; + free(line); + continue; } - char **temp = realloc(lines, (line_count + 1) * sizeof(char *)); - if (temp == NULL) + char *current_normalized = normalize_city_name(city_name); + + // Check for match + if (current_normalized && strcmp(normalized_name, current_normalized) == 0) { - perror("Memory allocation failed"); - free(normalized_name); - free(data); - for (size_t i = 0; i < line_count; i++) + int population = atoi(population_str); + if (population > best_population) { - free(lines[i]); + best_population = population; + + // Free previous best + if (best_city) + { + free(best_city->city_name); + free(best_city); + } + + best_city = malloc(sizeof(CityData)); + if (best_city) + { + best_city->city_name = strdup(city_name); + best_city->latitude = atof(latitude_str); + best_city->longitude = atof(longitude_str); + } } - free(lines); - return NULL; } - lines = temp; - lines[line_count++] = line_copy; - line = strtok(NULL, "\n"); + free(current_normalized); + free(line); + } + + // Clean up + for (int i = 0; i < line_count; i++) + { + free(lines[i]); + } + free(lines); + free(data); + free(normalized_name); + + return best_city; +} + +void free_city(CityData *city) +{ + if (city != NULL) + { + free((void *)city->city_name); + free(city); + } +} + +/** + * @brief Iterates over all cities and applies a callback function to each. + * + * This function traverses the collection of cities and calls the provided + * callback function for each city. The callback receives a pointer to the + * city's data and a user-defined data pointer. + * + * @param callback A function pointer to be called for each city. + * @param user_data A pointer to user-defined data that will be passed to the + * callback function for each city. + */ +void iter_cities(void (*callback)(const CityData *city, void *data), void *user_data) +{ + if (callback == NULL) + { + return; } - // Perform binary search with the normalized name - char **result = bsearch(normalized_name, lines, line_count, sizeof(char *), compare_city); + // Get the city data as a buffer using split_lines + char *data = malloc(cities_len + 1); + memcpy(data, cities, cities_len); + data[cities_len] = '\0'; - CityData *city = NULL; - if (result != NULL) + int line_count = 0; + char **lines = split_lines(data, &line_count); + if (lines == NULL) { - // Parse the line for city data - char *matched_line = *result; + free(data); + return; + } + + for (int i = 1; i < line_count; i++) + { + char *line = lines[i]; const char *city_name, *latitude_str, *longitude_str; - city_name = strtok(matched_line, ","); + city_name = strtok(line, ","); strtok(NULL, ","); // Skip population strtok(NULL, ","); // Skip country code strtok(NULL, ","); // Skip timezone @@ -169,37 +247,20 @@ CityData *get_city(const char *name) if (city_name && latitude_str && longitude_str) { - city = malloc(sizeof(CityData)); - if (city == NULL) - { - perror("Memory allocation failed"); - } - else - { - city->city_name = strdup(city_name); - city->latitude = atof(latitude_str); - city->longitude = atof(longitude_str); - } + CityData city_data; + city_data.city_name = city_name; + city_data.latitude = atof(latitude_str); + city_data.longitude = atof(longitude_str); + + callback(&city_data, user_data); } } - // Clean up lines and data - for (size_t i = 0; i < line_count; i++) + // Clean up + for (int i = 0; i < line_count; i++) { free(lines[i]); } free(lines); free(data); - free(normalized_name); - - return city; -} - -void free_city(CityData *city) -{ - if (city != NULL) - { - free((void *)city->city_name); - free(city); - } } diff --git a/src/core.c b/src/core.c index 05a97c2..2d1b564 100644 --- a/src/core.c +++ b/src/core.c @@ -74,17 +74,17 @@ bool generate_planet_table(struct Planet **planet_table, const struct KepElems * return false; } - const char *planet_symbols_unicode[NUM_PLANETS] = { - [SUN] = "☉", [MERCURY] = "☿", [VENUS] = "♀", [EARTH] = "🜨", [MARS] = "♂", - [JUPITER] = "♃", [SATURN] = "♄", [URANUS] = "⛢", [NEPTUNE] = "♆"}; + const char *planet_symbols_unicode[NUM_PLANETS] = {[SUN] = "☉", [MERCURY] = "☿", [VENUS] = "♀", + [EARTH] = "🜨", [MARS] = "♂", [JUPITER] = "♃", + [SATURN] = "♄", [URANUS] = "⛢", [NEPTUNE] = "♆"}; - const char planet_symbols_ASCII[NUM_PLANETS] = { - [SUN] = '@', [MERCURY] = '*', [VENUS] = '*', [EARTH] = '*', [MARS] = '*', - [JUPITER] = '*', [SATURN] = '*', [URANUS] = '*', [NEPTUNE] = '*'}; + const char planet_symbols_ASCII[NUM_PLANETS] = {[SUN] = '@', [MERCURY] = '*', [VENUS] = '*', + [EARTH] = '*', [MARS] = '*', [JUPITER] = '*', + [SATURN] = '*', [URANUS] = '*', [NEPTUNE] = '*'}; - const char *planet_labels[NUM_PLANETS] = { - [SUN] = "Sun", [MERCURY] = "Mercury", [VENUS] = "Venus", [EARTH] = "Earth", [MARS] = "Mars", - [JUPITER] = "Jupiter", [SATURN] = "Saturn", [URANUS] = "Uranus", [NEPTUNE] = "Neptune"}; + const char *planet_labels[NUM_PLANETS] = {[SUN] = "Sun", [MERCURY] = "Mercury", [VENUS] = "Venus", + [EARTH] = "Earth", [MARS] = "Mars", [JUPITER] = "Jupiter", + [SATURN] = "Saturn", [URANUS] = "Uranus", [NEPTUNE] = "Neptune"}; // TODO: find better way to map these values const int planet_colors[NUM_PLANETS] = { diff --git a/src/main.c b/src/main.c index 78e36be..ab59706 100644 --- a/src/main.c +++ b/src/main.c @@ -244,41 +244,45 @@ int main(int argc, char *argv[]) return EXIT_SUCCESS; } +void print_city_name_quoted(const CityData *city, void *unused) +{ + const char *s = city->city_name; + + putchar('\''); + // Single-quote wrapping with escaping--needed for bash completions to + // handle city names single quotes in them (e.g. "St. John's") + while (*s) + { + if (*s == '\'') + { + printf("'\\''"); // close, escape, reopen + } + else + { + putchar(*s); + } + s++; + } + putchar('\''); + putchar('\n'); +} + void parse_options(int argc, char *argv[], struct Conf *config) { - struct arg_dbl *latitude_arg = arg_dbl0("a", "latitude", "", "Observer latitude [-90°, 90°] (default: 0.0)"); - struct arg_dbl *longitude_arg = arg_dbl0("o", "longitude", "", "Observer longitude [-180°, 180°] (default: 0.0)"); - struct arg_str *datetime_arg = arg_str0("d", "datetime", "", "Observation datetime in UTC"); - struct arg_dbl *threshold_arg = - arg_dbl0("t", "threshold", "", "Only render stars brighter than this magnitude (default: 5.0)"); - struct arg_dbl *label_arg = - arg_dbl0("l", "label-thresh", "", "Label stars brighter than this magnitude (default: 0.25)"); - struct arg_int *fps_arg = arg_int0("f", "fps", "", "Frames per second (default: 24)"); - struct arg_dbl *speed_arg = arg_dbl0("s", "speed", "", "Animation speed multiplier (default: 1.0)"); - struct arg_lit *color_arg = arg_lit0("c", "color", "Enable terminal colors"); - struct arg_lit *constell_arg = arg_lit0("C", "constellations", - "Draw constellation stick figures. Note: a constellation is only " - "drawn if all stars in the figure are over the threshold"); - struct arg_lit *grid_arg = arg_lit0("g", "grid", "Draw an azimuthal grid"); - struct arg_lit *unicode_arg = arg_lit0("u", "unicode", "Use unicode characters"); - struct arg_lit *braille_arg = arg_lit0("b", "braille", "Use braille characters for constellation lines (requires Unicode)"); - struct arg_lit *quit_arg = arg_lit0("q", "quit-on-any", "Quit on any keypress (default is to quit on 'q' or 'ESC' only)"); - struct arg_lit *meta_arg = arg_lit0("m", "metadata", "Display metadata"); - struct arg_lit *help_arg = arg_lit0("h", "help", "Print this help message"); - struct arg_dbl *ratio_arg = arg_dbl0("r", "aspect-ratio", "", - "Override the calculated terminal cell aspect ratio. Use this if your projection is " - "not 'square.' A value around 2.0 works well for most cases"); - struct arg_str *city_arg = - arg_str0("i", "city", "", - "Use the latitude and longitude of the provided city. If the name contains multiple words, " - "enclose the name in single or double quotes. For a list of available cities, see: " - "https://github.com/da-luce/astroterm/blob/v" PROJ_VERSION "/data/cities.csv"); - struct arg_lit *version_arg = arg_lit0("v", "version", "Display version info and exit"); +#define INCLUDE_ARG_DEFINITION_DBL0(token, short_name, long_name, datatype, glossary) \ + struct arg_dbl *token = arg_dbl0(short_name, long_name, datatype, glossary); +#define INCLUDE_ARG_DEFINITION_STR0(token, short_name, long_name, datatype, glossary) \ + struct arg_str *token = arg_str0(short_name, long_name, datatype, glossary); +#define INCLUDE_ARG_DEFINITION_LIT0(token, short_name, long_name, glossary) \ + struct arg_lit *token = arg_lit0(short_name, long_name, glossary); +#define INCLUDE_ARG_DEFINITION_INT0(token, short_name, long_name, datatype, glossary) \ + struct arg_int *token = arg_int0(short_name, long_name, datatype, glossary); +#include "arg_definitions.h" struct arg_end *end = arg_end(20); - void *argtable[] = {latitude_arg, longitude_arg, datetime_arg, threshold_arg, label_arg, fps_arg, speed_arg, - color_arg, constell_arg, grid_arg, unicode_arg, braille_arg, quit_arg, meta_arg, - ratio_arg, help_arg, city_arg, version_arg, end}; + void *argtable[] = {latitude_arg, longitude_arg, datetime_arg, threshold_arg, label_arg, fps_arg, speed_arg, + color_arg, constell_arg, grid_arg, unicode_arg, braille_arg, quit_arg, meta_arg, + ratio_arg, help_arg, completions_arg, city_arg, version_arg, end}; int nerrors = arg_parse(argc, argv, argtable); @@ -290,6 +294,57 @@ void parse_options(int argc, char *argv[], struct Conf *config) exit(EXIT_SUCCESS); } + if (completions_arg->count > 0) + { + // Print bash completions + printf("# Bash completions for astroterm\n"); + printf("ASTROTERM_OPTIONS=(\n"); +#define INCLUDE_ARG_DEFINITION_DBL0(token, short_name, long_name, datatype, glossary) \ + printf(" -%s\n", short_name); \ + printf(" --%s\n", long_name); +#define INCLUDE_ARG_DEFINITION_STR0(token, short_name, long_name, datatype, glossary) \ + printf(" -%s\n", short_name); \ + printf(" --%s\n", long_name); +#define INCLUDE_ARG_DEFINITION_LIT0(token, short_name, long_name, glossary) \ + printf(" -%s\n", short_name); \ + printf(" --%s\n", long_name); +#define INCLUDE_ARG_DEFINITION_INT0(token, short_name, long_name, datatype, glossary) \ + printf(" -%s\n", short_name); \ + printf(" --%s\n", long_name); +#include "arg_definitions.h" + printf(")\n\n"); + printf("ASTROTERM_CITIES=(\n"); + iter_cities(&print_city_name_quoted, NULL); + printf(")\n"); + // Warning: this is a vibe code modified version from PR #80 in order to + // get things working on bash 3.2. The cleaning of the input word seems + // necessary to prevent some weird escaping issues that cause the completions + // to not work + printf("_astroterm_completions() {\n"); + printf(" local word=\"${COMP_WORDS[COMP_CWORD]}\"\n"); + printf(" local prev=\"${COMP_WORDS[COMP_CWORD-1]}\"\n"); + printf(" case \"$prev\" in\n"); + printf(" -i|--city)\n"); + printf(" local clean_word=\"${word//\\\\/}\"\n"); + printf(" clean_word=\"${clean_word//\\\"/}\"\n"); + printf(" clean_word=\"${clean_word//\\'/}\"\n"); + printf(" COMPREPLY=()\n"); + printf(" for city in \"${ASTROTERM_CITIES[@]}\"; do\n"); + printf(" if [[ \"$city\" == \"${clean_word}\"* ]]; then\n"); + printf(" printf -v city_esc '%%q ' \"$city\"\n"); + printf(" COMPREPLY+=(\"$city_esc\")\n"); + printf(" fi\n"); + printf(" done\n"); + printf(" ;;\n"); + printf(" *)\n"); + printf(" COMPREPLY=( $(compgen -W \"${ASTROTERM_OPTIONS[*]}\" -- \"${word}\") )\n"); + printf(" ;;\n"); + printf(" esac\n"); + printf("}\n"); + printf("complete -o nospace -F _astroterm_completions astroterm\n"); + exit(EXIT_SUCCESS); + } + if (nerrors > 0) { arg_print_errors(stderr, end, argv[0]); diff --git a/src/meson.build b/src/meson.build index ee09ce9..2956367 100644 --- a/src/meson.build +++ b/src/meson.build @@ -10,6 +10,7 @@ project_source_files += [ files('stopwatch.c'), files('term.c'), files('city.c'), + files('split_lines.c'), ] # NOTE: We add main.c separately in the root Meson.build file to avoid duplicate "main" functions when compiling tests diff --git a/src/split_lines.c b/src/split_lines.c new file mode 100644 index 0000000..3a6de5e --- /dev/null +++ b/src/split_lines.c @@ -0,0 +1,53 @@ +#include +#include +#include + +#include "split_lines.h" + +/** + * Splits a buffer into lines. + * + * @param data The buffer to split (will be modified). + * @param line_count_out Pointer to int to store the number of lines. + * @return Array of lines, or NULL on error. Caller must free each line and the array. + */ +char **split_lines(char *data, int *line_count_out) +{ + char **lines = NULL; + size_t line_count = 0; + const char *line = strtok(data, "\n"); + while (line != NULL) + { + char *line_copy = strdup(line); + if (line_copy == NULL) + { + perror("Memory allocation failed"); + for (size_t i = 0; i < line_count; i++) + { + free(lines[i]); + } + free(lines); + return NULL; + } + + char **temp = realloc(lines, (line_count + 1) * sizeof(char *)); + if (temp == NULL) + { + perror("Memory allocation failed"); + free(line_copy); + for (size_t i = 0; i < line_count; i++) + { + free(lines[i]); + } + free(lines); + return NULL; + } + lines = temp; + + lines[line_count++] = line_copy; + line = strtok(NULL, "\n"); + } + if (line_count_out) + *line_count_out = (int)line_count; + return lines; +} diff --git a/test/city_test.c b/test/city_test.c index 96ea898..536c014 100644 --- a/test/city_test.c +++ b/test/city_test.c @@ -1,5 +1,6 @@ #include "city.h" #include "unity.h" +#include void setUp(void) { @@ -74,11 +75,76 @@ void test_get_city(void) TEST_ASSERT_NULL(city); } +// ----------------------------------------------------------------------------- +// Callbacks for iter_cities tests +// ----------------------------------------------------------------------------- + +// Counts the number of cities iterated over +static void count_cities_cb(const CityData *city, void *data) +{ + int *count = (int *)data; + (*count)++; +} + +// Looks for "Boston" and records its coordinates in a float array +// [0] = found flag, [1] = latitude, [2] = longitude +static void find_boston_cb(const CityData *city, void *data) +{ + float *results = (float *)data; + + if (strcmp(city->city_name, "Boston") == 0) + { + results[0] = 1.0f; // Mark as found + results[1] = city->latitude; // Record latitude + results[2] = city->longitude; // Record longitude + } +} + +//------------------------------------------------------------------------------ +// Tests for iter_cities +//------------------------------------------------------------------------------ + +void test_iter_cities_should_iterate_all_rows(void) +{ + int city_count = 0; + + iter_cities(count_cities_cb, &city_count); + + // We expect the count to be greater than 0 if data/cities.csv is loaded + // properly + TEST_ASSERT_GREATER_THAN(0, city_count); +} + +void test_iter_cities_should_parse_data_correctly(void) +{ + // results array: [found_flag, latitude, longitude] + float results[3] = {0.0f, 0.0f, 0.0f}; + + iter_cities(find_boston_cb, results); + + TEST_ASSERT_EQUAL_FLOAT_MESSAGE(1.0f, results[0], "Boston was not found during iteration"); + TEST_ASSERT_EQUAL_FLOAT(42.35843, results[1]); + TEST_ASSERT_EQUAL_FLOAT(-71.05977, results[2]); +} + +void test_iter_cities_null_callback_should_not_crash(void) +{ + // Passing NULL as the callback should return immediately + iter_cities(NULL, NULL); + + // Sentinel assertion to ensure test passes if we get here without crashing + TEST_ASSERT_TRUE(1); +} + int main(void) { UNITY_BEGIN(); RUN_TEST(test_get_city); + RUN_TEST(test_iter_cities_should_iterate_all_rows); + RUN_TEST(test_iter_cities_should_parse_data_correctly); + RUN_TEST(test_iter_cities_null_callback_should_not_crash); + return UNITY_END(); } diff --git a/test/drawing_test.c b/test/drawing_test.c index 12b18ee..763ad2c 100644 --- a/test/drawing_test.c +++ b/test/drawing_test.c @@ -79,7 +79,7 @@ void test_diagonal_ascii_10x10(void) // Read window content into an array read_window_to_array(win, actual, 10, 10); - const char(*const_actual)[MAX_WINDOW_WIDTH] = (const char(*)[MAX_WINDOW_WIDTH])actual; + const char (*const_actual)[MAX_WINDOW_WIDTH] = (const char (*)[MAX_WINDOW_WIDTH])actual; // Compare actual and expected output TEST_ASSERT_TRUE(compare_arrays(const_actual, diagonal_ascii_10x10, 10, 10)); @@ -117,7 +117,7 @@ void test_diagonal_ascii_opposite_10x10(void) // Read window content into an ASCII array read_window_to_array(win, actual, 10, 10); - const char(*const_actual)[MAX_WINDOW_WIDTH] = (const char(*)[MAX_WINDOW_WIDTH])actual; + const char (*const_actual)[MAX_WINDOW_WIDTH] = (const char (*)[MAX_WINDOW_WIDTH])actual; // Compare actual and expected output TEST_ASSERT_TRUE(compare_arrays(const_actual, diagonal_ascii_opposite_10x10, 10, 10)); @@ -156,7 +156,7 @@ void test_vertical_ascii_11x11(void) // Read window content into an ASCII array read_window_to_array(win, actual, 11, 11); - const char(*const_actual)[MAX_WINDOW_WIDTH] = (const char(*)[MAX_WINDOW_WIDTH])actual; + const char (*const_actual)[MAX_WINDOW_WIDTH] = (const char (*)[MAX_WINDOW_WIDTH])actual; // Compare actual and expected output TEST_ASSERT_TRUE(compare_arrays(const_actual, vertical_ascii_11x11, 11, 11)); @@ -195,7 +195,7 @@ void test_horizontal_ascii_11x11(void) // Read window content into an ASCII array read_window_to_array(win, actual, 11, 11); - const char(*const_actual)[MAX_WINDOW_WIDTH] = (const char(*)[MAX_WINDOW_WIDTH])actual; + const char (*const_actual)[MAX_WINDOW_WIDTH] = (const char (*)[MAX_WINDOW_WIDTH])actual; // Compare actual and expected output TEST_ASSERT_TRUE(compare_arrays(const_actual, horizontal_ascii_11x11, 11, 11)); diff --git a/test/meson.build b/test/meson.build index fccf021..d11f0c9 100644 --- a/test/meson.build +++ b/test/meson.build @@ -5,7 +5,8 @@ test_files += [ files('bit_test.c'), files('core_test.c'), files('stopwatch_test.c'), - files('drawing_test.c') + files('drawing_test.c'), + files('misc_test.c'), ] test_include_dirs += [ diff --git a/test/misc_test.c b/test/misc_test.c new file mode 100644 index 0000000..6ac9ded --- /dev/null +++ b/test/misc_test.c @@ -0,0 +1,112 @@ +#include "split_lines.h" +#include "unity.h" +#include +#include + +static void free_split_lines(char **lines, int count) +{ + if (lines != NULL) + { + for (int i = 0; i < count; i++) + { + free(lines[i]); + } + free(lines); + } +} + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_split_lines_normal_input(void) +{ + char data[] = "Line 1\nLine 2\nLine 3"; + int count = 0; + + char **lines = split_lines(data, &count); + + TEST_ASSERT_NOT_NULL(lines); + TEST_ASSERT_EQUAL_INT(3, count); + TEST_ASSERT_EQUAL_STRING("Line 1", lines[0]); + TEST_ASSERT_EQUAL_STRING("Line 2", lines[1]); + TEST_ASSERT_EQUAL_STRING("Line 3", lines[2]); + + free_split_lines(lines, count); +} + +void test_split_lines_single_line(void) +{ + char data[] = "Just one line here"; + int count = 0; + + char **lines = split_lines(data, &count); + + TEST_ASSERT_NOT_NULL(lines); + TEST_ASSERT_EQUAL_INT(1, count); + TEST_ASSERT_EQUAL_STRING("Just one line here", lines[0]); + + free_split_lines(lines, count); +} + +void test_split_lines_empty_string(void) +{ + char data[] = ""; + int count = -1; // Initialize to -1 to ensure it gets updated to 0 + + char **lines = split_lines(data, &count); + + // strtok on an empty string returns NULL immediately, + // so our function returns NULL and sets count to 0. + TEST_ASSERT_NULL(lines); + TEST_ASSERT_EQUAL_INT(0, count); +} + +void test_split_lines_consecutive_newlines(void) +{ + // strtok treats consecutive delimiters as a single delimiter. + // It skips empty tokens. This test verifies that expected behavior. + char data[] = "First\n\n\nSecond\nThird\n"; + int count = 0; + + char **lines = split_lines(data, &count); + + TEST_ASSERT_NOT_NULL(lines); + TEST_ASSERT_EQUAL_INT(3, count); + TEST_ASSERT_EQUAL_STRING("First", lines[0]); + TEST_ASSERT_EQUAL_STRING("Second", lines[1]); + TEST_ASSERT_EQUAL_STRING("Third", lines[2]); + + free_split_lines(lines, count); +} + +void test_split_lines_null_count_pointer(void) +{ + char data[] = "Line A\nLine B"; + + char **lines = split_lines(data, NULL); + + TEST_ASSERT_NOT_NULL(lines); + TEST_ASSERT_EQUAL_STRING("Line A", lines[0]); + TEST_ASSERT_EQUAL_STRING("Line B", lines[1]); + + // We have to hardcode the count to 2 here to free it properly + free_split_lines(lines, 2); +} + +int main(void) +{ + UNITY_BEGIN(); + + RUN_TEST(test_split_lines_normal_input); + RUN_TEST(test_split_lines_single_line); + RUN_TEST(test_split_lines_empty_string); + RUN_TEST(test_split_lines_consecutive_newlines); + RUN_TEST(test_split_lines_null_count_pointer); + + return UNITY_END(); +} \ No newline at end of file