#!/usr/bin/env python3 """Generate world_ports.json with ~5000 real seaports worldwide.""" import json, os REGIONS = { "NEUR": "North Europe", "SEUR": "South Europe/Med", "EASIA": "East Asia", "SEASIA": "Southeast Asia", "SASIA": "South Asia", "ME": "Middle East", "EAFR": "East Africa", "WAFR": "West Africa", "NAFR": "North Africa", "NAMERICA": "North America", "SAMERICA": "South America", "CARIB": "Caribbean", "OCEANIA": "Oceania", "BALTIC": "Baltic", "BSEA": "Black Sea" } def p(name, country, cc, unlocode, lat, lon, size="M", region="NEUR"): """Create a port entry.""" key = name.lower().replace(" ", "_").replace("-", "_").replace("'", "").replace(".", "") return {"key": key, "name": name, "country": country, "country_code": cc, "unlocode": unlocode, "lat": round(lat, 4), "lon": round(lon, 4), "size": size, "region": region} ports = [] # ============================================================ # NORTH EUROPE (~200 ports) # ============================================================ neur = [ # United Kingdom ("London", "United Kingdom", "GB", "GBLON", 51.5074, -0.1278, "VL"), ("Southampton", "United Kingdom", "GB", "GBSOU", 50.9097, -1.4044, "VL"), ("Felixstowe", "United Kingdom", "GB", "GBFXT", 51.9536, 1.3513, "VL"), ("Liverpool", "United Kingdom", "GB", "GBLIV", 53.4084, -2.9916, "L"), ("Immingham", "United Kingdom", "GB", "GBIMM", 53.6309, -0.2106, "L"), ("Tilbury", "United Kingdom", "GB", "GBTIL", 51.4607, 0.3543, "L"), ("Bristol", "United Kingdom", "GB", "GBBRS", 51.4545, -2.5879, "L"), ("Grimsby", "United Kingdom", "GB", "GBGRY", 53.5675, -0.0799, "M"), ("Hull", "United Kingdom", "GB", "GBHUL", 53.7457, -0.3367, "L"), ("Teesport", "United Kingdom", "GB", "GBTES", 54.5973, -1.1418, "L"), ("Aberdeen", "United Kingdom", "GB", "GBABD", 57.1497, -2.0943, "M"), ("Edinburgh Leith", "United Kingdom", "GB", "GBLEI", 55.9833, -3.1700, "M"), ("Dover", "United Kingdom", "GB", "GBDVR", 51.1279, 1.3134, "L"), ("Harwich", "United Kingdom", "GB", "GBHRW", 51.9460, 1.2880, "M"), ("Portsmouth", "United Kingdom", "GB", "GBPME", 50.8198, -1.0880, "M"), ("Plymouth", "United Kingdom", "GB", "GBPLY", 50.3755, -4.1427, "M"), ("Swansea", "United Kingdom", "GB", "GBSWA", 51.6214, -3.9436, "M"), ("Cardiff", "United Kingdom", "GB", "GBCDF", 51.4816, -3.1791, "M"), ("Milford Haven", "United Kingdom", "GB", "GBMLF", 51.7080, -5.0400, "L"), ("Belfast", "United Kingdom", "GB", "GBBEL", 54.6079, -5.9264, "L"), ("Glasgow", "United Kingdom", "GB", "GBGLW", 55.8642, -4.2518, "M"), ("Grangemouth", "United Kingdom", "GB", "GBGRG", 56.0237, -3.7165, "M"), ("Dundee", "United Kingdom", "GB", "GBDND", 56.4620, -2.9707, "S"), ("Inverness", "United Kingdom", "GB", "GBINV", 57.4778, -4.2247, "S"), ("Lerwick", "United Kingdom", "GB", "GBLER", 60.1540, -1.1450, "S"), ("Kirkwall", "United Kingdom", "GB", "GBKWL", 58.9810, -2.9596, "S"), ("Peterhead", "United Kingdom", "GB", "GBPHD", 57.5050, -1.7738, "S"), ("Poole", "United Kingdom", "GB", "GBPOO", 50.7151, -1.9871, "S"), ("Whitby", "United Kingdom", "GB", "GBWHY", 54.4860, -0.6150, "S"), ("Great Yarmouth", "United Kingdom", "GB", "GBGTY", 52.6074, 1.7313, "S"), # Netherlands ("Rotterdam", "Netherlands", "NL", "NLRTM", 51.9244, 4.4777, "VL"), ("Amsterdam", "Netherlands", "NL", "NLAMS", 52.3676, 4.9041, "VL"), ("Vlissingen", "Netherlands", "NL", "NLVLI", 51.4427, 3.5727, "L"), ("Terneuzen", "Netherlands", "NL", "NLTNZ", 51.3360, 3.8279, "M"), ("Moerdijk", "Netherlands", "NL", "NLMOE", 51.6944, 4.5861, "M"), ("Dordrecht", "Netherlands", "NL", "NLDOR", 51.8133, 4.6901, "M"), ("Eemshaven", "Netherlands", "NL", "NLEEM", 53.4388, 6.8336, "M"), ("Delfzijl", "Netherlands", "NL", "NLDZL", 53.3310, 6.9180, "S"), ("Den Helder", "Netherlands", "NL", "NLDHR", 52.9531, 4.7610, "S"), ("Harlingen", "Netherlands", "NL", "NLHAR", 53.1747, 5.4222, "S"), # Belgium ("Antwerp", "Belgium", "BE", "BEANR", 51.2213, 4.4051, "VL"), ("Zeebrugge", "Belgium", "BE", "BEZEE", 51.3285, 3.1750, "L"), ("Ghent", "Belgium", "BE", "BEGNE", 51.0543, 3.7174, "L"), ("Ostend", "Belgium", "BE", "BEOST", 51.2254, 2.9263, "M"), # Germany ("Hamburg", "Germany", "DE", "DEHAM", 53.5511, 9.9937, "VL"), ("Bremerhaven", "Germany", "DE", "DEBRV", 53.5396, 8.5809, "VL"), ("Wilhelmshaven", "Germany", "DE", "DEWVN", 53.5147, 8.1118, "L"), ("Bremen", "Germany", "DE", "DEBRE", 53.0793, 8.8017, "L"), ("Rostock", "Germany", "DE", "DERSK", 54.0887, 12.1407, "L"), ("Lubeck", "Germany", "DE", "DELBC", 53.8655, 10.6866, "M"), ("Kiel", "Germany", "DE", "DEKEL", 54.3233, 10.1228, "M"), ("Emden", "Germany", "DE", "DEEME", 53.3590, 7.2060, "M"), ("Brunsbüttel", "Germany", "DE", "DEBRU", 53.8949, 9.1380, "M"), ("Cuxhaven", "Germany", "DE", "DECUX", 53.8711, 8.7060, "S"), ("Flensburg", "Germany", "DE", "DEFLF", 54.7937, 9.4469, "S"), ("Wismar", "Germany", "DE", "DEWIS", 53.8917, 11.4583, "S"), ("Stralsund", "Germany", "DE", "DESTR", 54.3150, 13.0900, "S"), ("Sassnitz", "Germany", "DE", "DESAS", 54.5114, 13.6413, "S"), # France (Atlantic/Channel) ("Le Havre", "France", "FR", "FRLEH", 49.4944, 0.1079, "VL"), ("Dunkirk", "France", "FR", "FRDKK", 51.0383, 2.3775, "L"), ("Rouen", "France", "FR", "FRROU", 49.4432, 1.0993, "L"), ("Nantes Saint Nazaire", "France", "FR", "FRSNE", 47.2780, -2.1700, "L"), ("Brest", "France", "FR", "FRBES", 48.3904, -4.4861, "M"), ("Calais", "France", "FR", "FRCQF", 50.9513, 1.8587, "M"), ("Boulogne", "France", "FR", "FRBOL", 50.7264, 1.6147, "M"), ("Cherbourg", "France", "FR", "FRCER", 49.6337, -1.6222, "M"), ("Lorient", "France", "FR", "FRLRT", 47.7477, -3.3700, "S"), ("La Rochelle", "France", "FR", "FRLRH", 46.1591, -1.1520, "M"), ("Bordeaux", "France", "FR", "FRBOD", 44.8378, -0.5792, "L"), ("Bayonne", "France", "FR", "FRBAY", 43.4832, -1.4841, "S"), ("Dieppe", "France", "FR", "FRDPE", 49.9255, 1.0845, "S"), ("Saint Malo", "France", "FR", "FRSML", 48.6493, -2.0060, "S"), # Ireland ("Dublin", "Ireland", "IE", "IEDUB", 53.3498, -6.2603, "L"), ("Cork", "Ireland", "IE", "IEORK", 51.8969, -8.4863, "L"), ("Shannon Foynes", "Ireland", "IE", "IESNN", 52.6140, -9.0640, "M"), ("Waterford", "Ireland", "IE", "IEWAT", 52.2593, -7.1101, "M"), ("Galway", "Ireland", "IE", "IEGAL", 53.2707, -9.0568, "S"), ("Rosslare", "Ireland", "IE", "IEROS", 52.2547, -6.3389, "S"), ("Drogheda", "Ireland", "IE", "IEDRO", 53.7179, -6.3474, "S"), # Norway ("Bergen", "Norway", "NO", "NOBGO", 60.3913, 5.3221, "L"), ("Oslo", "Norway", "NO", "NOOSL", 59.9139, 10.7522, "L"), ("Stavanger", "Norway", "NO", "NOSVG", 58.9700, 5.7331, "L"), ("Trondheim", "Norway", "NO", "NOTRD", 63.4305, 10.3951, "M"), ("Kristiansand", "Norway", "NO", "NOKRS", 58.1599, 8.0182, "M"), ("Tromso", "Norway", "NO", "NOTOS", 69.6496, 18.9560, "M"), ("Narvik", "Norway", "NO", "NONVK", 68.4385, 17.4273, "M"), ("Hammerfest", "Norway", "NO", "NOHFT", 70.6634, 23.6821, "S"), ("Bodo", "Norway", "NO", "NOBOO", 67.2804, 14.4049, "S"), ("Alesund", "Norway", "NO", "NOAES", 62.4722, 6.1495, "M"), ("Molde", "Norway", "NO", "NOMOL", 62.7375, 7.1610, "S"), ("Haugesund", "Norway", "NO", "NOHAU", 59.4138, 5.2680, "M"), ("Fredrikstad", "Norway", "NO", "NOFRK", 59.2181, 10.9298, "S"), ("Drammen", "Norway", "NO", "NODRM", 59.7440, 10.2045, "S"), ("Larvik", "Norway", "NO", "NOLAR", 59.0530, 10.0345, "S"), ("Moss", "Norway", "NO", "NOMOS", 59.4340, 10.6590, "S"), ("Kirkenes", "Norway", "NO", "NOKKN", 69.7271, 30.0458, "S"), ("Mongstad", "Norway", "NO", "NOMON", 60.8100, 5.0300, "M"), ("Florø", "Norway", "NO", "NOFRO", 61.5997, 5.0322, "S"), ("Sandefjord", "Norway", "NO", "NOSAD", 59.1314, 10.2166, "S"), ("Leirvik", "Norway", "NO", "NOLEI", 59.7792, 5.5003, "S"), ("Måløy", "Norway", "NO", "NOMAY", 61.9340, 5.1140, "S"), ("Vardø", "Norway", "NO", "NOVAO", 70.3716, 31.1089, "S"), ("Honningsvåg", "Norway", "NO", "NOHVG", 70.9827, 25.9706, "S"), ("Sortland", "Norway", "NO", "NOSOL", 68.6933, 15.4134, "S"), ("Harstad", "Norway", "NO", "NOHAR", 68.7989, 16.5417, "S"), ("Svolvær", "Norway", "NO", "NOSVJ", 68.2342, 14.5684, "S"), # Denmark ("Copenhagen", "Denmark", "DK", "DKCPH", 55.6761, 12.5683, "L"), ("Aarhus", "Denmark", "DK", "DKAAR", 56.1629, 10.2039, "L"), ("Fredericia", "Denmark", "DK", "DKFRC", 55.5660, 9.7520, "M"), ("Esbjerg", "Denmark", "DK", "DKEBJ", 55.4760, 8.4519, "M"), ("Aalborg", "Denmark", "DK", "DKAAL", 57.0488, 9.9217, "M"), ("Odense", "Denmark", "DK", "DKODE", 55.3959, 10.3883, "S"), ("Rønne", "Denmark", "DK", "DKRNN", 55.1000, 14.7000, "S"), ("Kalundborg", "Denmark", "DK", "DKKAL", 55.6833, 11.0833, "S"), ("Helsingør", "Denmark", "DK", "DKHLS", 56.0361, 12.6136, "S"), # Iceland ("Reykjavik", "Iceland", "IS", "ISREY", 64.1466, -21.9426, "M"), ("Akureyri", "Iceland", "IS", "ISAKU", 65.6835, -18.0878, "S"), ("Ísafjörður", "Iceland", "IS", "ISISF", 66.0748, -23.1273, "S"), ("Vestmannaeyjar", "Iceland", "IS", "ISVES", 63.4422, -20.2700, "S"), # Faroe Islands ("Tórshavn", "Faroe Islands", "FO", "FOTOR", 62.0079, -6.7906, "S"), ("Klaksvík", "Faroe Islands", "FO", "FOKLA", 62.2266, -6.5900, "S"), ] for t in neur: ports.append(p(*t, region="NEUR") if len(t) == 7 else p(*t)) # ============================================================ # BALTIC (~150 ports) # ============================================================ baltic = [ # Sweden ("Gothenburg", "Sweden", "SE", "SEGOT", 57.7089, 11.9746, "VL"), ("Stockholm", "Sweden", "SE", "SESTO", 59.3293, 18.0686, "L"), ("Malmo", "Sweden", "SE", "SEMMA", 55.6050, 13.0038, "L"), ("Helsingborg", "Sweden", "SE", "SEHEL", 56.0465, 12.6945, "M"), ("Norrköping", "Sweden", "SE", "SENRK", 58.5942, 16.1826, "M"), ("Luleå", "Sweden", "SE", "SELUL", 65.5848, 22.1547, "M"), ("Gävle", "Sweden", "SE", "SEGVX", 60.6749, 17.1413, "M"), ("Sundsvall", "Sweden", "SE", "SESUN", 62.3908, 17.3069, "M"), ("Umeå", "Sweden", "SE", "SEUME", 63.8258, 20.2630, "S"), ("Kalmar", "Sweden", "SE", "SEKLR", 56.6634, 16.3566, "S"), ("Karlshamn", "Sweden", "SE", "SEKAN", 56.1706, 14.8618, "M"), ("Trelleborg", "Sweden", "SE", "SETRE", 55.3757, 13.1574, "M"), ("Visby", "Sweden", "SE", "SEVIS", 57.6407, 18.2948, "S"), ("Oxelösund", "Sweden", "SE", "SEOXL", 58.6667, 17.1000, "M"), ("Karlskrona", "Sweden", "SE", "SEKAA", 56.1612, 15.5869, "S"), ("Skellefteå", "Sweden", "SE", "SESKE", 64.7507, 20.9528, "S"), ("Halmstad", "Sweden", "SE", "SEHAL", 56.6739, 12.8572, "S"), ("Ystad", "Sweden", "SE", "SEYSD", 55.4295, 13.8200, "S"), ("Piteå", "Sweden", "SE", "SEPIT", 65.3173, 21.4796, "S"), ("Västerås", "Sweden", "SE", "SEVST", 59.6099, 16.5448, "S"), ("Söderhamn", "Sweden", "SE", "SESOD", 61.3042, 17.0590, "S"), ("Hudiksvall", "Sweden", "SE", "SEHUD", 61.7282, 17.1057, "S"), ("Örnsköldsvik", "Sweden", "SE", "SEORN", 63.2909, 18.7152, "S"), # Finland ("Helsinki", "Finland", "FI", "FIHEL", 60.1699, 24.9384, "L"), ("Turku", "Finland", "FI", "FITKU", 60.4518, 22.2666, "M"), ("Kotka", "Finland", "FI", "FIKTK", 60.4664, 26.9458, "L"), ("Hamina", "Finland", "FI", "FIHMN", 60.5693, 27.1978, "M"), ("Rauma", "Finland", "FI", "FIRAU", 61.1286, 21.5115, "M"), ("Pori", "Finland", "FI", "FIPOR", 61.4851, 21.7974, "M"), ("Oulu", "Finland", "FI", "FIOUL", 65.0121, 25.4651, "M"), ("Vaasa", "Finland", "FI", "FIVAA", 63.0951, 21.6165, "M"), ("Kokkola", "Finland", "FI", "FIKOK", 63.8384, 23.1304, "M"), ("Hanko", "Finland", "FI", "FIHAN", 59.8236, 22.9688, "M"), ("Naantali", "Finland", "FI", "FINAA", 60.4673, 22.0333, "M"), ("Pietarsaari", "Finland", "FI", "FIPIE", 63.6752, 22.7027, "S"), ("Kemi", "Finland", "FI", "FIKEM", 65.7361, 24.5634, "S"), ("Tornio", "Finland", "FI", "FITOR", 65.8493, 24.1441, "S"), ("Raahe", "Finland", "FI", "FIRHE", 64.6841, 24.4794, "S"), ("Mariehamn", "Finland", "FI", "FIMHQ", 60.0971, 19.9348, "S"), # Estonia ("Tallinn", "Estonia", "EE", "EETLL", 59.4370, 24.7536, "L"), ("Muuga", "Estonia", "EE", "EEMUG", 59.4900, 24.9600, "L"), ("Paldiski", "Estonia", "EE", "EEPAL", 59.3483, 24.0538, "M"), ("Pärnu", "Estonia", "EE", "EEPRN", 58.3859, 24.4964, "S"), ("Sillamäe", "Estonia", "EE", "EESIL", 59.3960, 27.7750, "M"), ("Kunda", "Estonia", "EE", "EEKUN", 59.5167, 26.5333, "S"), # Latvia ("Riga", "Latvia", "LV", "LVRIX", 56.9496, 24.1052, "L"), ("Ventspils", "Latvia", "LV", "LVVEN", 57.3942, 21.5606, "L"), ("Liepaja", "Latvia", "LV", "LVLPX", 56.5047, 21.0107, "M"), # Lithuania ("Klaipeda", "Lithuania", "LT", "LTKLY", 55.7172, 21.1175, "L"), ("Butinge", "Lithuania", "LT", "LTBUT", 56.0667, 21.0500, "M"), # Poland ("Gdansk", "Poland", "PL", "PLGDN", 54.3520, 18.6466, "VL"), ("Gdynia", "Poland", "PL", "PLGDY", 54.5189, 18.5305, "L"), ("Szczecin", "Poland", "PL", "PLSZZ", 53.4285, 14.5528, "L"), ("Swinoujscie", "Poland", "PL", "PLSWI", 53.9108, 14.2477, "M"), ("Kolobrzeg", "Poland", "PL", "PLKOL", 54.1776, 15.5761, "S"), ("Elblag", "Poland", "PL", "PLELB", 54.1523, 19.4044, "S"), ("Police", "Poland", "PL", "PLPLC", 53.5561, 14.5694, "S"), # Russia (Baltic) ("Saint Petersburg", "Russia", "RU", "RULED", 59.9311, 30.3609, "VL"), ("Kaliningrad", "Russia", "RU", "RUKGD", 54.7065, 20.5108, "L"), ("Ust-Luga", "Russia", "RU", "RUULU", 59.6800, 28.4000, "L"), ("Primorsk", "Russia", "RU", "RUPRI", 60.3500, 28.6200, "L"), ("Vysotsk", "Russia", "RU", "RUVYS", 60.6275, 28.5736, "M"), ("Vyborg", "Russia", "RU", "RUVYB", 60.7092, 28.7528, "S"), ] for t in baltic: ports.append(p(*t, region="BALTIC") if len(t) == 7 else p(*t)) # ============================================================ # SOUTH EUROPE / MEDITERRANEAN (~250 ports) # ============================================================ seur = [ # Spain ("Barcelona", "Spain", "ES", "ESBCN", 41.3851, 2.1734, "VL"), ("Valencia", "Spain", "ES", "ESVLC", 39.4699, -0.3763, "VL"), ("Algeciras", "Spain", "ES", "ESALG", 36.1275, -5.4434, "VL"), ("Bilbao", "Spain", "ES", "ESBIO", 43.2627, -2.9253, "L"), ("Las Palmas", "Spain", "ES", "ESLPA", 28.1235, -15.4363, "L"), ("Tarragona", "Spain", "ES", "ESTAR", 41.1189, 1.2445, "L"), ("Cartagena", "Spain", "ES", "ESCAR", 37.6000, -0.9864, "L"), ("Vigo", "Spain", "ES", "ESVGO", 42.2406, -8.7207, "L"), ("Gijon", "Spain", "ES", "ESGIJ", 43.5453, -5.6616, "M"), ("Huelva", "Spain", "ES", "ESHUE", 37.2614, -6.9447, "M"), ("Malaga", "Spain", "ES", "ESAGP", 36.7213, -4.4214, "M"), ("Cadiz", "Spain", "ES", "ESCAD", 36.5271, -6.2886, "M"), ("Sevilla", "Spain", "ES", "ESSVQ", 37.3891, -5.9845, "M"), ("A Coruna", "Spain", "ES", "ESLCG", 43.3623, -8.4115, "M"), ("Santander", "Spain", "ES", "ESSDR", 43.4623, -3.8100, "M"), ("Alicante", "Spain", "ES", "ESALC", 38.3452, -0.4810, "M"), ("Castellon", "Spain", "ES", "ESCAS", 39.9864, -0.0513, "M"), ("Ferrol", "Spain", "ES", "ESFER", 43.4843, -8.2328, "M"), ("Pasajes", "Spain", "ES", "ESPAS", 43.3217, -1.9244, "S"), ("Aviles", "Spain", "ES", "ESAVI", 43.5917, -5.9250, "S"), ("Almeria", "Spain", "ES", "ESALM", 36.8340, -2.4637, "S"), ("Motril", "Spain", "ES", "ESMOT", 36.7237, -3.5180, "S"), ("Palma de Mallorca", "Spain", "ES", "ESPMI", 39.5696, 2.6502, "M"), ("Santa Cruz de Tenerife", "Spain", "ES", "ESSCT", 28.4636, -16.2518, "M"), ("Ceuta", "Spain", "ES", "ESCEU", 35.8894, -5.3198, "S"), ("Melilla", "Spain", "ES", "ESMEL", 35.2923, -2.9381, "S"), ("Ibiza", "Spain", "ES", "ESIBZ", 38.9067, 1.4206, "S"), ("Mahon", "Spain", "ES", "ESMAH", 39.8868, 4.2629, "S"), # Italy ("Genoa", "Italy", "IT", "ITGOA", 44.4056, 8.9463, "VL"), ("Trieste", "Italy", "IT", "ITTRS", 45.6495, 13.7768, "L"), ("Gioia Tauro", "Italy", "IT", "ITGIT", 38.4254, 15.8972, "VL"), ("La Spezia", "Italy", "IT", "ITSPE", 44.1024, 9.8240, "L"), ("Livorno", "Italy", "IT", "ITLIV", 43.5485, 10.3106, "L"), ("Naples", "Italy", "IT", "ITNAP", 40.8518, 14.2681, "L"), ("Venice", "Italy", "IT", "ITVCE", 45.4408, 12.3155, "L"), ("Ravenna", "Italy", "IT", "ITRAN", 44.4184, 12.2035, "M"), ("Taranto", "Italy", "IT", "ITTAR", 40.4764, 17.2270, "M"), ("Cagliari", "Italy", "IT", "ITCAG", 39.2238, 9.1217, "M"), ("Palermo", "Italy", "IT", "ITPMO", 38.1157, 13.3615, "M"), ("Catania", "Italy", "IT", "ITCTA", 37.5079, 15.0934, "M"), ("Ancona", "Italy", "IT", "ITAN", 43.6158, 13.5184, "M"), ("Bari", "Italy", "IT", "ITBRI", 41.1171, 16.8719, "M"), ("Brindisi", "Italy", "IT", "ITBDS", 40.6382, 17.9469, "M"), ("Salerno", "Italy", "IT", "ITSAL", 40.6824, 14.7681, "M"), ("Savona", "Italy", "IT", "ITSVN", 44.3091, 8.4772, "M"), ("Augusta", "Italy", "IT", "ITAUG", 37.2307, 15.2216, "L"), ("Olbia", "Italy", "IT", "ITOLB", 40.9226, 9.5015, "S"), ("Civitavecchia", "Italy", "IT", "ITCVV", 42.0928, 11.7868, "M"), ("Messina", "Italy", "IT", "ITMSN", 38.1938, 15.5540, "M"), ("Piombino", "Italy", "IT", "ITPIO", 42.9261, 10.5283, "S"), ("Trapani", "Italy", "IT", "ITTPS", 38.0174, 12.5140, "S"), ("Marina di Carrara", "Italy", "IT", "ITMDC", 44.0400, 10.0400, "S"), ("Monfalcone", "Italy", "IT", "ITMFN", 45.7833, 13.5333, "S"), ("Porto Torres", "Italy", "IT", "ITPTO", 40.8382, 8.4018, "S"), ("Reggio Calabria", "Italy", "IT", "ITREG", 38.1147, 15.6500, "S"), ("Siracusa", "Italy", "IT", "ITSIR", 37.0755, 15.2866, "S"), # Portugal ("Lisbon", "Portugal", "PT", "PTLIS", 38.7223, -9.1393, "L"), ("Sines", "Portugal", "PT", "PTSIN", 37.9514, -8.8700, "L"), ("Leixoes", "Portugal", "PT", "PTLEI", 41.1853, -8.7061, "L"), ("Setubal", "Portugal", "PT", "PTSET", 38.5244, -8.8882, "M"), ("Aveiro", "Portugal", "PT", "PTAVE", 40.6443, -8.6455, "S"), ("Faro", "Portugal", "PT", "PTFAO", 37.0194, -7.9322, "S"), ("Funchal", "Portugal", "PT", "PTFNC", 32.6669, -16.9241, "M"), ("Ponta Delgada", "Portugal", "PT", "PTPDL", 37.7394, -25.6687, "S"), # Greece ("Piraeus", "Greece", "GR", "GRPIR", 37.9475, 23.6370, "VL"), ("Thessaloniki", "Greece", "GR", "GRTHE", 40.6401, 22.9444, "L"), ("Heraklion", "Greece", "GR", "GRHER", 35.3387, 25.1442, "M"), ("Volos", "Greece", "GR", "GRVOL", 39.3666, 22.9507, "M"), ("Patras", "Greece", "GR", "GRPAT", 38.2466, 21.7346, "M"), ("Elefsina", "Greece", "GR", "GRELE", 38.0416, 23.5379, "M"), ("Kavala", "Greece", "GR", "GRKVA", 40.9376, 24.4069, "S"), ("Alexandroupolis", "Greece", "GR", "GRALX", 40.8474, 25.8741, "S"), ("Corfu", "Greece", "GR", "GRCFU", 39.6243, 19.9217, "S"), ("Rhodes", "Greece", "GR", "GRRHO", 36.4510, 28.2278, "S"), ("Chania", "Greece", "GR", "GRCHA", 35.5138, 24.0180, "S"), ("Syros", "Greece", "GR", "GRSYR", 37.4467, 24.9269, "S"), ("Mytilene", "Greece", "GR", "GRMJT", 39.1100, 26.5600, "S"), ("Chios", "Greece", "GR", "GRCHI", 38.3707, 26.1360, "S"), ("Igoumenitsa", "Greece", "GR", "GRIGO", 39.5028, 20.2686, "S"), ("Lavrio", "Greece", "GR", "GRLAV", 37.7114, 24.0542, "S"), ("Agioi Theodoroi", "Greece", "GR", "GRATH", 37.9333, 23.1167, "M"), ("Souda Bay", "Greece", "GR", "GRSUD", 35.4800, 24.0800, "S"), ("Preveza", "Greece", "GR", "GRPVK", 38.9511, 20.7517, "S"), # Turkey (Mediterranean coast) ("Istanbul", "Turkey", "TR", "TRIST", 41.0082, 28.9784, "VL"), ("Mersin", "Turkey", "TR", "TRMER", 36.7991, 34.6332, "VL"), ("Izmir", "Turkey", "TR", "TRIZM", 38.4237, 27.1428, "L"), ("Iskenderun", "Turkey", "TR", "TRISK", 36.5864, 36.1766, "L"), ("Aliaga", "Turkey", "TR", "TRALI", 38.7986, 26.9675, "L"), ("Gemlik", "Turkey", "TR", "TRGEM", 40.4339, 29.1550, "M"), ("Antalya", "Turkey", "TR", "TRANT", 36.8969, 30.7133, "M"), ("Bodrum", "Turkey", "TR", "TRBXN", 37.0343, 27.4305, "S"), ("Marmaris", "Turkey", "TR", "TRMAR", 36.8514, 28.2714, "S"), ("Cesme", "Turkey", "TR", "TRCES", 38.3261, 26.3059, "S"), ("Bandirma", "Turkey", "TR", "TRBAN", 40.3539, 27.9764, "M"), ("Derince", "Turkey", "TR", "TRDER", 40.7569, 29.8183, "M"), ("Tekirdag", "Turkey", "TR", "TRTEK", 40.9781, 27.5117, "M"), # Croatia ("Rijeka", "Croatia", "HR", "HRRJK", 45.3271, 14.4422, "L"), ("Split", "Croatia", "HR", "HRSPU", 43.5081, 16.4402, "M"), ("Ploce", "Croatia", "HR", "HRPLO", 43.0553, 17.4340, "M"), ("Dubrovnik", "Croatia", "HR", "HRDBV", 42.6507, 18.0944, "S"), ("Zadar", "Croatia", "HR", "HRZAD", 44.1194, 15.2314, "S"), ("Sibenik", "Croatia", "HR", "HRSIB", 43.7350, 15.8952, "S"), ("Pula", "Croatia", "HR", "HRPUY", 44.8666, 13.8496, "S"), # Slovenia ("Koper", "Slovenia", "SI", "SIKOP", 45.5469, 13.7294, "L"), # Montenegro ("Bar", "Montenegro", "ME", "MEBAR", 42.0903, 19.1004, "M"), ("Kotor", "Montenegro", "ME", "MEKOT", 42.4247, 18.7712, "S"), # Albania ("Durres", "Albania", "AL", "ALDRZ", 41.3246, 19.4565, "M"), ("Vlore", "Albania", "AL", "ALVLO", 40.4661, 19.4914, "S"), ("Sarande", "Albania", "AL", "ALSRN", 39.8661, 20.0050, "S"), # Malta ("Valletta", "Malta", "MT", "MTMLA", 35.8989, 14.5146, "L"), ("Marsaxlokk", "Malta", "MT", "MTMAR", 35.8420, 14.5430, "L"), # Cyprus ("Limassol", "Cyprus", "CY", "CYLMS", 34.6786, 33.0413, "L"), ("Larnaca", "Cyprus", "CY", "CYLCA", 34.9003, 33.6232, "M"), ("Vassiliko", "Cyprus", "CY", "CYVAS", 34.7239, 33.3264, "M"), # Monaco ("Monaco", "Monaco", "MC", "MCMON", 43.7384, 7.4246, "S"), # Gibraltar ("Gibraltar", "Gibraltar", "GI", "GIGIB", 36.1408, -5.3536, "M"), # France (Mediterranean) ("Marseille", "France", "FR", "FRMRS", 43.2965, 5.3698, "VL"), ("Fos sur Mer", "France", "FR", "FRFOS", 43.4276, 4.9445, "VL"), ("Nice", "France", "FR", "FRNCE", 43.7102, 7.2620, "S"), ("Sete", "France", "FR", "FRSET", 43.4035, 3.6948, "M"), ("Port la Nouvelle", "France", "FR", "FRPLN", 43.0167, 3.0667, "S"), ("Toulon", "France", "FR", "FRTLN", 43.1242, 5.9280, "M"), ("Ajaccio", "France", "FR", "FRAJA", 41.9194, 8.7386, "S"), ("Bastia", "France", "FR", "FRBIA", 42.6973, 9.4530, "S"), ("Port Vendres", "France", "FR", "FRPVD", 42.5182, 3.1051, "S"), ] for t in seur: ports.append(p(*t, region="SEUR") if len(t) == 7 else p(*t)) # ============================================================ # BLACK SEA (~60 ports) # ============================================================ bsea = [ # Turkey — Black Sea coast ("Samsun", "Turkey", "TR", "TRSSM", 41.2867, 36.3300, "L"), ("Trabzon", "Turkey", "TR", "TRTRB", 41.0015, 39.7178, "M"), ("Zonguldak", "Turkey", "TR", "TRZON", 41.4564, 31.7987, "M"), ("Rize", "Turkey", "TR", "TRRIZ", 41.0201, 40.5234, "S"), ("Giresun", "Turkey", "TR", "TRGIR", 40.9128, 38.3895, "S"), ("Ordu", "Turkey", "TR", "TRORD", 41.0000, 37.8833, "S"), ("Sinop", "Turkey", "TR", "TRSIN", 42.0231, 35.1531, "S"), ("Hopa", "Turkey", "TR", "TRHOP", 41.3933, 41.4086, "S"), ("Bartin", "Turkey", "TR", "TRBAR", 41.6811, 32.3375, "S"), ("Filyos", "Turkey", "TR", "TRFIL", 41.5667, 32.0333, "S"), ("Eregli", "Turkey", "TR", "TRERE", 41.2833, 31.4167, "M"), ("Inebolu", "Turkey", "TR", "TRINE", 41.9775, 33.7614, "S"), ("Unye", "Turkey", "TR", "TRUNY", 41.1333, 37.2833, "S"), ("Fatsa", "Turkey", "TR", "TRFAT", 41.0500, 37.5000, "S"), ("Terme", "Turkey", "TR", "TRTER", 41.2083, 36.9750, "S"), ("Akcakoca", "Turkey", "TR", "TRAKC", 41.0833, 31.1167, "S"), # Turkey — Sea of Marmara / straits (Black Sea access) ("Istanbul", "Turkey", "TR", "TRIST", 41.0082, 28.9784, "VL"), ("Ambarli", "Turkey", "TR", "TRAMB", 40.9833, 28.6833, "VL"), ("Derince", "Turkey", "TR", "TRDER", 40.7500, 29.8167, "L"), ("Gemlik", "Turkey", "TR", "TRGEM", 40.4333, 29.1667, "M"), ("Bandirma", "Turkey", "TR", "TRBAN", 40.3522, 27.9736, "M"), ("Tekirdag", "Turkey", "TR", "TRTEK", 40.9833, 27.5000, "M"), # Russia — Black Sea ("Novorossiysk", "Russia", "RU", "RUNVS", 44.7237, 37.7687, "VL"), ("Tuapse", "Russia", "RU", "RUTUA", 44.1007, 39.0710, "M"), ("Taman", "Russia", "RU", "RUTAM", 45.2167, 36.7167, "L"), ("Kavkaz", "Russia", "RU", "RUKAV", 45.3500, 36.6500, "L"), ("Sochi", "Russia", "RU", "RUSOC", 43.5855, 39.7231, "S"), ("Temryuk", "Russia", "RU", "RUTEM", 45.2833, 37.3833, "M"), ("Gelendzhik", "Russia", "RU", "RUGEL", 44.5617, 38.0767, "S"), ("Anapa", "Russia", "RU", "RUANP", 44.8944, 37.3167, "S"), # Ukraine ("Odessa", "Ukraine", "UA", "UAODS", 46.4843, 30.7326, "VL"), ("Mykolaiv", "Ukraine", "UA", "UAMYK", 46.9750, 31.9946, "L"), ("Kherson", "Ukraine", "UA", "UAKHE", 46.6354, 32.6169, "M"), ("Izmail", "Ukraine", "UA", "UAIZM", 45.3500, 28.8333, "M"), ("Chornomorsk", "Ukraine", "UA", "UACHR", 46.2917, 30.6533, "L"), ("Yuzhny", "Ukraine", "UA", "UAYUZ", 46.6167, 31.0833, "VL"), ("Mariupol", "Ukraine", "UA", "UAMAR", 47.0958, 37.5483, "L"), ("Berdyansk", "Ukraine", "UA", "UABER", 46.7500, 36.8000, "M"), ("Reni", "Ukraine", "UA", "UAREN", 45.4500, 28.2833, "S"), ("Ust-Dunaisk", "Ukraine", "UA", "UAUSD", 45.4333, 29.7500, "S"), ("Kiliya", "Ukraine", "UA", "UAKIL", 45.4500, 29.2667, "S"), ("Skadovsk", "Ukraine", "UA", "UASKA", 46.1167, 32.9167, "S"), # Romania ("Constanta", "Romania", "RO", "ROCND", 44.1598, 28.6348, "VL"), ("Mangalia", "Romania", "RO", "ROMAN", 43.8000, 28.5833, "M"), ("Galati", "Romania", "RO", "ROGAL", 45.4353, 28.0080, "L"), ("Braila", "Romania", "RO", "ROBRA", 45.2692, 27.9575, "M"), ("Sulina", "Romania", "RO", "ROSUL", 45.1500, 29.6500, "S"), ("Tulcea", "Romania", "RO", "ROTUL", 45.1667, 28.8000, "S"), ("Midia", "Romania", "RO", "ROMID", 44.3167, 28.7000, "M"), # Bulgaria ("Varna", "Bulgaria", "BG", "BGVAR", 43.2141, 27.9147, "L"), ("Burgas", "Bulgaria", "BG", "BGBOJ", 42.4875, 27.4728, "L"), ("Nesebar", "Bulgaria", "BG", "BGNES", 42.6592, 27.7356, "S"), ("Balchik", "Bulgaria", "BG", "BGBAL", 43.4167, 28.1667, "S"), # Georgia ("Batumi", "Georgia", "GE", "GEBUS", 41.6168, 41.6367, "L"), ("Poti", "Georgia", "GE", "GEPTI", 42.1500, 41.6667, "L"), ("Supsa", "Georgia", "GE", "GESUP", 42.0000, 41.7833, "M"), ("Kulevi", "Georgia", "GE", "GEKUL", 42.2000, 41.6833, "M"), ("Anaklia", "Georgia", "GE", "GEANA", 42.3833, 41.5833, "S"), ] for t in bsea: ports.append(p(*t, region="BSEA") if len(t) == 7 else p(*t)) # ============================================================ # EAST & SOUTHEAST ASIA (~600 ports) # ============================================================ easia = [ # ---- CHINA (~250 ports) ---- # Major hub ports ("Shanghai", "China", "CN", "CNSHA", 31.2304, 121.4737, "VL"), ("Ningbo-Zhoushan", "China", "CN", "CNNGB", 29.8683, 121.5440, "VL"), ("Shenzhen", "China", "CN", "CNSZX", 22.5431, 114.0579, "VL"), ("Guangzhou", "China", "CN", "CNGZG", 23.1291, 113.2644, "VL"), ("Qingdao", "China", "CN", "CNTAO", 36.0671, 120.3826, "VL"), ("Tianjin", "China", "CN", "CNTSN", 38.9860, 117.7280, "VL"), ("Dalian", "China", "CN", "CNDLC", 38.9140, 121.6147, "VL"), ("Xiamen", "China", "CN", "CNXMN", 24.4798, 118.0894, "VL"), ("Rizhao", "China", "CN", "CNRZH", 35.4164, 119.5269, "L"), ("Yingkou", "China", "CN", "CNYKW", 40.6650, 122.2350, "L"), ("Lianyungang", "China", "CN", "CNLYG", 34.5900, 119.2200, "L"), ("Nanjing", "China", "CN", "CNNKG", 32.0603, 118.7969, "VL"), ("Zhanjiang", "China", "CN", "CNZJG", 21.2707, 110.3594, "L"), ("Yantai", "China", "CN", "CNYNT", 37.4638, 121.4479, "L"), ("Weihai", "China", "CN", "CNWEI", 37.5097, 122.1200, "M"), ("Fuzhou", "China", "CN", "CNFOC", 26.0745, 119.2965, "L"), ("Quanzhou", "China", "CN", "CNQZJ", 24.8741, 118.6757, "L"), ("Wenzhou", "China", "CN", "CNWNZ", 28.0195, 120.6435, "M"), ("Taizhou", "China", "CN", "CNTAZ", 28.6583, 121.4200, "M"), ("Jiaxing", "China", "CN", "CNJXN", 30.7467, 120.7500, "M"), ("Nantong", "China", "CN", "CNNTG", 32.0167, 120.8500, "L"), ("Zhenjiang", "China", "CN", "CNZJG", 32.2044, 119.4550, "M"), ("Changzhou", "China", "CN", "CNCGZ", 31.8100, 119.9700, "M"), ("Huizhou", "China", "CN", "CNHUZ", 22.7872, 114.3960, "M"), ("Dongguan", "China", "CN", "CNDGG", 23.0208, 113.7518, "L"), ("Zhongshan", "China", "CN", "CNZSN", 22.5176, 113.3929, "M"), ("Zhuhai", "China", "CN", "CNZUH", 22.2710, 113.5767, "M"), ("Maoming", "China", "CN", "CNMMG", 21.6618, 110.9178, "M"), ("Beihai", "China", "CN", "CNBHY", 21.4734, 109.1000, "M"), ("Fangchenggang", "China", "CN", "CNFCG", 21.6143, 108.3450, "L"), ("Qinzhou", "China", "CN", "CNQZH", 21.9500, 108.6170, "L"), ("Haikou", "China", "CN", "CNHAK", 20.0174, 110.3492, "L"), ("Sanya", "China", "CN", "CNSYA", 18.2528, 109.5020, "M"), ("Yangpu", "China", "CN", "CNYPU", 19.7000, 109.1333, "L"), ("Dandong", "China", "CN", "CNDDG", 39.9842, 124.3950, "M"), ("Jinzhou", "China", "CN", "CNJZH", 41.1080, 121.1270, "M"), ("Huludao", "China", "CN", "CNHLD", 40.7450, 120.8370, "M"), ("Tangshan", "China", "CN", "CNTGS", 39.3167, 119.1500, "L"), ("Caofeidian", "China", "CN", "CNCFD", 39.2000, 118.5167, "VL"), ("Cangzhou", "China", "CN", "CNCZX", 38.3100, 117.3600, "M"), ("Weifang", "China", "CN", "CNWEF", 36.9000, 119.0500, "M"), ("Binzhou", "China", "CN", "CNBZH", 37.8167, 118.0167, "M"), ("Dongying", "China", "CN", "CNDYG", 37.4614, 118.6747, "M"), ("Longkou", "China", "CN", "CNLKU", 37.6500, 120.3167, "M"), ("Penglai", "China", "CN", "CNPLJ", 37.8167, 120.7500, "S"), ("Laizhou", "China", "CN", "CNLZH", 37.1833, 119.9333, "S"), ("Wuhan", "China", "CN", "CNWUH", 30.5928, 114.3055, "L"), ("Chongqing", "China", "CN", "CNCKG", 29.4316, 106.9123, "L"), ("Yichang", "China", "CN", "CNYCH", 30.7000, 111.2833, "M"), ("Wuhu", "China", "CN", "CNWHU", 31.3346, 118.3622, "M"), ("Anqing", "China", "CN", "CNAQG", 30.5088, 117.0469, "M"), ("Jiujiang", "China", "CN", "CNJIU", 29.7050, 116.0019, "M"), ("Maanshan", "China", "CN", "CNMAS", 31.6700, 118.5100, "M"), ("Tongling", "China", "CN", "CNTOL", 30.9500, 117.8100, "S"), ("Chizhou", "China", "CN", "CNCZH", 30.6600, 117.4900, "S"), ("Taizhou Jiangsu", "China", "CN", "CNTZJ", 32.4500, 119.9200, "M"), ("Yangzhou", "China", "CN", "CNYUZ", 32.3940, 119.4356, "M"), ("Suzhou", "China", "CN", "CNSZV", 31.2990, 120.5853, "L"), ("Jiangyin", "China", "CN", "CNJIY", 31.9200, 120.2630, "L"), ("Zhangjiagang", "China", "CN", "CNZJG", 31.8750, 120.5500, "L"), ("Changshu", "China", "CN", "CNCGS", 31.6500, 120.7500, "M"), ("Taicang", "China", "CN", "CNTCG", 31.4500, 121.1000, "L"), ("Rugao", "China", "CN", "CNRGG", 32.3900, 120.5600, "S"), ("Haimen", "China", "CN", "CNHMN", 31.8700, 121.1500, "S"), ("Jingjiang", "China", "CN", "CNJJG", 32.0167, 120.2667, "M"), ("Shantou", "China", "CN", "CNSTW", 23.3535, 116.6816, "L"), ("Chaozhou", "China", "CN", "CNCZO", 23.6567, 116.6225, "S"), ("Jieyang", "China", "CN", "CNJEY", 23.5500, 116.3667, "S"), ("Shanwei", "China", "CN", "CNSWI", 22.7833, 115.3500, "S"), ("Yangjiang", "China", "CN", "CNYAG", 21.8600, 111.9700, "S"), ("Jiangmen", "China", "CN", "CNJMN", 22.5833, 113.0833, "M"), ("Foshan", "China", "CN", "CNFSH", 23.0292, 113.1056, "M"), ("Nansha", "China", "CN", "CNNSA", 22.7500, 113.6000, "VL"), ("Shekou", "China", "CN", "CNSHK", 22.4833, 113.9167, "VL"), ("Yantian", "China", "CN", "CNYTN", 22.5833, 114.2333, "VL"), ("Chiwan", "China", "CN", "CNCWN", 22.4667, 113.9000, "L"), ("Dachan Bay", "China", "CN", "CNDCB", 22.4167, 113.8167, "L"), ("Putian", "China", "CN", "CNPUT", 25.4333, 119.0167, "M"), ("Ningde", "China", "CN", "CNNDE", 26.6500, 119.5333, "M"), ("Sansha", "China", "CN", "CNSNS", 26.4833, 119.9333, "S"), ("Luoyuan", "China", "CN", "CNLYU", 26.4833, 119.6500, "S"), ("Meizhou Bay", "China", "CN", "CNMZB", 25.1167, 118.9667, "L"), ("Yueyang", "China", "CN", "CNYYX", 29.3775, 113.0933, "M"), ("Changsha", "China", "CN", "CNCSV", 28.1926, 112.9722, "M"), ("Zhoushan", "China", "CN", "CNZOS", 30.0000, 122.1000, "L"), ("Wenling", "China", "CN", "CNWEL", 28.3700, 121.3700, "S"), ("Linhai", "China", "CN", "CNLHI", 28.8500, 121.1200, "S"), ("Yuhuan", "China", "CN", "CNYHU", 28.1333, 121.2333, "S"), ("Haifeng", "China", "CN", "CNHFE", 22.9667, 115.3333, "S"), ("Lufeng", "China", "CN", "CNLUF", 22.9667, 115.6500, "S"), ("Wuzhou", "China", "CN", "CNWUZ", 23.4833, 111.3167, "M"), ("Guigang", "China", "CN", "CNGUG", 23.1000, 109.6000, "M"), ("Nanning", "China", "CN", "CNNNG", 22.8167, 108.3167, "M"), ("Liuzhou", "China", "CN", "CNLZW", 24.3261, 109.4281, "S"), ("Zhaoqing", "China", "CN", "CNZQG", 23.0500, 112.4500, "S"), ("Qingyuan", "China", "CN", "CNQYN", 23.6833, 113.0500, "S"), ("Shaoguan", "China", "CN", "CNSGE", 24.8000, 113.5833, "S"), ("Heyuan", "China", "CN", "CNHEY", 23.7333, 114.6833, "S"), ("Luzhou", "China", "CN", "CNLZV", 28.8717, 105.4425, "M"), ("Yibin", "China", "CN", "CNYBP", 28.7597, 104.6300, "M"), ("Jingzhou", "China", "CN", "CNJGZ", 30.3267, 112.2041, "M"), ("Shashi", "China", "CN", "CNSHA", 30.3000, 112.2500, "S"), ("Huangshi", "China", "CN", "CNHSG", 30.2017, 115.0417, "M"), ("Ezhou", "China", "CN", "CNEZH", 30.3917, 114.8833, "S"), ("Huanggang", "China", "CN", "CNHGG", 30.4500, 114.8833, "S"), ("Xuzhou", "China", "CN", "CNXUZ", 34.2617, 117.1856, "M"), ("Huainan", "China", "CN", "CNHNA", 32.6167, 116.9833, "S"), ("Bengbu", "China", "CN", "CNBBG", 32.9167, 117.3833, "M"), ("Hefei", "China", "CN", "CNHFE", 31.8206, 117.2272, "M"), ("Yueqing", "China", "CN", "CNYUQ", 28.1167, 120.9833, "S"), ("Ruian", "China", "CN", "CNRAN", 27.7833, 120.6500, "S"), ("Cangnan", "China", "CN", "CNCNN", 27.5167, 120.4167, "S"), ("Pingyang", "China", "CN", "CNPYG", 27.6667, 120.5667, "S"), ("Pinghu", "China", "CN", "CNPHU", 30.6833, 121.0167, "S"), ("Haiyan", "China", "CN", "CNHYN", 30.5333, 120.9500, "S"), ("Tongxiang", "China", "CN", "CNTXG", 30.6333, 120.5500, "S"), ("Jiashan", "China", "CN", "CNJSN", 30.8500, 120.9167, "S"), ("Shaoxing", "China", "CN", "CNSHX", 30.0000, 120.5833, "M"), ("Shangyu", "China", "CN", "CNSGY", 30.0167, 120.8500, "S"), ("Cixi", "China", "CN", "CNCXI", 30.1667, 121.2333, "M"), ("Yuyao", "China", "CN", "CNYUY", 30.0333, 121.1500, "S"), ("Fenghua", "China", "CN", "CNFHG", 29.6500, 121.4000, "S"), ("Xiangshan", "China", "CN", "CNXSG", 29.4833, 121.8667, "S"), ("Sanmen", "China", "CN", "CNSMN", 29.1167, 121.4000, "S"), ("Lanshan", "China", "CN", "CNLSN", 35.1167, 119.3167, "M"), ("Shidao", "China", "CN", "CNSDO", 36.8833, 122.4167, "M"), ("Rushan", "China", "CN", "CNRSN", 36.9000, 121.5333, "S"), ("Wendeng", "China", "CN", "CNWDG", 37.1833, 122.0500, "S"), ("Rongcheng", "China", "CN", "CNRCG", 37.1667, 122.4167, "S"), ("Shouguang", "China", "CN", "CNSHG", 36.8833, 118.7500, "S"), ("Laixi", "China", "CN", "CNLXI", 36.8600, 120.5300, "S"), ("Jiaozhou", "China", "CN", "CNJZW", 36.2833, 120.0000, "M"), ("Haiyang", "China", "CN", "CNHYG", 36.7667, 121.1667, "S"), ("Pingtan", "China", "CN", "CNPTN", 25.5000, 119.7833, "M"), ("Zhangzhou", "China", "CN", "CNZZU", 24.5100, 117.6500, "M"), ("Longhai", "China", "CN", "CNLHI", 24.4500, 117.8167, "S"), ("Dongshan", "China", "CN", "CNDOS", 23.7000, 117.5333, "S"), ("Shijiu", "China", "CN", "CNSJU", 24.3667, 117.9667, "S"), ("Gulei", "China", "CN", "CNGUL", 23.8500, 117.6167, "L"), ("Chaoyang", "China", "CN", "CNCYG", 23.2833, 116.5833, "S"), ("Huidong", "China", "CN", "CNHDT", 22.9833, 114.7167, "S"), ("Daya Bay", "China", "CN", "CNDYB", 22.6833, 114.5333, "L"), ("Zhanjiang Port", "China", "CN", "CNZJP", 21.1833, 110.3833, "L"), ("Xuwen", "China", "CN", "CNXWN", 20.3333, 110.1833, "S"), ("Leizhou", "China", "CN", "CNLZR", 20.9167, 110.0667, "S"), ("Dianbai", "China", "CN", "CNDBI", 21.5167, 111.0000, "S"), ("Taishan", "China", "CN", "CNTSH", 22.2500, 112.7833, "S"), ("Enping", "China", "CN", "CNEPG", 22.1833, 112.3167, "S"), ("Kaiping", "China", "CN", "CNKPG", 22.3833, 112.5333, "S"), ("Heshan", "China", "CN", "CNHSN", 22.7667, 112.9667, "S"), ("Sanshui", "China", "CN", "CNSSW", 23.1667, 112.8500, "S"), ("Yingde", "China", "CN", "CNYDE", 24.1833, 113.4000, "S"), ("Basuo", "China", "CN", "CNBSU", 19.0973, 108.6189, "M"), ("Chengmai", "China", "CN", "CNCMI", 19.7500, 109.5833, "S"), ("Wenchang", "China", "CN", "CNWCG", 19.6167, 110.7500, "S"), ("Wanning", "China", "CN", "CNWNG", 18.7833, 110.4000, "S"), ("Lingshui", "China", "CN", "CNLSW", 18.5000, 110.0333, "S"), ("Ledong", "China", "CN", "CNLDO", 18.7333, 108.8333, "S"), ("Changjiang", "China", "CN", "CNCJG", 19.3000, 109.0333, "S"), ("Yantai Port", "China", "CN", "CNYTP", 37.5500, 121.3833, "L"), ("Qingdao Dongjiakou", "China", "CN", "CNDJK", 35.7833, 119.9667, "VL"), ("Bayuquan", "China", "CN", "CNBYQ", 40.2833, 122.1167, "L"), ("Panjin", "China", "CN", "CNPJN", 41.1200, 122.0700, "M"), ("Xingcheng", "China", "CN", "CNXCG", 40.6167, 120.7333, "S"), ("Qinhuangdao", "China", "CN", "CNQHD", 39.9354, 119.5977, "VL"), ("Huanghua", "China", "CN", "CNHHG", 38.3667, 117.3500, "L"), ("Kenli", "China", "CN", "CNKLI", 37.5833, 118.5500, "S"), ("Wudi", "China", "CN", "CNWDI", 37.9167, 117.8500, "S"), ("Zhaoyuan", "China", "CN", "CNZYR", 37.3667, 120.4000, "S"), ("Zhifu", "China", "CN", "CNZFU", 37.5500, 121.4000, "M"), ("Weigang", "China", "CN", "CNWGG", 33.9500, 120.2500, "M"), ("Dafeng", "China", "CN", "CNDFE", 33.2000, 120.4667, "M"), ("Rudong", "China", "CN", "CNRDG", 32.3167, 121.1833, "M"), ("Qidong", "China", "CN", "CNQDG", 31.8167, 121.6500, "M"), ("Luojing", "China", "CN", "CNLJG", 31.4000, 121.4167, "L"), ("Waigaoqiao", "China", "CN", "CNWGQ", 31.3667, 121.5833, "VL"), ("Yangshan", "China", "CN", "CNYSG", 30.6167, 122.0833, "VL"), # ---- JAPAN (~100 ports) ---- ("Tokyo", "Japan", "JP", "JPTYO", 35.6528, 139.8396, "VL"), ("Yokohama", "Japan", "JP", "JPYOK", 35.4437, 139.6380, "VL"), ("Kobe", "Japan", "JP", "JPUKB", 34.6851, 135.1955, "VL"), ("Osaka", "Japan", "JP", "JPOSA", 34.6551, 135.4220, "VL"), ("Nagoya", "Japan", "JP", "JPNGO", 35.0820, 136.8850, "VL"), ("Chiba", "Japan", "JP", "JPCHI", 35.5700, 140.1000, "VL"), ("Kawasaki", "Japan", "JP", "JPKWZ", 35.5107, 139.7350, "L"), ("Kitakyushu", "Japan", "JP", "JPKKJ", 33.9500, 130.9667, "L"), ("Hakata", "Japan", "JP", "JPHKT", 33.6000, 130.4000, "L"), ("Shimizu", "Japan", "JP", "JPSMZ", 35.0167, 138.5000, "M"), ("Mizushima", "Japan", "JP", "JPMZS", 34.5000, 133.7333, "L"), ("Sakai", "Japan", "JP", "JPSKH", 34.5667, 135.4667, "L"), ("Kashima", "Japan", "JP", "JPKSM", 35.9500, 140.7000, "L"), ("Wakayama", "Japan", "JP", "JPWKJ", 34.2167, 135.1500, "M"), ("Tokuyama", "Japan", "JP", "JPTKY", 34.0500, 131.8000, "M"), ("Oita", "Japan", "JP", "JPOIT", 33.2500, 131.6333, "M"), ("Muroran", "Japan", "JP", "JPMUR", 42.3333, 140.9667, "M"), ("Tomakomai", "Japan", "JP", "JPTMK", 42.6333, 141.6333, "L"), ("Niigata", "Japan", "JP", "JPNII", 37.9500, 139.0500, "L"), ("Sendai-Shiogama", "Japan", "JP", "JPSDJ", 38.2667, 141.0167, "L"), ("Akita", "Japan", "JP", "JPAKT", 39.7500, 140.0833, "M"), ("Naoetsu", "Japan", "JP", "JPNAO", 37.1833, 138.2333, "M"), ("Fushiki-Toyama", "Japan", "JP", "JPFSH", 36.7833, 137.0667, "M"), ("Maizuru", "Japan", "JP", "JPMAI", 35.4833, 135.3833, "M"), ("Tsuruga", "Japan", "JP", "JPTRU", 35.6500, 136.0667, "M"), ("Hiroshima", "Japan", "JP", "JPHIJ", 34.3500, 132.4667, "M"), ("Kure", "Japan", "JP", "JPKRE", 34.2333, 132.5667, "M"), ("Imabari", "Japan", "JP", "JPIMB", 34.0667, 133.0167, "M"), ("Matsuyama", "Japan", "JP", "JPMYJ", 33.8500, 132.7833, "M"), ("Takamatsu", "Japan", "JP", "JPTAM", 34.3500, 134.0667, "M"), ("Tokushima", "Japan", "JP", "JPTKS", 34.0667, 134.5667, "M"), ("Kochi", "Japan", "JP", "JPKCZ", 33.5333, 133.5667, "M"), ("Sasebo", "Japan", "JP", "JPSSB", 33.1583, 129.7167, "M"), ("Nagasaki", "Japan", "JP", "JPNGS", 32.7667, 129.8667, "M"), ("Kagoshima", "Japan", "JP", "JPKOJ", 31.5833, 130.5500, "M"), ("Naha", "Japan", "JP", "JPNAH", 26.2167, 127.6667, "M"), ("Yokkaichi", "Japan", "JP", "JPYKK", 34.9667, 136.6333, "L"), ("Kinuura", "Japan", "JP", "JPKNU", 34.7833, 136.9500, "M"), ("Tahara", "Japan", "JP", "JPTAR", 34.6000, 137.1833, "M"), ("Mikawa", "Japan", "JP", "JPMKW", 34.7500, 137.2000, "M"), ("Himeji", "Japan", "JP", "JPHMJ", 34.7833, 134.6500, "M"), ("Matsumoto", "Japan", "JP", "JPMAT", 34.0833, 131.5833, "S"), ("Ube", "Japan", "JP", "JPUBE", 33.9500, 131.2667, "M"), ("Shimonoseki", "Japan", "JP", "JPSMS", 33.9500, 130.9500, "M"), ("Iwakuni", "Japan", "JP", "JPIWK", 34.1667, 132.2167, "S"), ("Onomichi", "Japan", "JP", "JPONO", 34.4000, 133.2000, "M"), ("Fukuyama", "Japan", "JP", "JPFKY", 34.4833, 133.3833, "M"), ("Innoshima", "Japan", "JP", "JPINN", 34.3000, 133.1667, "S"), ("Takehara", "Japan", "JP", "JPTKR", 34.3333, 132.9167, "S"), ("Shibushi", "Japan", "JP", "JPSBH", 31.4833, 131.1000, "M"), ("Hososhima", "Japan", "JP", "JPHSM", 32.4167, 131.6667, "M"), ("Onahama", "Japan", "JP", "JPONH", 36.9333, 140.9167, "M"), ("Hachinohe", "Japan", "JP", "JPHHE", 40.5167, 141.5333, "M"), ("Aomori", "Japan", "JP", "JPAOM", 40.8167, 140.7500, "M"), ("Otaru", "Japan", "JP", "JPOTR", 43.1833, 140.9667, "M"), ("Kushiro", "Japan", "JP", "JPKUS", 42.9667, 144.3833, "M"), ("Rumoi", "Japan", "JP", "JPRMO", 43.9333, 141.6333, "S"), ("Wakkanai", "Japan", "JP", "JPWKN", 45.4000, 141.6833, "S"), ("Ishikari", "Japan", "JP", "JPISK", 43.2500, 141.3167, "M"), ("Abashiri", "Japan", "JP", "JPABS", 44.0167, 144.2833, "S"), ("Nemuro", "Japan", "JP", "JPNEM", 43.3333, 145.5833, "S"), ("Sakata", "Japan", "JP", "JPSKT", 38.9167, 139.8500, "M"), ("Noshiro", "Japan", "JP", "JPNSR", 40.2000, 140.0167, "S"), ("Ishinomaki", "Japan", "JP", "JPISM", 38.4333, 141.3000, "M"), ("Soma", "Japan", "JP", "JPSMA", 37.8333, 140.9667, "S"), ("Hitachi", "Japan", "JP", "JPHIT", 36.5667, 140.6500, "M"), ("Kisarazu", "Japan", "JP", "JPKSZ", 35.3833, 139.9167, "M"), ("Tateyama", "Japan", "JP", "JPTTY", 34.9833, 139.8667, "S"), ("Shimoda", "Japan", "JP", "JPSMX", 34.6667, 138.9500, "S"), ("Tagonoura", "Japan", "JP", "JPTAG", 35.1167, 138.6833, "M"), ("Numazu", "Japan", "JP", "JPNMZ", 35.1000, 138.8667, "S"), ("Owase", "Japan", "JP", "JPOWS", 34.0667, 136.2167, "S"), ("Toba", "Japan", "JP", "JPTOB", 34.4833, 136.8500, "S"), ("Tsukumi", "Japan", "JP", "JPTSU", 33.0667, 131.8667, "S"), ("Usuki", "Japan", "JP", "JPUSK", 33.1167, 131.8000, "S"), ("Miike", "Japan", "JP", "JPMII", 33.0333, 130.4167, "M"), ("Misumi", "Japan", "JP", "JPMIS", 32.6167, 130.4500, "S"), ("Yatsushiro", "Japan", "JP", "JPYAT", 32.5000, 130.6000, "S"), ("Aburatsu", "Japan", "JP", "JPABR", 31.5833, 131.4167, "M"), ("Naze", "Japan", "JP", "JPNZE", 28.3833, 129.5000, "S"), ("Ishigaki", "Japan", "JP", "JPISG", 24.3333, 124.1500, "S"), ("Miyako", "Japan", "JP", "JPMYK", 39.6333, 141.9667, "S"), ("Kamaishi", "Japan", "JP", "JPKMS", 39.2833, 141.8833, "M"), ("Ofunato", "Japan", "JP", "JPOFN", 39.0667, 141.7167, "S"), ("Kesennuma", "Japan", "JP", "JPKSN", 38.9000, 141.5667, "S"), ("Kanazawa", "Japan", "JP", "JPKNZ", 36.6167, 136.6333, "M"), ("Nanao", "Japan", "JP", "JPNNA", 37.0500, 136.9667, "S"), ("Sakai Port", "Japan", "JP", "JPSKP", 36.1333, 135.8500, "S"), ("Hamada", "Japan", "JP", "JPHAM", 34.9000, 132.0833, "S"), ("Sakaiminato", "Japan", "JP", "JPSMN", 35.5500, 133.2333, "M"), # ---- SOUTH KOREA (~50 ports) ---- ("Busan", "South Korea", "KR", "KRPUS", 35.1028, 129.0403, "VL"), ("Incheon", "South Korea", "KR", "KRICN", 37.4563, 126.7052, "VL"), ("Ulsan", "South Korea", "KR", "KRUSN", 35.5384, 129.3114, "VL"), ("Gwangyang", "South Korea", "KR", "KRKWN", 34.9167, 127.7000, "VL"), ("Pyeongtaek", "South Korea", "KR", "KRPTK", 36.9667, 126.8333, "L"), ("Masan", "South Korea", "KR", "KRMSN", 35.1833, 128.5667, "L"), ("Mokpo", "South Korea", "KR", "KRMOK", 34.7833, 126.3833, "M"), ("Gunsan", "South Korea", "KR", "KRKSN", 35.9833, 126.7167, "M"), ("Donghae", "South Korea", "KR", "KRDHE", 37.5000, 129.1167, "M"), ("Pohang", "South Korea", "KR", "KRPHN", 36.0333, 129.3667, "L"), ("Yeosu", "South Korea", "KR", "KRYOS", 34.7500, 127.7500, "L"), ("Daesan", "South Korea", "KR", "KRDAS", 36.9500, 126.3500, "L"), ("Jeju", "South Korea", "KR", "KRJEJ", 33.5167, 126.5333, "M"), ("Samcheonpo", "South Korea", "KR", "KRSCP", 34.9333, 128.0667, "S"), ("Tongyeong", "South Korea", "KR", "KRTYG", 34.8333, 128.4167, "S"), ("Jinhae", "South Korea", "KR", "KRJHE", 35.1500, 128.6833, "M"), ("Sokcho", "South Korea", "KR", "KRSHO", 38.2000, 128.5833, "S"), ("Samcheok", "South Korea", "KR", "KRSCK", 37.4500, 129.1667, "S"), ("Mukho", "South Korea", "KR", "KRMKH", 37.5500, 129.1167, "M"), ("Okpo", "South Korea", "KR", "KROKP", 34.6167, 128.7167, "M"), ("Geoje", "South Korea", "KR", "KRGOJ", 34.8833, 128.6833, "M"), ("Taean", "South Korea", "KR", "KRTAN", 36.7333, 126.2833, "M"), ("Boryeong", "South Korea", "KR", "KRBOR", 36.3333, 126.5000, "S"), ("Wando", "South Korea", "KR", "KRWND", 34.3167, 126.7500, "S"), ("Yongan", "South Korea", "KR", "KRYON", 34.7667, 127.6000, "S"), ("Jangheung", "South Korea", "KR", "KRJHG", 34.6833, 126.9167, "S"), ("Seogwipo", "South Korea", "KR", "KRSOG", 33.2500, 126.5500, "S"), ("Onsan", "South Korea", "KR", "KRONX", 35.4333, 129.3667, "L"), ("Dangjin", "South Korea", "KR", "KRDJN", 36.8833, 126.6333, "M"), ("Hadong", "South Korea", "KR", "KRHDG", 35.0500, 127.7833, "S"), ("Sacheon", "South Korea", "KR", "KRSAE", 35.0000, 128.1000, "S"), ("Goheung", "South Korea", "KR", "KRGHG", 34.6000, 127.2833, "S"), ("Janghang", "South Korea", "KR", "KRJHP", 36.0167, 126.6833, "S"), ("Buan", "South Korea", "KR", "KRBUA", 35.7333, 126.7167, "S"), ("Seocheon", "South Korea", "KR", "KRSEO", 36.0667, 126.7000, "S"), ("Heungnam", "South Korea", "KR", "KRHNG", 39.8333, 127.6167, "S"), ("Goseong", "South Korea", "KR", "KRGSG", 34.9667, 128.3167, "S"), ("Jangseungpo", "South Korea", "KR", "KRJSP", 34.8500, 128.7000, "S"), # ---- TAIWAN (~25 ports) ---- ("Kaohsiung", "Taiwan", "TW", "TWKHH", 22.6146, 120.2975, "VL"), ("Keelung", "Taiwan", "TW", "TWKEL", 25.1333, 121.7500, "VL"), ("Taichung", "Taiwan", "TW", "TWTXG", 24.2833, 120.5167, "L"), ("Hualien", "Taiwan", "TW", "TWHUA", 23.9833, 121.6167, "M"), ("Taipei Port", "Taiwan", "TW", "TWTPE", 25.1667, 121.4000, "L"), ("Mailiao", "Taiwan", "TW", "TWMLI", 23.7833, 120.1833, "L"), ("Suao", "Taiwan", "TW", "TWSUO", 24.5833, 121.8667, "M"), ("Anping", "Taiwan", "TW", "TWANP", 22.9833, 120.1500, "M"), ("Taitung", "Taiwan", "TW", "TWTTT", 22.7500, 121.1500, "S"), ("Penghu", "Taiwan", "TW", "TWMZG", 23.5667, 119.5667, "S"), ("Kinmen", "Taiwan", "TW", "TWKNM", 24.4500, 118.3833, "S"), ("Hsinchu", "Taiwan", "TW", "TWHSC", 24.8500, 120.9167, "M"), ("Tainan", "Taiwan", "TW", "TWTNN", 23.0000, 120.1667, "M"), ("Budai", "Taiwan", "TW", "TWBUD", 23.3833, 120.1667, "S"), ("Donggang", "Taiwan", "TW", "TWDGN", 22.4667, 120.4333, "S"), ("Longde", "Taiwan", "TW", "TWLGD", 22.5833, 120.3833, "S"), ("Houbihu", "Taiwan", "TW", "TWHBH", 21.9500, 120.7500, "S"), ("Shalu", "Taiwan", "TW", "TWSHL", 24.2500, 120.5333, "S"), ("Wuqi", "Taiwan", "TW", "TWWQI", 24.2833, 120.5000, "M"), ("Shenao", "Taiwan", "TW", "TWSAO", 25.1167, 121.8167, "S"), ("Daan", "Taiwan", "TW", "TWDAN", 24.3667, 120.5833, "S"), # ---- VIETNAM (~30 ports) ---- ("Ho Chi Minh City", "Vietnam", "VN", "VNSGN", 10.7626, 106.6602, "VL"), ("Cat Lai", "Vietnam", "VN", "VNCLI", 10.7500, 106.7500, "VL"), ("Hai Phong", "Vietnam", "VN", "VNHPH", 20.8449, 106.6881, "VL"), ("Da Nang", "Vietnam", "VN", "VNDAD", 16.0678, 108.2208, "L"), ("Vung Tau", "Vietnam", "VN", "VNVUT", 10.3500, 107.0833, "L"), ("Quy Nhon", "Vietnam", "VN", "VNQUI", 13.7622, 109.2333, "M"), ("Nha Trang", "Vietnam", "VN", "VNNHA", 12.2388, 109.1967, "M"), ("Cam Ranh", "Vietnam", "VN", "VNCRA", 11.9167, 109.1500, "M"), ("Can Tho", "Vietnam", "VN", "VNCTH", 10.0452, 105.7469, "M"), ("Long An", "Vietnam", "VN", "VNLAN", 10.5333, 106.4167, "M"), ("Phu My", "Vietnam", "VN", "VNPMY", 10.5500, 107.0167, "L"), ("Cai Mep", "Vietnam", "VN", "VNCMT", 10.5167, 107.0333, "VL"), ("Nghi Son", "Vietnam", "VN", "VNNGS", 19.3167, 105.8500, "M"), ("Chan May", "Vietnam", "VN", "VNCMY", 16.3333, 108.0167, "M"), ("Dung Quat", "Vietnam", "VN", "VNDQT", 15.4167, 108.7833, "L"), ("Vinh", "Vietnam", "VN", "VNVIN", 18.6667, 105.6833, "S"), ("Hon La", "Vietnam", "VN", "VNHLA", 17.8833, 106.5500, "S"), ("Sa Dec", "Vietnam", "VN", "VNSDC", 10.2900, 105.7500, "S"), ("My Tho", "Vietnam", "VN", "VNMTH", 10.3500, 106.3500, "S"), ("Ben Tre", "Vietnam", "VN", "VNBTR", 10.2333, 106.3833, "S"), ("Tra Vinh", "Vietnam", "VN", "VNTVI", 9.9333, 106.3500, "S"), ("Soc Trang", "Vietnam", "VN", "VNSOT", 9.6000, 105.9833, "S"), ("Ca Mau", "Vietnam", "VN", "VNCAM", 9.1833, 105.1500, "S"), ("Rach Gia", "Vietnam", "VN", "VNRGA", 10.0000, 105.0833, "S"), ("Ha Tinh", "Vietnam", "VN", "VNHTI", 18.3333, 105.9167, "S"), ("Lach Huyen", "Vietnam", "VN", "VNLHY", 20.7000, 106.8000, "VL"), ("Dinh Vu", "Vietnam", "VN", "VNDVU", 20.8167, 106.8000, "L"), ("Nam Dinh", "Vietnam", "VN", "VNNDI", 20.4333, 106.1667, "S"), ("Thai Binh", "Vietnam", "VN", "VNTBI", 20.4500, 106.3333, "S"), ("Quang Ninh", "Vietnam", "VN", "VNQNI", 21.0000, 107.0500, "M"), ("Cua Lo", "Vietnam", "VN", "VNCLO", 18.8000, 105.7167, "S"), # ---- THAILAND (~25 ports) ---- ("Laem Chabang", "Thailand", "TH", "THLCH", 13.0833, 100.8833, "VL"), ("Bangkok", "Thailand", "TH", "THBKK", 13.7000, 100.5167, "VL"), ("Map Ta Phut", "Thailand", "TH", "THMTP", 12.7167, 101.1500, "L"), ("Songkhla", "Thailand", "TH", "THSGZ", 7.2000, 100.6000, "M"), ("Sattahip", "Thailand", "TH", "THSTH", 12.6667, 100.9000, "L"), ("Phuket", "Thailand", "TH", "THHKT", 7.8167, 98.3833, "M"), ("Ranong", "Thailand", "TH", "THRNG", 9.9667, 98.6333, "S"), ("Surat Thani", "Thailand", "TH", "THURT", 9.1500, 99.3333, "M"), ("Koh Sichang", "Thailand", "TH", "THKSI", 13.1500, 100.8167, "M"), ("Sriracha", "Thailand", "TH", "THSRI", 13.1667, 100.9333, "L"), ("Samut Prakan", "Thailand", "TH", "THSMP", 13.5833, 100.5833, "M"), ("Samut Sakhon", "Thailand", "TH", "THSMK", 13.5333, 100.2833, "M"), ("Chumphon", "Thailand", "TH", "THCPN", 10.5000, 99.1833, "S"), ("Nakhon Si Thammarat", "Thailand", "TH", "THNST", 8.4000, 100.0667, "S"), ("Krabi", "Thailand", "TH", "THKBI", 8.0667, 98.9167, "S"), ("Trang", "Thailand", "TH", "THTSG", 7.5667, 99.6167, "S"), ("Prachuap Khiri Khan", "Thailand", "TH", "THPKK", 11.8167, 99.7833, "S"), ("Hua Hin", "Thailand", "TH", "THHHN", 12.5667, 99.9667, "S"), ("Chanthaburi", "Thailand", "TH", "THCTI", 12.6000, 102.1167, "S"), ("Trat", "Thailand", "TH", "THTRT", 12.2333, 102.5167, "S"), ("Ko Samui", "Thailand", "TH", "THUSM", 9.5167, 100.0500, "S"), ("Pattani", "Thailand", "TH", "THPAT", 6.8667, 101.2500, "S"), ("Narathiwat", "Thailand", "TH", "THNAR", 6.4333, 101.8167, "S"), ("Kantang", "Thailand", "TH", "THKTG", 7.4000, 99.5167, "S"), ("Satun", "Thailand", "TH", "THSTN", 6.6167, 100.0667, "S"), # ---- PHILIPPINES (~30 ports) ---- ("Manila", "Philippines", "PH", "PHMNL", 14.5833, 120.9667, "VL"), ("Cebu", "Philippines", "PH", "PHCEB", 10.3157, 123.8854, "L"), ("Davao", "Philippines", "PH", "PHDVO", 7.0731, 125.6128, "L"), ("Subic Bay", "Philippines", "PH", "PHSFS", 14.8000, 120.2833, "L"), ("Batangas", "Philippines", "PH", "PHBTG", 13.7500, 121.0667, "L"), ("General Santos", "Philippines", "PH", "PHGSA", 6.1167, 125.1667, "M"), ("Cagayan de Oro", "Philippines", "PH", "PHCGY", 8.4833, 124.6500, "M"), ("Iloilo", "Philippines", "PH", "PHILO", 10.6833, 122.5667, "M"), ("Zamboanga", "Philippines", "PH", "PHZAM", 6.9042, 122.0761, "M"), ("Bacolod", "Philippines", "PH", "PHBCD", 10.6833, 122.9333, "M"), ("Tacloban", "Philippines", "PH", "PHTAC", 11.2500, 124.9667, "M"), ("Ozamiz", "Philippines", "PH", "PHOZC", 8.1500, 123.8500, "S"), ("Surigao", "Philippines", "PH", "PHSUG", 9.7833, 125.5000, "S"), ("Cotabato", "Philippines", "PH", "PHCBO", 7.2167, 124.2500, "S"), ("San Fernando La Union", "Philippines", "PH", "PHSFE", 16.6167, 120.3167, "S"), ("Legazpi", "Philippines", "PH", "PHLGP", 13.1500, 123.7500, "S"), ("Puerto Princesa", "Philippines", "PH", "PHPPS", 9.7500, 118.7333, "M"), ("Mariveles", "Philippines", "PH", "PHMAR", 14.4333, 120.4833, "M"), ("Limay", "Philippines", "PH", "PHLIM", 14.5667, 120.6000, "S"), ("Nasipit", "Philippines", "PH", "PHNAS", 8.9667, 125.5333, "S"), ("Tagbilaran", "Philippines", "PH", "PHTAG", 9.6500, 123.8500, "S"), ("Dumaguete", "Philippines", "PH", "PHDGT", 9.3167, 123.3000, "S"), ("Ormoc", "Philippines", "PH", "PHORC", 11.0500, 124.6000, "S"), ("Butuan", "Philippines", "PH", "PHBXU", 8.9500, 125.5333, "S"), ("Polloc", "Philippines", "PH", "PHPOL", 7.3333, 124.2000, "S"), ("Iligan", "Philippines", "PH", "PHIGN", 8.2333, 124.2333, "M"), ("Isabela", "Philippines", "PH", "PHISL", 6.7000, 121.9667, "S"), ("Dipolog", "Philippines", "PH", "PHDPL", 8.5833, 123.3333, "S"), ("Pagadian", "Philippines", "PH", "PHPAG", 7.8333, 123.4333, "S"), ("Jolo", "Philippines", "PH", "PHJOL", 6.0500, 121.0000, "S"), # ---- MALAYSIA (~25 ports) ---- ("Port Klang", "Malaysia", "MY", "MYPKG", 3.0000, 101.3833, "VL"), ("Tanjung Pelepas", "Malaysia", "MY", "MYTPP", 1.3667, 103.5500, "VL"), ("Penang", "Malaysia", "MY", "MYPEN", 5.4167, 100.3500, "L"), ("Kuantan", "Malaysia", "MY", "MYKUA", 3.9667, 103.4333, "M"), ("Johor", "Malaysia", "MY", "MYJHB", 1.4667, 103.7833, "L"), ("Bintulu", "Malaysia", "MY", "MYBTU", 3.1667, 113.0333, "L"), ("Kota Kinabalu", "Malaysia", "MY", "MYBKI", 5.9833, 116.0667, "M"), ("Sandakan", "Malaysia", "MY", "MYSDK", 5.8333, 118.1000, "M"), ("Tawau", "Malaysia", "MY", "MYTWU", 4.2500, 117.8833, "M"), ("Kuching", "Malaysia", "MY", "MYKCH", 1.5500, 110.3500, "M"), ("Sibu", "Malaysia", "MY", "MYSBW", 2.3000, 111.8333, "M"), ("Miri", "Malaysia", "MY", "MYMYY", 4.3833, 114.0000, "M"), ("Kemaman", "Malaysia", "MY", "MYKEM", 4.2333, 103.4333, "M"), ("Labuan", "Malaysia", "MY", "MYLBU", 5.3000, 115.2333, "M"), ("Langkawi", "Malaysia", "MY", "MYLGK", 6.3333, 99.8333, "S"), ("Lumut", "Malaysia", "MY", "MYLUM", 4.2333, 100.6167, "M"), ("Teluk Ramunia", "Malaysia", "MY", "MYTLR", 1.3500, 104.2500, "L"), ("Tanjung Kidurong", "Malaysia", "MY", "MYTKD", 3.2167, 113.0500, "M"), ("Sepanggar Bay", "Malaysia", "MY", "MYSPB", 6.0500, 116.0500, "M"), ("Pasir Gudang", "Malaysia", "MY", "MYPGU", 1.4500, 103.9167, "L"), ("Malacca", "Malaysia", "MY", "MYMKZ", 2.1833, 102.2500, "M"), ("Rajang", "Malaysia", "MY", "MYRAJ", 2.1333, 111.1667, "S"), ("Lahad Datu", "Malaysia", "MY", "MYLDU", 5.0167, 118.3167, "S"), ("Kudat", "Malaysia", "MY", "MYKUD", 6.8833, 116.8500, "S"), ("Mukah", "Malaysia", "MY", "MYMKM", 2.9000, 112.1000, "S"), # ---- INDONESIA (~50 ports) ---- ("Tanjung Priok", "Indonesia", "ID", "IDTPP", -6.1000, 106.8833, "VL"), ("Tanjung Perak", "Indonesia", "ID", "IDSUB", -7.2167, 112.7333, "VL"), ("Belawan", "Indonesia", "ID", "IDBLW", 3.7833, 98.6833, "VL"), ("Makassar", "Indonesia", "ID", "IDUPG", -5.1167, 119.4167, "L"), ("Balikpapan", "Indonesia", "ID", "IDBPN", -1.2667, 116.8000, "L"), ("Semarang", "Indonesia", "ID", "IDSRG", -6.9667, 110.4167, "L"), ("Banjarmasin", "Indonesia", "ID", "IDBDJ", -3.3167, 114.5833, "L"), ("Palembang", "Indonesia", "ID", "IDPLM", -2.9833, 104.7500, "L"), ("Dumai", "Indonesia", "ID", "IDDUI", 1.6833, 101.4500, "L"), ("Cilacap", "Indonesia", "ID", "IDCXP", -7.7333, 109.0167, "M"), ("Pontianak", "Indonesia", "ID", "IDPTK", -0.0167, 109.3333, "M"), ("Samarinda", "Indonesia", "ID", "IDSRI", -0.5000, 117.1500, "M"), ("Jayapura", "Indonesia", "ID", "IDDJJ", -2.5333, 140.7167, "M"), ("Sorong", "Indonesia", "ID", "IDSRN", -0.8833, 131.2500, "M"), ("Ambon", "Indonesia", "ID", "IDAMQ", -3.6833, 128.1833, "M"), ("Manado", "Indonesia", "ID", "IDMDO", 1.4833, 124.8500, "M"), ("Bitung", "Indonesia", "ID", "IDBIT", 1.4333, 125.2000, "M"), ("Kupang", "Indonesia", "ID", "IDKOE", -10.1667, 123.5833, "M"), ("Padang", "Indonesia", "ID", "IDPDG", -1.0000, 100.3500, "M"), ("Bengkulu", "Indonesia", "ID", "IDBKS", -3.7833, 102.2500, "S"), ("Jambi", "Indonesia", "ID", "IDJMB", -1.5833, 103.6333, "M"), ("Pekanbaru", "Indonesia", "ID", "IDPKU", 1.4833, 102.1333, "M"), ("Lhokseumawe", "Indonesia", "ID", "IDLSW", 5.1833, 97.1500, "M"), ("Banda Aceh", "Indonesia", "ID", "IDBTH", 5.5500, 95.3167, "M"), ("Merak", "Indonesia", "ID", "IDMRK", -5.9333, 106.0000, "M"), ("Cigading", "Indonesia", "ID", "IDCIG", -6.0167, 106.0500, "L"), ("Ciwandan", "Indonesia", "ID", "IDCWD", -6.0000, 106.0333, "M"), ("Gresik", "Indonesia", "ID", "IDGRK", -7.1667, 112.6500, "M"), ("Probolinggo", "Indonesia", "ID", "IDPBL", -7.7500, 113.2167, "M"), ("Tuban", "Indonesia", "ID", "IDTBN", -6.9000, 112.0500, "M"), ("Cirebon", "Indonesia", "ID", "IDCBN", -6.7333, 108.5500, "M"), ("Tegal", "Indonesia", "ID", "IDTGL", -6.8667, 109.1333, "S"), ("Pekalongan", "Indonesia", "ID", "IDPKL", -6.8833, 109.6833, "S"), ("Jepara", "Indonesia", "ID", "IDJPR", -6.5833, 110.6667, "S"), ("Surabaya", "Indonesia", "ID", "IDSUB", -7.2500, 112.7500, "VL"), ("Bontang", "Indonesia", "ID", "IDBXT", 0.1167, 117.4833, "M"), ("Tarakan", "Indonesia", "ID", "IDTRK", 3.3000, 117.6333, "M"), ("Nunukan", "Indonesia", "ID", "IDNNK", 4.1167, 117.6667, "S"), ("Gorontalo", "Indonesia", "ID", "IDGTO", 0.5333, 123.0500, "S"), ("Ternate", "Indonesia", "ID", "IDTTE", 0.7833, 127.3833, "S"), ("Kendari", "Indonesia", "ID", "IDKDI", -3.9667, 122.6000, "M"), ("Baubau", "Indonesia", "ID", "IDBAU", -5.4667, 122.6167, "S"), ("Maumere", "Indonesia", "ID", "IDMOF", -8.6167, 122.2333, "S"), ("Ende", "Indonesia", "ID", "IDENK", -8.8500, 121.6500, "S"), ("Waingapu", "Indonesia", "ID", "IDWGP", -9.6500, 120.2667, "S"), ("Fakfak", "Indonesia", "ID", "IDFKQ", -2.9167, 132.3000, "S"), ("Merauke", "Indonesia", "ID", "IDMKQ", -8.4667, 140.3833, "S"), ("Tanjung Intan", "Indonesia", "ID", "IDTIN", -7.7500, 109.0000, "M"), ("Benoa", "Indonesia", "ID", "IDBNO", -8.7500, 115.2167, "M"), ("Lembar", "Indonesia", "ID", "IDLEM", -8.7333, 116.0667, "M"), # ---- SINGAPORE ---- ("Singapore", "Singapore", "SG", "SGSIN", 1.2646, 103.8223, "VL"), ("Jurong", "Singapore", "SG", "SGJUR", 1.3100, 103.7100, "L"), # ---- MYANMAR (~10 ports) ---- ("Yangon", "Myanmar", "MM", "MMRGN", 16.8661, 96.1951, "L"), ("Thilawa", "Myanmar", "MM", "MMTHL", 16.6833, 96.2500, "L"), ("Sittwe", "Myanmar", "MM", "MMSTW", 20.1500, 92.9000, "M"), ("Pathein", "Myanmar", "MM", "MMPAT", 16.7833, 94.7333, "M"), ("Mawlamyine", "Myanmar", "MM", "MMMMU", 16.4833, 97.6167, "M"), ("Dawei", "Myanmar", "MM", "MMDWE", 14.0833, 98.2000, "M"), ("Myeik", "Myanmar", "MM", "MMMEK", 12.4333, 98.6000, "S"), ("Kawthoung", "Myanmar", "MM", "MMKTW", 10.0167, 98.5500, "S"), ("Kyaukphyu", "Myanmar", "MM", "MMKPW", 19.4167, 93.5333, "M"), ("Bhamo", "Myanmar", "MM", "MMBMO", 24.2500, 97.2333, "S"), # ---- CAMBODIA (~5 ports) ---- ("Sihanoukville", "Cambodia", "KH", "KHSHV", 10.6333, 103.5167, "M"), ("Phnom Penh", "Cambodia", "KH", "KHPNH", 11.5449, 104.8922, "M"), ("Kampot", "Cambodia", "KH", "KHKMT", 10.6167, 104.1833, "S"), ("Koh Kong", "Cambodia", "KH", "KHKOK", 11.6167, 102.9833, "S"), ("Stung Treng", "Cambodia", "KH", "KHSTR", 13.5167, 106.0167, "S"), # ---- BRUNEI (~3 ports) ---- ("Muara", "Brunei", "BN", "BNMUA", 5.0167, 115.0667, "M"), ("Seria", "Brunei", "BN", "BNSER", 4.6167, 114.3167, "S"), ("Kuala Belait", "Brunei", "BN", "BNKUB", 4.5833, 114.1833, "S"), # ---- ADDITIONAL CHINA PORTS ---- ("Taixing", "China", "CN", "CNTXN", 32.1667, 120.0167, "S"), ("Rugao Port", "China", "CN", "CNRGP", 32.3833, 120.5500, "S"), ("Dongfang", "China", "CN", "CNDFG", 19.1000, 108.6500, "M"), ("Lingao", "China", "CN", "CNLGA", 19.9000, 109.6833, "S"), ("Danzhou", "China", "CN", "CNDZO", 19.5167, 109.5833, "S"), ("Qionghai", "China", "CN", "CNQHJ", 19.2333, 110.4667, "S"), ("Shangtou", "China", "CN", "CNSTO", 23.3667, 116.6833, "S"), ("Haicang", "China", "CN", "CNHCG", 24.4833, 118.0333, "L"), ("Songxia", "China", "CN", "CNSXA", 24.3333, 117.9500, "S"), ("Gulang", "China", "CN", "CNGLG", 24.4500, 118.0667, "S"), ("Jiangdu", "China", "CN", "CNJDU", 32.4333, 119.5333, "S"), ("Haian", "China", "CN", "CNHAN", 32.5667, 120.4500, "S"), ("Dongtai", "China", "CN", "CNDTJ", 32.8667, 120.3167, "S"), ("Sheyang", "China", "CN", "CNSYG", 33.7667, 120.2500, "S"), ("Xiangshui", "China", "CN", "CNXSH", 34.2000, 119.8833, "S"), ("Guanyun", "China", "CN", "CNGYN", 34.7333, 119.2500, "S"), ("Ganyu", "China", "CN", "CNGYU", 34.8333, 119.1333, "S"), ("Haizhou", "China", "CN", "CNHZW", 34.5833, 119.1500, "S"), ("Langya", "China", "CN", "CNLYA", 35.1000, 119.2833, "S"), ("Jimo", "China", "CN", "CNJMO", 36.3833, 120.4500, "S"), ("Laoshan", "China", "CN", "CNLSH", 36.1667, 120.6500, "S"), ("Gaomi", "China", "CN", "CNGMI", 36.3833, 119.7500, "S"), ("Zhucheng", "China", "CN", "CNZCG", 36.0000, 119.3833, "S"), ("Rongcheng Port", "China", "CN", "CNRCP", 37.1833, 122.4500, "S"), ("Zhaodong", "China", "CN", "CNZDO", 37.0167, 122.5000, "S"), ("Shijiusuo", "China", "CN", "CNSJS", 35.3833, 119.5333, "L"), ("Lanshan Port", "China", "CN", "CNLSP", 35.0833, 119.3500, "M"), ("Zhongjieshan", "China", "CN", "CNZJS", 30.0333, 122.3667, "S"), ("Dinghai", "China", "CN", "CNDHI", 30.0333, 122.1167, "M"), ("Shenjiamen", "China", "CN", "CNSJM", 29.9500, 122.3000, "M"), ("Luhuashan", "China", "CN", "CNLHS", 30.6667, 122.1833, "S"), ("Xiushan", "China", "CN", "CNXSN", 30.0833, 122.2167, "S"), ("Liuheng", "China", "CN", "CNLHG", 29.7833, 122.1500, "S"), ("Jintang", "China", "CN", "CNJTN", 30.0167, 121.9333, "S"), ("Cezi", "China", "CN", "CNCZI", 29.8500, 122.2833, "S"), ("Shengsi", "China", "CN", "CNSSI", 30.7167, 122.4500, "S"), ("Qushan", "China", "CN", "CNQSN", 30.7167, 122.4667, "S"), ("Beilun", "China", "CN", "CNBLN", 29.9667, 121.8667, "VL"), ("Chuanshan", "China", "CN", "CNCHS", 29.7833, 121.8500, "VL"), ("Daxie", "China", "CN", "CNDXI", 29.9333, 121.9333, "L"), ("Meishan", "China", "CN", "CNMSN", 29.8000, 121.9167, "VL"), ("Zhenhai", "China", "CN", "CNZHI", 29.9500, 121.7167, "L"), ("Yongjiang", "China", "CN", "CNYJI", 29.8667, 121.6500, "M"), ("Daishan", "China", "CN", "CNDSA", 30.2500, 122.2000, "S"), # ---- ADDITIONAL JAPAN PORTS ---- ("Mikawa Port", "Japan", "JP", "JPMKP", 34.7833, 137.2167, "M"), ("Komatsushima", "Japan", "JP", "JPKMT", 34.0000, 134.5833, "M"), ("Sakaide", "Japan", "JP", "JPSKD", 34.3333, 133.8500, "M"), ("Marugame", "Japan", "JP", "JPMRG", 34.3000, 133.8000, "S"), ("Nihama", "Japan", "JP", "JPNHM", 33.9500, 133.2833, "M"), ("Uwajima", "Japan", "JP", "JPUWJ", 33.2167, 132.5667, "S"), ("Yawatahama", "Japan", "JP", "JPYWH", 33.4667, 132.4167, "S"), ("Omaezaki", "Japan", "JP", "JPOMZ", 34.6000, 138.2167, "M"), ("Gamagori", "Japan", "JP", "JPGMG", 34.8167, 137.2333, "S"), ("Toyohashi", "Japan", "JP", "JPTYH", 34.7667, 137.3833, "M"), ("Shimotsu", "Japan", "JP", "JPSMT", 34.1333, 135.1333, "M"), ("Gobo", "Japan", "JP", "JPGBO", 33.9000, 135.1500, "S"), ("Tanabe", "Japan", "JP", "JPTNB", 33.7333, 135.3833, "S"), ("Shingu", "Japan", "JP", "JPSGN", 33.7167, 135.9833, "S"), # ---- ADDITIONAL SOUTH KOREA PORTS ---- ("Changwon", "South Korea", "KR", "KRCWN", 35.2167, 128.6833, "M"), ("Yeongam", "South Korea", "KR", "KRYAM", 34.7500, 126.4333, "S"), ("Haenam", "South Korea", "KR", "KRHAE", 34.5667, 126.5833, "S"), ("Gimpo", "South Korea", "KR", "KRGMP", 37.5833, 126.7167, "S"), ("Hwaseong", "South Korea", "KR", "KRHWS", 37.2000, 126.8167, "S"), # ---- ADDITIONAL INDONESIA PORTS ---- ("Tanjung Emas", "Indonesia", "ID", "IDTES", -6.9500, 110.4167, "L"), ("Panjang", "Indonesia", "ID", "IDPJG", -5.4667, 105.3167, "M"), ("Teluk Bayur", "Indonesia", "ID", "IDTBY", -1.0167, 100.3500, "L"), ("Sibolga", "Indonesia", "ID", "IDSBO", 1.7333, 98.7833, "M"), ("Tanjung Balai Asahan", "Indonesia", "ID", "IDTBA", 2.9667, 99.8000, "M"), ("Tanjung Balai Karimun", "Indonesia", "ID", "IDTBK", 1.0500, 103.4167, "M"), ("Batam", "Indonesia", "ID", "IDBTM", 1.0667, 104.0167, "L"), ("Tanjung Pinang", "Indonesia", "ID", "IDTNP", 0.9167, 104.4500, "M"), ("Pangkal Balam", "Indonesia", "ID", "IDPKB", -2.1000, 106.1333, "M"), ("Muntok", "Indonesia", "ID", "IDMTK", -2.0667, 105.1667, "S"), ("Tanjung Pandan", "Indonesia", "ID", "IDTPN", -2.7500, 107.6500, "S"), ("Sampit", "Indonesia", "ID", "IDSMT", -2.5333, 112.9500, "M"), ("Kumai", "Indonesia", "ID", "IDKMA", -2.7333, 111.7333, "S"), ("Kotabaru", "Indonesia", "ID", "IDKTB", -3.2833, 116.2167, "M"), ("Parepare", "Indonesia", "ID", "IDPRE", -4.0167, 119.6167, "M"), ("Pantoloan", "Indonesia", "ID", "IDPNT", -0.7333, 119.8500, "M"), ("Luwuk", "Indonesia", "ID", "IDLUW", -0.9500, 122.8000, "S"), ("Toli Toli", "Indonesia", "ID", "IDTLI", 1.0500, 120.7833, "S"), ("Kolaka", "Indonesia", "ID", "IDKLK", -4.0667, 121.5833, "S"), ("Raha", "Indonesia", "ID", "IDRHA", -4.9667, 122.7167, "S"), ("Namlea", "Indonesia", "ID", "IDNLA", -3.2500, 127.0833, "S"), ("Dobo", "Indonesia", "ID", "IDDBO", -5.7667, 134.2167, "S"), ("Tual", "Indonesia", "ID", "IDTUL", -5.6333, 132.7500, "S"), ("Manokwari", "Indonesia", "ID", "IDMKW", -0.8667, 134.0833, "M"), ("Biak", "Indonesia", "ID", "IDBIK", -1.1833, 136.0833, "S"), ("Nabire", "Indonesia", "ID", "IDNBR", -3.3667, 135.5000, "S"), ("Timika", "Indonesia", "ID", "IDTMK", -4.5333, 136.8833, "S"), ("Agats", "Indonesia", "ID", "IDAGT", -5.5333, 138.1333, "S"), # ---- ADDITIONAL VIETNAM PORTS ---- ("Dong Nai", "Vietnam", "VN", "VNDNI", 10.9667, 106.8333, "M"), ("Binh Duong", "Vietnam", "VN", "VNBDU", 11.0667, 106.6500, "M"), ("My Thoi", "Vietnam", "VN", "VNMTI", 10.3833, 105.4500, "S"), ("Duong Dong", "Vietnam", "VN", "VNDDG", 10.2167, 103.9667, "S"), ("Van Phong", "Vietnam", "VN", "VNVPH", 12.6167, 109.2000, "L"), # ---- ADDITIONAL PHILIPPINES PORTS ---- ("Misamis Oriental", "Philippines", "PH", "PHMOR", 8.5000, 124.6833, "S"), ("Tabaco", "Philippines", "PH", "PHTBC", 13.3500, 123.7333, "S"), ("Calapan", "Philippines", "PH", "PHCLP", 13.4167, 121.1833, "S"), ("Lucena", "Philippines", "PH", "PHLCN", 13.9500, 121.6333, "S"), ("Rosario", "Philippines", "PH", "PHROS", 14.4167, 120.8500, "S"), # ---- ADDITIONAL THAILAND PORTS ---- ("Ban Don", "Thailand", "TH", "THBDN", 9.1500, 99.3167, "S"), ("Ao Makham", "Thailand", "TH", "THAMK", 7.8333, 98.3667, "S"), ("Nong Khai", "Thailand", "TH", "THNKH", 17.8667, 102.7500, "S"), ] for t in easia: ports.append(p(*t, region="EASIA") if len(t) == 7 else p(*t)) # ============================================================ # SOUTH ASIA (~200 ports) # ============================================================ sasia = [ # ---- INDIA (~150 ports) ---- # Major ports (government-administered) ("Mumbai", "India", "IN", "INBOM", 18.9500, 72.8333, "VL"), ("JNPT Nhava Sheva", "India", "IN", "INNSA", 18.9500, 72.9500, "VL"), ("Chennai", "India", "IN", "INMAA", 13.1000, 80.2833, "VL"), ("Kolkata", "India", "IN", "INCCU", 22.5500, 88.3333, "L"), ("Haldia", "India", "IN", "INHAL", 22.0333, 88.0667, "L"), ("Visakhapatnam", "India", "IN", "INVTZ", 17.6833, 83.2833, "VL"), ("Paradip", "India", "IN", "INPRT", 20.2667, 86.6667, "L"), ("Kandla", "India", "IN", "INIXA", 23.0333, 70.2167, "VL"), ("Mundra", "India", "IN", "INMUN", 22.8333, 69.7167, "VL"), ("Pipavav", "India", "IN", "INPPV", 20.9000, 71.5167, "L"), ("Hazira", "India", "IN", "INHZA", 21.1000, 72.6333, "L"), ("Dahej", "India", "IN", "INDAH", 21.7167, 72.5833, "L"), ("Mangalore", "India", "IN", "INIXE", 12.8500, 74.8167, "L"), ("New Mangalore", "India", "IN", "INNML", 12.9167, 74.8000, "L"), ("Cochin", "India", "IN", "INCOK", 9.9667, 76.2667, "L"), ("Tuticorin", "India", "IN", "INTUT", 8.7833, 78.1667, "L"), ("Ennore", "India", "IN", "INENR", 13.2167, 80.3333, "L"), ("Krishnapatnam", "India", "IN", "INKRI", 14.2500, 80.1167, "L"), ("Gangavaram", "India", "IN", "INGVR", 17.6333, 83.2333, "L"), ("Dhamra", "India", "IN", "INDHA", 20.7833, 86.9500, "L"), ("Gopalpur", "India", "IN", "INGPL", 19.2667, 84.9333, "M"), ("Mormugao", "India", "IN", "INMRM", 15.4000, 73.8000, "L"), ("Karaikal", "India", "IN", "INKRK", 10.9167, 79.8500, "M"), ("Kamarajar", "India", "IN", "INKAM", 13.2167, 80.3333, "L"), ("Port Blair", "India", "IN", "INIXA", 11.6667, 92.7333, "M"), # Gujarat ports ("Porbandar", "India", "IN", "INPBD", 21.6333, 69.6167, "M"), ("Okha", "India", "IN", "INOKH", 22.4667, 69.0667, "M"), ("Veraval", "India", "IN", "INVER", 20.9000, 70.3667, "M"), ("Bhavnagar", "India", "IN", "INBHV", 21.7500, 72.1500, "M"), ("Sikka", "India", "IN", "INSIK", 22.4333, 69.8333, "L"), ("Vadinar", "India", "IN", "INVAD", 22.4500, 69.7000, "L"), ("Navlakhi", "India", "IN", "INNAV", 22.9667, 70.4500, "M"), ("Bedi", "India", "IN", "INBED", 22.5000, 70.0500, "S"), ("Magdalla", "India", "IN", "INMAG", 21.1333, 72.7667, "M"), ("Jamnagar", "India", "IN", "INJAM", 22.4667, 70.0667, "M"), ("Bharuch", "India", "IN", "INBRC", 21.7000, 72.9833, "S"), ("Alang", "India", "IN", "INALG", 21.4167, 72.1833, "M"), ("Ghogha", "India", "IN", "INGHO", 21.6833, 72.2833, "S"), ("Salaya", "India", "IN", "INSLY", 22.3167, 69.6000, "M"), ("Jafrabad", "India", "IN", "INJFR", 20.8667, 71.3667, "S"), ("Mahuva", "India", "IN", "INMHV", 21.1000, 71.7500, "S"), ("Talaja", "India", "IN", "INTLJ", 21.3500, 72.0333, "S"), ("Diu", "India", "IN", "INDIU", 20.7167, 70.9833, "S"), ("Dwarka", "India", "IN", "INDWK", 22.2333, 68.9667, "S"), ("Mandvi", "India", "IN", "INMVI", 22.8333, 69.3500, "S"), ("Koteshwar", "India", "IN", "INKOT", 23.2000, 68.5167, "S"), ("Tuna", "India", "IN", "INTUN", 22.7833, 70.0833, "M"), ("Dholera", "India", "IN", "INDHO", 22.2500, 72.1833, "S"), ("Nargol", "India", "IN", "INNRG", 20.2500, 72.7167, "S"), ("Umbergaon", "India", "IN", "INUMG", 20.1833, 72.7333, "S"), ("Dahanu", "India", "IN", "INDHN", 19.9833, 72.7167, "S"), ("Tarapur", "India", "IN", "INTPR", 19.8500, 72.6833, "S"), # Maharashtra ("Dharamtar", "India", "IN", "INDRT", 18.6833, 73.0667, "M"), ("Revdanda", "India", "IN", "INRVD", 18.5500, 72.9167, "S"), ("Ratnagiri", "India", "IN", "INRAT", 16.9833, 73.3000, "M"), ("Jaigarh", "India", "IN", "INJGH", 17.3167, 73.2167, "M"), ("Dighi", "India", "IN", "INDIG", 18.2667, 73.3167, "M"), ("Dabhol", "India", "IN", "INDBL", 17.5833, 73.1833, "M"), ("Vijaydurg", "India", "IN", "INVJD", 16.5667, 73.3333, "S"), ("Malvan", "India", "IN", "INMLV", 16.0500, 73.4667, "S"), ("Vengurla", "India", "IN", "INVNG", 15.8667, 73.6333, "S"), ("Jaigad", "India", "IN", "INJGD", 17.3000, 73.2167, "S"), # Goa ("Panaji", "India", "IN", "INPNJ", 15.4989, 73.8278, "S"), ("Vasco da Gama", "India", "IN", "INVDG", 15.3833, 73.8167, "M"), # Karnataka ("Karwar", "India", "IN", "INKRW", 14.8000, 74.1333, "M"), ("Belekeri", "India", "IN", "INBLK", 14.7000, 74.1833, "M"), ("Malpe", "India", "IN", "INMLP", 13.3500, 74.7000, "S"), ("Honnavar", "India", "IN", "INHON", 14.2833, 74.4500, "S"), ("Bhatkal", "India", "IN", "INBTK", 13.9833, 74.5667, "S"), ("Tadri", "India", "IN", "INTAD", 14.3833, 74.3167, "S"), ("Belikeri", "India", "IN", "INBKR", 14.7000, 74.1833, "M"), # Kerala ("Azhikkal", "India", "IN", "INAZK", 11.9167, 75.3167, "S"), ("Beypore", "India", "IN", "INBYP", 11.1667, 75.8000, "S"), ("Vizhinjam", "India", "IN", "INVIZ", 8.3833, 76.9833, "M"), ("Kollam", "India", "IN", "INQLM", 8.8833, 76.6000, "S"), ("Alappuzha", "India", "IN", "INALP", 9.4833, 76.3333, "S"), ("Ponnani", "India", "IN", "INPNI", 10.7833, 75.9167, "S"), ("Munambam", "India", "IN", "INMAM", 10.1833, 76.1667, "S"), ("Vallarpadam", "India", "IN", "INVLP", 9.9833, 76.2833, "L"), # Tamil Nadu ("Nagapattinam", "India", "IN", "INNPT", 10.7667, 79.8333, "S"), ("Cuddalore", "India", "IN", "INCUD", 11.7333, 79.7667, "S"), ("Kattupalli", "India", "IN", "INKTP", 13.2500, 80.3167, "L"), ("Thiruchopuram", "India", "IN", "INTCP", 10.1833, 79.0833, "S"), ("Rameswaram", "India", "IN", "INRMM", 9.2833, 79.3167, "S"), ("Pamban", "India", "IN", "INPMB", 9.2833, 79.2167, "S"), ("Colachel", "India", "IN", "INCOL", 8.1833, 77.2500, "S"), ("Muttom", "India", "IN", "INMTM", 8.1500, 77.3000, "S"), ("Pondicherry", "India", "IN", "INPDY", 11.9333, 79.8333, "S"), # Andhra Pradesh ("Machilipatnam", "India", "IN", "INMCH", 16.1833, 81.1333, "M"), ("Kakinada", "India", "IN", "INKAK", 16.9500, 82.2500, "L"), ("Bheemunipatnam", "India", "IN", "INBHM", 17.8833, 83.4500, "S"), ("Vodarevu", "India", "IN", "INVOD", 15.8000, 80.3500, "S"), ("Nellore", "India", "IN", "INNEL", 14.4500, 79.9833, "S"), ("Nizampatnam", "India", "IN", "INNZM", 15.8833, 80.6500, "S"), ("Gangavaram Port", "India", "IN", "INGVP", 17.6167, 83.2333, "L"), ("Mutyalammapalem", "India", "IN", "INMYP", 17.7333, 83.3333, "S"), # Odisha ("Gopalpur Port", "India", "IN", "INGPP", 19.2667, 84.9333, "M"), ("Dhamra Port", "India", "IN", "INDHP", 20.7833, 86.9500, "L"), ("Chandbali", "India", "IN", "INCHB", 20.7833, 86.7333, "S"), ("Balasore", "India", "IN", "INBLS", 21.5000, 87.0667, "S"), # West Bengal ("Diamond Harbour", "India", "IN", "INDMH", 22.1833, 88.1833, "M"), ("Sagar Island", "India", "IN", "INSGI", 21.6500, 88.0500, "S"), ("Budge Budge", "India", "IN", "INBGB", 22.4667, 88.1833, "S"), # Andaman & Nicobar ("Car Nicobar", "India", "IN", "INCNB", 9.1500, 92.8167, "S"), ("Campbell Bay", "India", "IN", "INCBY", 7.0167, 93.9333, "S"), # Northeast ("Pandu", "India", "IN", "INPND", 26.1500, 91.7000, "S"), ("Dhubri", "India", "IN", "INDHU", 26.0167, 89.9833, "S"), # Lakshadweep ("Kavaratti", "India", "IN", "INKVA", 10.5667, 72.6333, "S"), ("Minicoy", "India", "IN", "INMIN", 8.2833, 73.0500, "S"), # Additional minor ports ("Paradip Port", "India", "IN", "INPPT", 20.2667, 86.6500, "L"), ("Deshimukh", "India", "IN", "INDES", 18.0667, 73.4667, "S"), ("Alibag", "India", "IN", "INALB", 18.6500, 72.8667, "S"), ("Rewas", "India", "IN", "INRWS", 18.5000, 73.0500, "S"), ("Thal", "India", "IN", "INTHL", 18.4000, 73.0667, "S"), ("Kelwa", "India", "IN", "INKLW", 19.6167, 72.7667, "S"), ("Arnala", "India", "IN", "INARN", 19.4667, 72.7333, "S"), ("Uttan", "India", "IN", "INUTT", 19.2833, 72.7833, "S"), ("Varsova", "India", "IN", "INVRS", 19.1333, 72.8167, "S"), ("Sassoon Dock", "India", "IN", "INSSD", 18.9167, 72.8333, "M"), ("Nhava Island", "India", "IN", "INNHI", 18.9500, 73.0000, "S"), ("Uran", "India", "IN", "INURN", 18.8833, 73.0500, "M"), ("Ulwe", "India", "IN", "INULW", 19.0333, 73.0333, "S"), ("Marmagao", "India", "IN", "INMRG", 15.4000, 73.8000, "L"), ("Jawahar Dweep", "India", "IN", "INJWD", 18.9167, 72.8500, "M"), ("Butcher Island", "India", "IN", "INBTI", 18.9667, 72.8833, "M"), # ---- PAKISTAN (~15 ports) ---- ("Karachi", "Pakistan", "PK", "PKKHI", 24.8500, 67.0000, "VL"), ("Port Qasim", "Pakistan", "PK", "PKBQM", 24.7833, 67.3500, "VL"), ("Gwadar", "Pakistan", "PK", "PKGWD", 25.1167, 62.3167, "L"), ("Ormara", "Pakistan", "PK", "PKORM", 25.2167, 64.6333, "S"), ("Pasni", "Pakistan", "PK", "PKPSI", 25.2667, 63.4667, "S"), ("Keti Bandar", "Pakistan", "PK", "PKKET", 24.1333, 67.4500, "S"), ("Jiwani", "Pakistan", "PK", "PKJIW", 25.0500, 61.7333, "S"), ("Shah Bandar", "Pakistan", "PK", "PKSHB", 24.1167, 67.5333, "S"), ("Korangi Creek", "Pakistan", "PK", "PKKRC", 24.7833, 67.2333, "M"), ("Bin Qasim", "Pakistan", "PK", "PKBQS", 24.7833, 67.3833, "L"), ("Sonmiani", "Pakistan", "PK", "PKSON", 25.4333, 66.5833, "S"), ("Gadani", "Pakistan", "PK", "PKGAD", 25.1000, 66.7167, "S"), ("Hub", "Pakistan", "PK", "PKHUB", 25.0500, 66.9000, "S"), # ---- BANGLADESH (~15 ports) ---- ("Chittagong", "Bangladesh", "BD", "BDCGP", 22.3000, 91.8000, "VL"), ("Mongla", "Bangladesh", "BD", "BDMGL", 22.4833, 89.6000, "L"), ("Payra", "Bangladesh", "BD", "BDPAY", 21.8000, 90.3167, "L"), ("Dhaka", "Bangladesh", "BD", "BDDAC", 23.7104, 90.4074, "M"), ("Narayanganj", "Bangladesh", "BD", "BDNRJ", 23.6167, 90.5000, "M"), ("Khulna", "Bangladesh", "BD", "BDKHL", 22.8167, 89.5500, "M"), ("Barisal", "Bangladesh", "BD", "BDBSL", 22.7000, 90.3667, "S"), ("Chandpur", "Bangladesh", "BD", "BDCHP", 23.2333, 90.6500, "S"), ("Sylhet", "Bangladesh", "BD", "BDSYL", 24.8833, 91.8833, "S"), ("Bhola", "Bangladesh", "BD", "BDBHL", 22.6833, 90.6500, "S"), ("Patenga", "Bangladesh", "BD", "BDPTG", 22.2333, 91.8000, "M"), ("Pangaon", "Bangladesh", "BD", "BDPGN", 23.6000, 90.4833, "M"), ("Ashuganj", "Bangladesh", "BD", "BDASH", 24.0333, 90.9833, "S"), ("Goalando", "Bangladesh", "BD", "BDGOA", 23.0667, 89.7667, "S"), # ---- SRI LANKA (~10 ports) ---- ("Colombo", "Sri Lanka", "LK", "LKCMB", 6.9500, 79.8500, "VL"), ("Hambantota", "Sri Lanka", "LK", "LKHAM", 6.1167, 81.1167, "L"), ("Trincomalee", "Sri Lanka", "LK", "LKTRR", 8.5667, 81.2333, "L"), ("Galle", "Sri Lanka", "LK", "LKGAL", 6.0333, 80.2167, "M"), ("Jaffna", "Sri Lanka", "LK", "LKJAF", 9.6667, 80.0000, "M"), ("Kankesanturai", "Sri Lanka", "LK", "LKKKS", 9.8167, 80.0500, "S"), ("Point Pedro", "Sri Lanka", "LK", "LKPPD", 9.8167, 80.2333, "S"), ("Oluvil", "Sri Lanka", "LK", "LKOLV", 7.3333, 81.8333, "S"), ("Beruwala", "Sri Lanka", "LK", "LKBRW", 6.4833, 79.9833, "S"), ("Kalpitiya", "Sri Lanka", "LK", "LKKLT", 8.2333, 79.7667, "S"), # ---- MALDIVES (~5 ports) ---- ("Male", "Maldives", "MV", "MVMLE", 4.1750, 73.5093, "M"), ("Hulhumale", "Maldives", "MV", "MVHLM", 4.2167, 73.5500, "M"), ("Addu", "Maldives", "MV", "MVADD", -0.6333, 73.1500, "S"), ("Kulhudhuffushi", "Maldives", "MV", "MVKLH", 6.6167, 73.0667, "S"), ("Hithadhoo", "Maldives", "MV", "MVHTH", -0.5833, 73.0833, "S"), # ---- ADDITIONAL INDIA PORTS ---- ("Krishnapatnam Port", "India", "IN", "INKRP", 14.2500, 80.1333, "L"), ("Adani Vizhinjam", "India", "IN", "INVZM", 8.3667, 76.9833, "L"), ("Thoothukudi", "India", "IN", "INTHO", 8.7833, 78.1500, "L"), ("Cuddalore Port", "India", "IN", "INCUL", 11.7000, 79.7833, "S"), ("Pondicherry Port", "India", "IN", "INPDP", 11.9333, 79.8500, "S"), ("Karaikal Port", "India", "IN", "INKRL", 10.9167, 79.8667, "M"), ("Nagore", "India", "IN", "INNGR", 10.8167, 79.8500, "S"), ("Mandapam", "India", "IN", "INMDP", 9.2833, 79.1333, "S"), ("Thondi", "India", "IN", "INTND", 9.7500, 79.0833, "S"), ("Kanyakumari", "India", "IN", "INKNY", 8.0833, 77.5500, "S"), ("Thankassery", "India", "IN", "INTKS", 8.8833, 76.5833, "S"), ("Kayamkulam", "India", "IN", "INKYM", 9.1833, 76.4833, "S"), ("Chavara", "India", "IN", "INCHV", 8.9667, 76.5333, "S"), ("Kozhikode", "India", "IN", "INKZK", 11.2500, 75.7667, "S"), ("Thalassery", "India", "IN", "INTLY", 11.7500, 75.4833, "S"), ("Kasaragod", "India", "IN", "INKSG", 12.5000, 75.0000, "S"), ("Cannanore", "India", "IN", "INCNN", 11.8667, 75.3667, "S"), ("Mangrol", "India", "IN", "INMRL", 21.1167, 70.1167, "S"), ("Nawabandar", "India", "IN", "INNWB", 20.6833, 71.1167, "S"), ("Rajpara", "India", "IN", "INRJP", 21.0333, 71.8000, "S"), ("Bhagwa", "India", "IN", "INBHG", 21.0667, 72.0500, "S"), ("Gopnath", "India", "IN", "INGPN", 21.2000, 72.1333, "S"), ("Victor Port", "India", "IN", "INVPT", 21.7667, 72.1500, "S"), ("Khambhat", "India", "IN", "INKBT", 22.3167, 72.6167, "S"), ("Billimora", "India", "IN", "INBLM", 20.7667, 72.9500, "S"), ("Valsad", "India", "IN", "INVLS", 20.6000, 72.9333, "S"), ("Surat", "India", "IN", "INSUR", 21.1667, 72.8333, "M"), # ---- ADDITIONAL PAKISTAN PORTS ---- ("Badin", "Pakistan", "PK", "PKBDN", 24.6333, 68.8333, "S"), ("Thatta", "Pakistan", "PK", "PKTHA", 24.7500, 67.9167, "S"), # ---- ADDITIONAL BANGLADESH PORTS ---- ("Cox's Bazar", "Bangladesh", "BD", "BDCXB", 21.4333, 91.9833, "S"), ("Sandwip", "Bangladesh", "BD", "BDSDP", 22.4833, 91.4333, "S"), ("Hatiya", "Bangladesh", "BD", "BDHTY", 22.3167, 91.1000, "S"), ("Patuakhali", "Bangladesh", "BD", "BDPTK", 22.3500, 90.3333, "S"), # ---- ADDITIONAL SRI LANKA PORTS ---- ("Mannar", "Sri Lanka", "LK", "LKMNR", 8.9833, 79.9000, "S"), ("Puttalam", "Sri Lanka", "LK", "LKPTM", 8.0333, 79.8333, "S"), ] for t in sasia: ports.append(p(*t, region="SASIA") if len(t) == 7 else p(*t))