679 lines
45 KiB
JavaScript
679 lines
45 KiB
JavaScript
// Данные о локациях на карте мира
|
||
// Координаты рассчитаны для Equirectangular проекции
|
||
// Формула: x = (lon + 180) * (width / 360), y = (90 - lat) * (height / 180)
|
||
// Для canvas 1100x600
|
||
|
||
const locations = [
|
||
// Европа
|
||
{ id: 'london', name: 'Лондон', type: 'city', lat: 51.5074, lon: -0.1278, country: 'Великобритания', icon: '🏙️', continent: 'Европа' },
|
||
{ id: 'paris', name: 'Париж', type: 'city', lat: 48.8566, lon: 2.3522, country: 'Франция', icon: '🏙️', continent: 'Европа' },
|
||
{ id: 'rotterdam', name: 'Роттердам', type: 'port', lat: 51.9225, lon: 4.4792, country: 'Нидерланды', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'hamburg', name: 'Гамбург', type: 'port', lat: 53.5511, lon: 9.9937, country: 'Германия', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'barcelona', name: 'Барселона', type: 'port', lat: 41.3851, lon: 2.1734, country: 'Испания', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'rome', name: 'Рим', type: 'city', lat: 41.9028, lon: 12.4964, country: 'Италия', icon: '🏙️', continent: 'Европа' },
|
||
{ id: 'athens', name: 'Афины', type: 'port', lat: 37.9838, lon: 23.7275, country: 'Греция', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'limassol', name: 'Лимассол', type: 'port', lat: 34.6751, lon: 33.0443, country: 'Кипр', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'istanbul', name: 'Стамбул', type: 'hub', lat: 41.0082, lon: 28.9784, country: 'Турция', icon: '🏭', continent: 'Европа/Азия' },
|
||
{ id: 'moscow', name: 'Москва', type: 'hub', lat: 55.7558, lon: 37.6173, country: 'Россия', icon: '🏭', continent: 'Европа' },
|
||
{ id: 'stpetersburg', name: 'Санкт-Петербург', type: 'port', lat: 59.9343, lon: 30.3351, country: 'Россия', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'murmansk', name: 'Мурманск', type: 'port', lat: 68.9667, lon: 33.0833, country: 'Россия', icon: '🚢', continent: 'Европа' },
|
||
{ id: 'nuuk', name: 'Нуук', type: 'port', lat: 64.1814, lon: -51.6941, country: 'Гренландия', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'sevastopol', name: 'Севастополь', type: 'port', lat: 44.6167, lon: 33.5250, country: 'Россия', icon: '🚢', continent: 'Европа' },
|
||
|
||
// Ближний Восток и Африка
|
||
{ id: 'tangier', name: 'Танжер', type: 'port', lat: 35.7595, lon: -5.8335, country: 'Марокко', icon: '🚢', continent: 'Африка' },
|
||
{ id: 'cairo', name: 'Каир', type: 'city', lat: 30.0444, lon: 31.2357, country: 'Египет', icon: '🏙️', continent: 'Африка' },
|
||
{ id: 'dubai', name: 'Дубай', type: 'port', lat: 25.2048, lon: 55.2708, country: 'ОАЭ', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'capetown', name: 'Кейптаун', type: 'port', lat: -33.9249, lon: 18.4241, country: 'ЮАР', icon: '🚢', continent: 'Африка' },
|
||
{ id: 'lagos', name: 'Лагос', type: 'port', lat: 6.5244, lon: 3.3792, country: 'Нигерия', icon: '🚢', continent: 'Африка' },
|
||
{ id: 'toamasina', name: 'Туамасина', type: 'port', lat: -18.1492, lon: 49.4023, country: 'Мадагаскар', icon: '🚢', continent: 'Африка' },
|
||
{ id: 'nairobi', name: 'Найроби', type: 'hub', lat: -1.2864, lon: 36.8172, country: 'Кения', icon: '🏭', continent: 'Африка' },
|
||
|
||
// Азия
|
||
{ id: 'mumbai', name: 'Мумбаи', type: 'port', lat: 19.0760, lon: 72.8777, country: 'Индия', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'mundra', name: 'Мундра', type: 'port', lat: 22.75, lon: 69.7167, country: 'Индия', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'chennai', name: 'Ченнаи', type: 'port', lat: 13.0833, lon: 80.2833, country: 'Индия', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'delhi', name: 'Дели', type: 'hub', lat: 28.7041, lon: 77.1025, country: 'Индия', icon: '🏭', continent: 'Азия' },
|
||
{ id: 'singapore', name: 'Сингапур', type: 'port', lat: 1.3521, lon: 103.8198, country: 'Сингапур', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'jakarta', name: 'Танджунг Приок (Джакарта)', type: 'port', lat: -6.1214, lon: 106.8814, country: 'Индонезия', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'belawan', name: 'Белаван (Медан)', type: 'port', lat: 3.7894, lon: 98.6977, country: 'Индонезия', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'bangkok', name: 'Бангкок', type: 'hub', lat: 13.7563, lon: 100.5018, country: 'Таиланд', icon: '🏭', continent: 'Азия' },
|
||
{ id: 'hongkong', name: 'Гонконг', type: 'port', lat: 22.3193, lon: 114.1694, country: 'Китай', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'shanghai', name: 'Шанхай', type: 'port', lat: 31.2304, lon: 121.4737, country: 'Китай', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'beijing', name: 'Пекин', type: 'city', lat: 39.9042, lon: 116.4074, country: 'Китай', icon: '🏙️', continent: 'Азия' },
|
||
{ id: 'tianjin', name: 'Тяньцзинь', type: 'port', lat: 38.9667, lon: 117.7833, country: 'Китай', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'qingdao', name: 'Циндао', type: 'port', lat: 36.0667, lon: 120.3167, country: 'Китай', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'tokyo', name: 'Токио', type: 'port', lat: 35.6762, lon: 139.6503, country: 'Япония', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'seoul', name: 'Сеул', type: 'hub', lat: 37.5665, lon: 126.9780, country: 'Южная Корея', icon: '🏭', continent: 'Азия' },
|
||
{ id: 'busan', name: 'Пусан', type: 'port', lat: 35.1, lon: 129.0333, country: 'Южная Корея', icon: '🚢', continent: 'Азия' },
|
||
{ id: 'vladivostok', name: 'Владивосток', type: 'port', lat: 43.1332, lon: 131.9113, country: 'Россия', icon: '🚢', continent: 'Азия' },
|
||
|
||
// Америка
|
||
{ id: 'newyork', name: 'Нью-Йорк', type: 'port', lat: 40.7128, lon: -74.0060, country: 'США', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'washington', name: 'Вашингтон', type: 'city', lat: 38.9072, lon: -77.0369, country: 'США', icon: '🏙️', continent: 'Северная Америка' },
|
||
{ id: 'chicago', name: 'Чикаго', type: 'hub', lat: 41.8781, lon: -87.6298, country: 'США', icon: '🏭', continent: 'Северная Америка' },
|
||
{ id: 'losangeles', name: 'Лос-Анджелес', type: 'port', lat: 34.0522, lon: -118.2437, country: 'США', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'vancouver', name: 'Ванкувер', type: 'port', lat: 49.2833, lon: -123.1167, country: 'Канада', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'miami', name: 'Майами', type: 'port', lat: 25.7617, lon: -80.1918, country: 'США', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'havana', name: 'Гавана', type: 'port', lat: 23.1136, lon: -82.3666, country: 'Куба', icon: '🚢', continent: 'Северная Америка' },
|
||
{ id: 'mexicocity', name: 'Мехико', type: 'hub', lat: 19.4326, lon: -99.1332, country: 'Мексика', icon: '🏭', continent: 'Северная Америка' },
|
||
{ id: 'colon', name: 'Колон', type: 'port', lat: 9.35, lon: -79.9, country: 'Панама', icon: '🚢', continent: 'Центральная Америка' },
|
||
{ id: 'paramaribo', name: 'Парамарибо', type: 'port', lat: 5.8520, lon: -55.2038, country: 'Суринам', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'cumana', name: 'Кумана', type: 'port', lat: 10.4631, lon: -64.1814, country: 'Венесуэла', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'lima', name: 'Лима', type: 'port', lat: -12.0464, lon: -77.0428, country: 'Перу', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'puntarenas', name: 'Пунта-Аренас', type: 'port', lat: -53.1638, lon: -70.9171, country: 'Чили', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'riodejaneiro', name: 'Рио-де-Жанейро', type: 'port', lat: -22.9068, lon: -43.1729, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'santos', name: 'Сантос', type: 'port', lat: -23.9667, lon: -46.3167, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'natal', name: 'Натал', type: 'port', lat: -5.7945, lon: -35.2119, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
|
||
{ id: 'buenosaires', name: 'Буэнос-Айрес', type: 'port', lat: -34.6037, lon: -58.3816, country: 'Аргентина', icon: '🚢', continent: 'Южная Америка' },
|
||
|
||
// Океания
|
||
{ id: 'sydney', name: 'Сидней', type: 'port', lat: -33.8688, lon: 151.2093, country: 'Австралия', icon: '🚢', continent: 'Океания' },
|
||
{ id: 'melbourne', name: 'Мельбурн', type: 'port', lat: -37.8136, lon: 144.9631, country: 'Австралия', icon: '🚢', continent: 'Океания' },
|
||
{ id: 'auckland', name: 'Окленд', type: 'port', lat: -36.8485, lon: 174.7633, country: 'Новая Зеландия', icon: '🚢', continent: 'Океания' },
|
||
];
|
||
|
||
// Координаты теперь рассчитываются динамически в map.js на основе lat/lon
|
||
|
||
// Путевые точки на основных морских маршрутах (waypoints)
|
||
// Создаем плотную сетку точек для равномерного перемещения
|
||
const waypoints = [
|
||
// Транс-Атлантика: Нью-Йорк - Европа (убрали слишком близкие точки)
|
||
{ id: 'atl_2', lat: 44, lon: -60, name: 'Атлантика (44°N, 60°W)' },
|
||
{ id: 'atl_3', lat: 46, lon: -50, name: 'Атлантика (46°N, 50°W)' },
|
||
{ id: 'atl_4', lat: 48, lon: -40, name: 'Атлантика (48°N, 40°W)' },
|
||
{ id: 'atl_5', lat: 50, lon: -30, name: 'Атлантика (50°N, 30°W)' },
|
||
{ id: 'atl_6', lat: 51, lon: -20, name: 'Атлантика (51°N, 20°W)' },
|
||
|
||
// Восточное побережье США (убрали слишком близкие)
|
||
{ id: 'us_east_2', lat: 33, lon: -78, name: 'Вост. побережье (33°N, 78°W)' },
|
||
|
||
// Внутренние маршруты через США (между Чикаго и Лос-Анджелесом)
|
||
{ id: 'us_inland_1', lat: 40, lon: -100, name: 'Средний Запад (40°N, 100°W)' },
|
||
{ id: 'us_inland_2', lat: 38, lon: -105, name: 'Средний Запад (38°N, 105°W)' },
|
||
{ id: 'us_inland_3', lat: 36, lon: -110, name: 'Юго-Запад (36°N, 110°W)' },
|
||
{ id: 'us_inland_4', lat: 35, lon: -115, name: 'Юго-Запад (35°N, 115°W)' },
|
||
|
||
// Северная Атлантика - между Майами и центральной Атлантикой
|
||
{ id: 'atl_n_1', lat: 26, lon: -75, name: 'Север. Атлантика (26°N, 75°W)' },
|
||
{ id: 'atl_n_2', lat: 28, lon: -70, name: 'Север. Атлантика (28°N, 70°W)' },
|
||
{ id: 'atl_n_3', lat: 30, lon: -65, name: 'Север. Атлантика (30°N, 65°W)' },
|
||
{ id: 'atl_n_4', lat: 28, lon: -55, name: 'Север. Атлантика (28°N, 55°W)' },
|
||
{ id: 'atl_n_5', lat: 25, lon: -45, name: 'Север. Атлантика (25°N, 45°W)' },
|
||
{ id: 'atl_n_6', lat: 22, lon: -38, name: 'Север. Атлантика (22°N, 38°W)' },
|
||
{ id: 'atl_n_7', lat: 19, lon: -30, name: 'Север. Атлантика (19°N, 30°W)' },
|
||
{ id: 'atl_n_8', lat: 17, lon: -25, name: 'Север. Атлантика (17°N, 25°W)' },
|
||
|
||
// Карибское море (плотная сетка)
|
||
{ id: 'car_1', lat: 23, lon: -75, name: 'Карибское море (23°N, 75°W)' },
|
||
{ id: 'car_2', lat: 20, lon: -75, name: 'Карибское море (20°N, 75°W)' },
|
||
{ id: 'car_3', lat: 18, lon: -78, name: 'Карибское море (18°N, 78°W)' },
|
||
{ id: 'car_4', lat: 16, lon: -82, name: 'Карибское море (16°N, 82°W)' },
|
||
{ id: 'car_5', lat: 14, lon: -80, name: 'Карибское море (14°N, 80°W)' },
|
||
{ id: 'car_6', lat: 12, lon: -75, name: 'Карибское море (12°N, 75°W)' },
|
||
{ id: 'car_7', lat: 15, lon: -70, name: 'Карибское море (15°N, 70°W)' },
|
||
|
||
// Панамский канал и подходы
|
||
{ id: 'panama_w', lat: 10, lon: -82, name: 'Подход к Панаме' },
|
||
{ id: 'panama_canal', lat: 9, lon: -79.5, name: 'Панамский канал' },
|
||
{ id: 'panama_e', lat: 8, lon: -77, name: 'Тихий океан' },
|
||
|
||
// Тихий океан - Восточная часть (США)
|
||
{ id: 'pac_e_1', lat: 36, lon: -122, name: 'Тихий океан (36°N, 122°W)' },
|
||
{ id: 'pac_e_2', lat: 32, lon: -118, name: 'Тихий океан (32°N, 118°W)' },
|
||
{ id: 'pac_e_3', lat: 28, lon: -115, name: 'Тихий океан (28°N, 115°W)' },
|
||
{ id: 'pac_e_4', lat: 24, lon: -112, name: 'Тихий океан (24°N, 112°W)' },
|
||
{ id: 'pac_e_5', lat: 20, lon: -110, name: 'Тихий океан (20°N, 110°W)' },
|
||
{ id: 'pac_e_6', lat: 16, lon: -105, name: 'Тихий океан (16°N, 105°W)' },
|
||
{ id: 'pac_e_7', lat: 12, lon: -95, name: 'Тихий океан (12°N, 95°W)' },
|
||
{ id: 'pac_e_8', lat: 8, lon: -90, name: 'Тихий океан (8°N, 90°W)' },
|
||
{ id: 'pac_e_9', lat: 4, lon: -85, name: 'Тихий океан (4°N, 85°W)' },
|
||
|
||
// Южная Америка - Тихоокеанское побережье
|
||
{ id: 'sa_pac_1', lat: 0, lon: -82, name: 'Тихий океан (0°, 82°W)' },
|
||
{ id: 'sa_pac_2', lat: -4, lon: -80, name: 'Тихий океан (4°S, 80°W)' },
|
||
{ id: 'sa_pac_3', lat: -8, lon: -79, name: 'Тихий океан (8°S, 79°W)' },
|
||
{ id: 'sa_pac_4', lat: -12, lon: -78, name: 'Тихий океан (12°S, 78°W)' },
|
||
{ id: 'sa_pac_5', lat: -16, lon: -76, name: 'Тихий океан (16°S, 76°W)' },
|
||
{ id: 'sa_pac_6', lat: -20, lon: -72, name: 'Тихий океан (20°S, 72°W)' },
|
||
{ id: 'sa_pac_7', lat: -25, lon: -71, name: 'Тихий океан (25°S, 71°W)' },
|
||
{ id: 'sa_pac_8', lat: -30, lon: -72, name: 'Тихий океан (30°S, 72°W)' },
|
||
{ id: 'sa_pac_9', lat: -35, lon: -73, name: 'Тихий океан (35°S, 73°W)' },
|
||
{ id: 'sa_pac_10', lat: -40, lon: -74, name: 'Тихий океан (40°S, 74°W)' },
|
||
{ id: 'sa_pac_11', lat: -45, lon: -75, name: 'Тихий океан (45°S, 75°W)' },
|
||
{ id: 'sa_pac_12', lat: -50, lon: -76, name: 'Тихий океан (50°S, 76°W)' },
|
||
|
||
// Мыс Горн
|
||
{ id: 'horn_1', lat: -54, lon: -70, name: 'Мыс Горн' },
|
||
{ id: 'horn_2', lat: -56, lon: -68, name: 'Мыс Горн' },
|
||
{ id: 'horn_3', lat: -55, lon: -65, name: 'Мыс Горн' },
|
||
|
||
// Южная Америка - Атлантическое побережье (добавлено больше точек)
|
||
{ id: 'sa_atl_1', lat: -50, lon: -62, name: 'Атлантика (50°S, 62°W)' },
|
||
{ id: 'sa_atl_2', lat: -45, lon: -60, name: 'Атлантика (45°S, 60°W)' },
|
||
{ id: 'sa_atl_3', lat: -40, lon: -58, name: 'Атлантика (40°S, 58°W)' },
|
||
{ id: 'sa_atl_4', lat: -35, lon: -56, name: 'Атлантика (35°S, 56°W)' },
|
||
{ id: 'sa_atl_5', lat: -30, lon: -52, name: 'Атлантика (30°S, 52°W)' },
|
||
{ id: 'sa_atl_6', lat: -25, lon: -48, name: 'Атлантика (25°S, 48°W)' },
|
||
{ id: 'sa_atl_7', lat: -20, lon: -44, name: 'Атлантика (20°S, 44°W)' },
|
||
{ id: 'sa_atl_8', lat: -15, lon: -40, name: 'Атлантика (15°S, 40°W)' },
|
||
{ id: 'sa_atl_9', lat: -10, lon: -36, name: 'Атлантика (10°S, 36°W)' },
|
||
{ id: 'sa_atl_10', lat: -5, lon: -32, name: 'Атлантика (5°S, 32°W)' },
|
||
|
||
// Северное побережье Южной Америки (от Парамарибо к Наталу)
|
||
{ id: 'sa_north_1', lat: 2, lon: -50, name: 'Сев. побережье Ю.Америки (2°N, 50°W)' },
|
||
{ id: 'sa_north_2', lat: 0, lon: -45, name: 'Сев. побережье Ю.Америки (0°, 45°W)' },
|
||
{ id: 'sa_north_3', lat: -2, lon: -40, name: 'Сев. побережье Ю.Америки (2°S, 40°W)' },
|
||
|
||
// Южная Атлантика - между Ю.Америкой и Африкой (МНОГО точек)
|
||
{ id: 's_atl_1', lat: -5, lon: -28, name: 'Южн. Атлантика 16' },
|
||
{ id: 's_atl_2', lat: -5, lon: -24, name: 'Южн. Атлантика 15' },
|
||
{ id: 's_atl_3', lat: -5, lon: -20, name: 'Южн. Атлантика 14' },
|
||
{ id: 's_atl_4', lat: -5, lon: -16, name: 'Южн. Атлантика 13' },
|
||
{ id: 's_atl_5', lat: -5, lon: -12, name: 'Южн. Атлантика 12' },
|
||
{ id: 's_atl_6', lat: -5, lon: -8, name: 'Южн. Атлантика 11' },
|
||
|
||
// Центральная Атлантика
|
||
{ id: 'atl_mid_1', lat: 0, lon: -28, name: 'Атлантика (0°, 28°W)' },
|
||
{ id: 'atl_mid_2', lat: 5, lon: -25, name: 'Атлантика (5°N, 25°W)' },
|
||
{ id: 'atl_mid_3', lat: 10, lon: -22, name: 'Атлантика (10°N, 22°W)' },
|
||
{ id: 'atl_mid_4', lat: 15, lon: -20, name: 'Атлантика (15°N, 20°W)' },
|
||
{ id: 'atl_mid_5', lat: 20, lon: -18, name: 'Атлантика (20°N, 18°W)' },
|
||
{ id: 'atl_mid_6', lat: 25, lon: -16, name: 'Атлантика (25°N, 16°W)' },
|
||
{ id: 'atl_mid_7', lat: 30, lon: -14, name: 'Атлантика (30°N, 14°W)' },
|
||
|
||
// Западная Африка
|
||
{ id: 'waf_1', lat: 33, lon: -10, name: 'Африка' },
|
||
{ id: 'waf_2', lat: 28, lon: -12, name: 'Африка' },
|
||
{ id: 'waf_3', lat: 23, lon: -15, name: 'Африка' },
|
||
{ id: 'waf_4', lat: 18, lon: -17, name: 'Африка' },
|
||
{ id: 'waf_5', lat: 13, lon: -18, name: 'Африка' },
|
||
{ id: 'waf_6', lat: 8, lon: -15, name: 'Африка' },
|
||
{ id: 'waf_7', lat: 3, lon: -10, name: 'Африка' },
|
||
{ id: 'waf_8', lat: -2, lon: -5, name: 'Африка' },
|
||
{ id: 'waf_9', lat: -7, lon: 0, name: 'Африка' },
|
||
{ id: 'waf_10', lat: -12, lon: 5, name: 'Африка' },
|
||
{ id: 'waf_11', lat: -17, lon: 8, name: 'Африка' },
|
||
{ id: 'waf_12', lat: -22, lon: 10, name: 'Африка' },
|
||
{ id: 'waf_13', lat: -27, lon: 13, name: 'Африка' },
|
||
{ id: 'waf_14', lat: -32, lon: 16, name: 'Африка' },
|
||
|
||
// Мыс Доброй Надежды
|
||
{ id: 'cape_1', lat: -35, lon: 18, name: 'Мыс Доброй Надежды' },
|
||
{ id: 'cape_2', lat: -36, lon: 20, name: 'Мыс Доброй Надежды' },
|
||
{ id: 'cape_3', lat: -35, lon: 23, name: 'Мыс Доброй Надежды' },
|
||
|
||
// Восточная Африка
|
||
{ id: 'eaf_1', lat: -32, lon: 28, name: 'Африка' },
|
||
{ id: 'eaf_2', lat: -27, lon: 32, name: 'Африка' },
|
||
{ id: 'eaf_3', lat: -22, lon: 35, name: 'Африка' },
|
||
{ id: 'eaf_4', lat: -17, lon: 38, name: 'Африка' },
|
||
{ id: 'eaf_5', lat: -12, lon: 40, name: 'Африка' },
|
||
{ id: 'eaf_6', lat: -7, lon: 42, name: 'Африка' },
|
||
{ id: 'eaf_7', lat: -2, lon: 43, name: 'Африка' },
|
||
{ id: 'eaf_8', lat: 3, lon: 42, name: 'Африка' },
|
||
{ id: 'eaf_9', lat: 8, lon: 45, name: 'Африка' },
|
||
{ id: 'eaf_10', lat: 13, lon: 48, name: 'Африка' },
|
||
|
||
// К Мадагаскару от восточного побережья Африки
|
||
{ id: 'mad_1', lat: -8, lon: 45, name: 'Мозамбикский пролив' },
|
||
{ id: 'mad_2', lat: -12, lon: 46, name: 'Мозамбикский пролив' },
|
||
{ id: 'mad_3', lat: -16, lon: 47.5, name: 'Мозамбикский пролив' },
|
||
|
||
// Красное море (без Суэца)
|
||
{ id: 'red_1', lat: 17, lon: 40, name: 'Красное море' },
|
||
{ id: 'red_2', lat: 20, lon: 38, name: 'Красное море' },
|
||
{ id: 'red_3', lat: 23, lon: 36, name: 'Красное море' },
|
||
{ id: 'red_4', lat: 26, lon: 34, name: 'Красное море' },
|
||
|
||
// Черное море
|
||
{ id: 'black_1', lat: 42.5, lon: 31, name: 'Черное море' },
|
||
|
||
// Средиземное море
|
||
{ id: 'med_1', lat: 32, lon: 28, name: 'Средиземное море' },
|
||
{ id: 'med_2', lat: 34, lon: 24, name: 'Средиземное море' },
|
||
{ id: 'med_3', lat: 35, lon: 20, name: 'Средиземное море' },
|
||
{ id: 'med_4', lat: 36, lon: 16, name: 'Средиземное море' },
|
||
{ id: 'med_5', lat: 38, lon: 12, name: 'Средиземное море' },
|
||
{ id: 'med_6', lat: 39, lon: 8, name: 'Средиземное море' },
|
||
{ id: 'med_7', lat: 40, lon: 4, name: 'Средиземное море' },
|
||
|
||
// Восточное Средиземное море (к Кипру)
|
||
{ id: 'med_e_1', lat: 34, lon: 30, name: 'Восточ. Средиземноморье' },
|
||
{ id: 'med_e_2', lat: 35, lon: 28, name: 'Восточ. Средиземноморье' },
|
||
{ id: 'gibraltar', lat: 36, lon: -5.5, name: 'Гибралтар' },
|
||
|
||
// Северная Европа
|
||
{ id: 'neur_1', lat: 45, lon: -4, name: 'Атлантика' },
|
||
{ id: 'neur_2', lat: 48, lon: -2, name: 'Атлантика' },
|
||
{ id: 'neur_3', lat: 50, lon: 0, name: 'Атлантика' },
|
||
{ id: 'neur_4', lat: 52, lon: 2, name: 'Северное море' },
|
||
{ id: 'neur_5', lat: 54, lon: 5, name: 'Северное море' },
|
||
|
||
// Северный морской путь (к Мурманску)
|
||
{ id: 'north_1', lat: 62, lon: 10, name: 'Северное море' },
|
||
{ id: 'north_2', lat: 65, lon: 18, name: 'Баренцево море' },
|
||
{ id: 'north_3', lat: 67, lon: 25, name: 'Баренцево море' },
|
||
|
||
// К Гренландии (Северная Атлантика)
|
||
{ id: 'greenland_1', lat: 60, lon: -25, name: 'Северная Атлантика' },
|
||
{ id: 'greenland_2', lat: 62, lon: -30, name: 'Северная Атлантика' },
|
||
{ id: 'greenland_3', lat: 63, lon: -40, name: 'Северная Атлантика' },
|
||
|
||
// Индийский океан (расширенный)
|
||
{ id: 'ind_1', lat: 15, lon: 55, name: 'Индийский океан' },
|
||
{ id: 'ind_2', lat: 12, lon: 60, name: 'Индийский океан' },
|
||
{ id: 'ind_3', lat: 10, lon: 65, name: 'Индийский океан' },
|
||
{ id: 'ind_4', lat: 8, lon: 70, name: 'Индийский океан' },
|
||
{ id: 'ind_5', lat: 5, lon: 75, name: 'Индийский океан' },
|
||
{ id: 'ind_6', lat: 2, lon: 80, name: 'Индийский океан' },
|
||
{ id: 'ind_7', lat: 0, lon: 85, name: 'Индийский океан' },
|
||
{ id: 'ind_8', lat: -2, lon: 90, name: 'Индийский океан' },
|
||
{ id: 'ind_9', lat: -3, lon: 95, name: 'Индийский океан' },
|
||
|
||
// Индийский океан - к Австралии (новый маршрут от Африки)
|
||
{ id: 'ind_s_1', lat: -10, lon: 50, name: 'Индийский океан' },
|
||
{ id: 'ind_s_2', lat: -15, lon: 55, name: 'Индийский океан' },
|
||
{ id: 'ind_s_3', lat: -20, lon: 60, name: 'Индийский океан' },
|
||
{ id: 'ind_s_4', lat: -25, lon: 65, name: 'Индийский океан' },
|
||
{ id: 'ind_s_5', lat: -28, lon: 70, name: 'Индийский океан' },
|
||
{ id: 'ind_s_6', lat: -30, lon: 75, name: 'Индийский океан' },
|
||
{ id: 'ind_s_7', lat: -32, lon: 80, name: 'Индийский океан' },
|
||
{ id: 'ind_s_8', lat: -33, lon: 90, name: 'Индийский океан' },
|
||
{ id: 'ind_s_9', lat: -33, lon: 100, name: 'Индийский океан' },
|
||
{ id: 'ind_s_10', lat: -32, lon: 110, name: 'Индийский океан' },
|
||
{ id: 'ind_s_11', lat: -30, lon: 120, name: 'Индийский океан' },
|
||
{ id: 'ind_s_12', lat: -28, lon: 130, name: 'Индийский океан' },
|
||
{ id: 'ind_s_13', lat: -26, lon: 140, name: 'Индийский океан' },
|
||
|
||
// Малаккский пролив
|
||
{ id: 'malacca_1', lat: 6, lon: 98, name: 'Малаккский пролив' },
|
||
{ id: 'malacca_2', lat: 4, lon: 100, name: 'Малаккский пролив' },
|
||
{ id: 'malacca_3', lat: 2, lon: 102, name: 'Малаккский пролив' },
|
||
|
||
// Яванское море (между Джакартой и Сингапуром)
|
||
{ id: 'java_1', lat: -2, lon: 105, name: 'Яванское море' },
|
||
{ id: 'java_2', lat: 0, lon: 104, name: 'Яванское море' },
|
||
|
||
// Южно-Китайское море
|
||
{ id: 'scs_1', lat: 4, lon: 106, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_2', lat: 7, lon: 109, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_3', lat: 10, lon: 112, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_4', lat: 13, lon: 114, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_5', lat: 16, lon: 116, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_6', lat: 19, lon: 117, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_7', lat: 22, lon: 118, name: 'Южно-Китайское море' },
|
||
{ id: 'scs_8', lat: 25, lon: 120, name: 'Восточно-Китайское море' },
|
||
{ id: 'scs_9', lat: 28, lon: 122, name: 'Восточно-Китайское море' },
|
||
{ id: 'scs_10', lat: 31, lon: 125, name: 'Восточно-Китайское море' },
|
||
|
||
// К Японии
|
||
{ id: 'jap_1', lat: 33, lon: 130, name: 'Японское море' },
|
||
{ id: 'jap_2', lat: 35, lon: 135, name: 'Тихий океан' },
|
||
|
||
// Тихий океан - Западная часть
|
||
{ id: 'pac_w_1', lat: 30, lon: 145, name: 'Тихий океан' },
|
||
{ id: 'pac_w_2', lat: 25, lon: 150, name: 'Тихий океан' },
|
||
{ id: 'pac_w_3', lat: 20, lon: 155, name: 'Тихий океан' },
|
||
{ id: 'pac_w_4', lat: 15, lon: 160, name: 'Тихий океан' },
|
||
{ id: 'pac_w_5', lat: 10, lon: 165, name: 'Тихий океан' },
|
||
{ id: 'pac_w_6', lat: 5, lon: 170, name: 'Тихий океан' },
|
||
{ id: 'pac_w_7', lat: 0, lon: 175, name: 'Тихий океан' },
|
||
{ id: 'pac_w_8', lat: -5, lon: 178, name: 'Тихий океан' },
|
||
|
||
// К Австралии
|
||
{ id: 'aus_1', lat: -10, lon: 142, name: 'Коралловое море' },
|
||
{ id: 'aus_2', lat: -15, lon: 145, name: 'Коралловое море' },
|
||
{ id: 'aus_3', lat: -20, lon: 148, name: 'Коралловое море' },
|
||
{ id: 'aus_4', lat: -25, lon: 150, name: 'Коралловое море' },
|
||
{ id: 'aus_5', lat: -30, lon: 152, name: 'Тасманово море' },
|
||
{ id: 'aus_6', lat: -35, lon: 155, name: 'Тасманово море' },
|
||
{ id: 'aus_7', lat: -37, lon: 160, name: 'Тасманово море' },
|
||
|
||
// К Новой Зеландии
|
||
{ id: 'nz_1', lat: -38, lon: 168, name: 'Тасманово море' },
|
||
{ id: 'nz_2', lat: -37, lon: 172, name: 'Тасманово море' },
|
||
|
||
// Транс-Тихоокеанский маршрут
|
||
{ id: 'pac_c_1', lat: 35, lon: 160, name: 'Тихий океан' },
|
||
{ id: 'pac_c_2', lat: 35, lon: 170, name: 'Тихий океан' },
|
||
{ id: 'pac_c_3', lat: 35, lon: 180, name: 'Тихий океан' },
|
||
{ id: 'pac_c_4', lat: 35, lon: -170, name: 'Тихий океан' },
|
||
{ id: 'pac_c_5', lat: 35, lon: -160, name: 'Тихий океан' },
|
||
{ id: 'pac_c_6', lat: 35, lon: -150, name: 'Тихий океан' },
|
||
{ id: 'pac_c_7', lat: 35, lon: -140, name: 'Тихий океан' },
|
||
{ id: 'pac_c_8', lat: 35, lon: -130, name: 'Тихий океан' },
|
||
];
|
||
|
||
// Объединяем города и путевые точки
|
||
const allPoints = [...locations, ...waypoints];
|
||
|
||
// Функция для создания последовательных маршрутов (двунаправленные)
|
||
function createSequentialRoutes(ids) {
|
||
const routes = [];
|
||
for (let i = 0; i < ids.length - 1; i++) {
|
||
// Прямой маршрут
|
||
routes.push({ from: ids[i], to: ids[i + 1] });
|
||
// Обратный маршрут
|
||
routes.push({ from: ids[i + 1], to: ids[i] });
|
||
}
|
||
return routes;
|
||
}
|
||
|
||
// Функция для создания одностороннего маршрута
|
||
function createRoute(from, to) {
|
||
return [
|
||
{ from: from, to: to },
|
||
{ from: to, to: from }
|
||
];
|
||
}
|
||
|
||
// Маршруты между точками (основные морские пути)
|
||
const routes = [
|
||
// Города Европы - внутренние связи (двунаправленные)
|
||
...createRoute('london', 'rotterdam'),
|
||
...createRoute('london', 'paris'),
|
||
...createRoute('rotterdam', 'hamburg'),
|
||
...createRoute('hamburg', 'stpetersburg'),
|
||
...createRoute('stpetersburg', 'moscow'),
|
||
...createRoute('moscow', 'sevastopol'),
|
||
...createRoute('stpetersburg', 'murmansk'),
|
||
...createRoute('paris', 'barcelona'),
|
||
...createRoute('barcelona', 'tangier'),
|
||
...createRoute('barcelona', 'rome'),
|
||
...createRoute('rome', 'athens'),
|
||
...createRoute('athens', 'istanbul'),
|
||
|
||
// Америка
|
||
...createRoute('newyork', 'washington'),
|
||
...createRoute('newyork', 'chicago'),
|
||
// Чикаго - Лос-Анджелес через промежуточные точки (длинный маршрут)
|
||
...createSequentialRoutes(['chicago', 'us_inland_1', 'us_inland_2', 'us_inland_3', 'us_inland_4', 'losangeles']),
|
||
...createRoute('losangeles', 'vancouver'),
|
||
...createRoute('vancouver', 'pac_e_1'),
|
||
...createRoute('colon', 'panama_canal'),
|
||
|
||
// Азия - Китай
|
||
...createRoute('beijing', 'tianjin'),
|
||
...createRoute('tianjin', 'shanghai'),
|
||
...createRoute('shanghai', 'qingdao'),
|
||
...createRoute('qingdao', 'scs_10'),
|
||
|
||
// Азия - Корея и Япония
|
||
...createRoute('seoul', 'busan'),
|
||
...createRoute('busan', 'jap_1'),
|
||
...createRoute('busan', 'tokyo'),
|
||
...createRoute('tokyo', 'seoul'),
|
||
...createRoute('seoul', 'vladivostok'),
|
||
...createRoute('vladivostok', 'tokyo'),
|
||
|
||
// Азия - Индия
|
||
...createRoute('mumbai', 'mundra'),
|
||
...createRoute('mundra', 'mumbai'),
|
||
...createRoute('mumbai', 'delhi'),
|
||
...createRoute('mumbai', 'chennai'),
|
||
...createRoute('chennai', 'delhi'),
|
||
...createRoute('chennai', 'ind_6'),
|
||
|
||
// Южная Америка
|
||
...createRoute('riodejaneiro', 'santos'),
|
||
...createRoute('santos', 'buenosaires'),
|
||
// Прямой маршрут Лима -> Рио удален, должен проходить через мыс Горн
|
||
...createRoute('santos', 'sa_atl_8'),
|
||
|
||
// Океания
|
||
...createRoute('sydney', 'melbourne'),
|
||
|
||
// Транс-Атлантика: Нью-Йорк - Европа (цепочка)
|
||
...createSequentialRoutes(['newyork', 'atl_2', 'atl_3', 'atl_4', 'atl_5', 'atl_6', 'neur_3', 'london']),
|
||
...createSequentialRoutes(['neur_3', 'neur_4', 'neur_5', 'hamburg']),
|
||
...createSequentialRoutes(['hamburg', 'stpetersburg']),
|
||
...createSequentialRoutes(['stpetersburg', 'north_1', 'north_2', 'north_3', 'murmansk']),
|
||
...createSequentialRoutes(['newyork', 'atl_2', 'atl_3', 'atl_4', 'atl_5', 'atl_6', 'rotterdam']),
|
||
|
||
// Гренландия - Северная Атлантика
|
||
...createSequentialRoutes(['nuuk', 'greenland_1', 'greenland_2', 'greenland_3', 'atl_5', 'atl_6']),
|
||
...createSequentialRoutes(['nuuk', 'greenland_1', 'neur_3']),
|
||
|
||
// Восточное побережье США
|
||
...createRoute('newyork', 'washington'),
|
||
...createSequentialRoutes(['washington', 'us_east_2', 'miami']),
|
||
// Вашингтон - Северная Атлантика (середина)
|
||
...createSequentialRoutes(['washington', 'us_east_2', 'atl_n_3', 'atl_n_4', 'atl_n_5', 'atl_n_6']),
|
||
|
||
// Карибское море
|
||
...createSequentialRoutes(['miami', 'car_1', 'car_2', 'car_3', 'car_4', 'car_5', 'panama_w', 'panama_canal']),
|
||
...createSequentialRoutes(['miami', 'car_1', 'car_7', 'car_6']),
|
||
...createSequentialRoutes(['panama_canal', 'colon']),
|
||
// Гавана (Куба)
|
||
...createSequentialRoutes(['miami', 'car_1', 'havana']),
|
||
...createSequentialRoutes(['havana', 'car_2', 'car_3']),
|
||
// Кумана (Венесуэла)
|
||
...createSequentialRoutes(['cumana', 'car_6', 'car_7', 'car_1']),
|
||
// Кумана - Натал (северное побережье Южной Америки)
|
||
...createSequentialRoutes(['cumana', 'sa_north_1', 'sa_north_2', 'sa_north_3', 'sa_atl_10', 'sa_atl_9', 'natal']),
|
||
// Парамарибо (Суринам)
|
||
// Прямой маршрут paramaribo <-> car_6 удален (слишком короткий путь)
|
||
// Парамарибо - Натал (северное побережье Южной Америки)
|
||
...createSequentialRoutes(['paramaribo', 'sa_north_1', 'sa_north_2', 'sa_north_3', 'sa_atl_10', 'sa_atl_9', 'natal']),
|
||
|
||
// Тихий океан - восточная часть (США)
|
||
...createSequentialRoutes(['losangeles', 'pac_e_1', 'pac_e_2', 'pac_e_3', 'pac_e_4', 'pac_e_5', 'pac_e_6', 'pac_e_7', 'pac_e_8', 'pac_e_9', 'panama_canal']),
|
||
|
||
// Панама - Южная Америка (Тихий океан)
|
||
...createSequentialRoutes(['panama_canal', 'panama_e', 'sa_pac_1', 'sa_pac_2', 'sa_pac_3', 'sa_pac_4', 'lima']),
|
||
...createSequentialRoutes(['lima', 'sa_pac_5', 'sa_pac_6', 'sa_pac_7', 'sa_pac_8', 'sa_pac_9', 'sa_pac_10', 'sa_pac_11', 'sa_pac_12']),
|
||
|
||
// Мыс Горн
|
||
...createSequentialRoutes(['sa_pac_12', 'horn_1', 'horn_2', 'horn_3', 'sa_atl_1']),
|
||
// Пунта-Аренас (Чили) - на юге
|
||
...createSequentialRoutes(['puntarenas', 'horn_1', 'horn_2', 'horn_3']),
|
||
...createRoute('puntarenas', 'sa_pac_12'),
|
||
|
||
// Южная Америка - Атлантика
|
||
...createSequentialRoutes(['sa_atl_1', 'sa_atl_2', 'sa_atl_3', 'buenosaires']),
|
||
...createSequentialRoutes(['buenosaires', 'sa_atl_4', 'sa_atl_5', 'sa_atl_6', 'sa_atl_7', 'riodejaneiro']),
|
||
...createSequentialRoutes(['riodejaneiro', 'sa_atl_8', 'sa_atl_9', 'sa_atl_10']),
|
||
// Натал (Бразилия) - северо-восточное побережье
|
||
...createSequentialRoutes(['natal', 'sa_atl_8', 'sa_atl_9']),
|
||
...createRoute('natal', 'riodejaneiro'),
|
||
|
||
// Южная Атлантика - переход к Африке (через середину океана)
|
||
...createSequentialRoutes(['sa_atl_10', 's_atl_1', 's_atl_2', 's_atl_3', 's_atl_4', 's_atl_5', 's_atl_6', 'waf_8']),
|
||
|
||
// Центральная Атлантика (к северу)
|
||
...createSequentialRoutes(['sa_atl_10', 'atl_mid_1', 'atl_mid_2', 'atl_mid_3', 'atl_mid_4', 'atl_mid_5', 'atl_mid_6', 'atl_mid_7', 'waf_1']),
|
||
// Майами - Северная Атлантика (длинный маршрут)
|
||
...createSequentialRoutes(['miami', 'atl_n_1', 'atl_n_2', 'atl_n_3', 'atl_n_4', 'atl_n_5', 'atl_n_6', 'atl_n_7', 'atl_n_8', 'atl_mid_4']),
|
||
|
||
// Связи между маршрутами Нью-Йорка и Северной Атлантики (посередине)
|
||
...createRoute('atl_4', 'atl_n_5'),
|
||
...createRoute('atl_5', 'atl_n_6'),
|
||
...createRoute('atl_n_4', 'atl_4'),
|
||
...createRoute('atl_n_5', 'atl_5'),
|
||
|
||
// Западная Африка
|
||
...createSequentialRoutes(['waf_1', 'gibraltar']),
|
||
...createSequentialRoutes(['waf_1', 'waf_2', 'waf_3', 'waf_4', 'waf_5', 'waf_6', 'lagos']),
|
||
...createSequentialRoutes(['lagos', 'waf_7', 'waf_8', 'waf_9', 'waf_10', 'waf_11', 'waf_12', 'waf_13', 'waf_14']),
|
||
|
||
// Мыс Доброй Надежды
|
||
...createSequentialRoutes(['waf_14', 'cape_1', 'capetown', 'cape_2', 'cape_3']),
|
||
|
||
// Восточная Африка
|
||
...createSequentialRoutes(['cape_3', 'eaf_1', 'eaf_2', 'eaf_3', 'eaf_4', 'eaf_5', 'eaf_6', 'nairobi', 'eaf_7', 'eaf_8', 'eaf_9', 'eaf_10']),
|
||
|
||
// Красное море (без Суэца)
|
||
...createSequentialRoutes(['eaf_10', 'red_1', 'red_2', 'red_3', 'red_4', 'cairo']),
|
||
|
||
// Средиземное море (без Суэца)
|
||
...createSequentialRoutes(['cairo', 'med_1', 'med_2', 'athens']),
|
||
...createSequentialRoutes(['med_2', 'med_3', 'med_4', 'rome']),
|
||
...createSequentialRoutes(['med_4', 'med_5', 'med_6', 'barcelona']),
|
||
...createSequentialRoutes(['med_6', 'med_7', 'gibraltar']),
|
||
...createSequentialRoutes(['gibraltar', 'neur_1', 'neur_2', 'paris']),
|
||
...createSequentialRoutes(['neur_2', 'neur_3']),
|
||
...createSequentialRoutes(['istanbul', 'med_1']),
|
||
|
||
// Кипр - восточное Средиземное море
|
||
...createSequentialRoutes(['limassol', 'med_e_1', 'med_e_2', 'athens']),
|
||
...createSequentialRoutes(['limassol', 'med_e_1', 'med_1', 'istanbul']),
|
||
|
||
// Мадагаскар - Мозамбикский пролив
|
||
...createSequentialRoutes(['eaf_5', 'mad_1', 'mad_2', 'mad_3', 'toamasina']),
|
||
|
||
// Черное море
|
||
...createSequentialRoutes(['sevastopol', 'black_1', 'istanbul']),
|
||
|
||
// Индийский океан
|
||
...createSequentialRoutes(['eaf_10', 'ind_1', 'ind_2', 'dubai']),
|
||
...createSequentialRoutes(['ind_2', 'ind_3', 'ind_4', 'mumbai']),
|
||
...createSequentialRoutes(['mumbai', 'ind_5', 'ind_6', 'ind_7', 'ind_8', 'ind_9']),
|
||
|
||
// Малаккский пролив
|
||
...createSequentialRoutes(['ind_9', 'malacca_1', 'malacca_2', 'malacca_3', 'singapore']),
|
||
...createSequentialRoutes(['malacca_2', 'bangkok']),
|
||
// Белаван (Медан) - через Малаккский пролив
|
||
...createSequentialRoutes(['belawan', 'malacca_1', 'malacca_2', 'singapore']),
|
||
|
||
// Яванское море - Джакарта
|
||
...createSequentialRoutes(['jakarta', 'java_1', 'java_2', 'singapore']),
|
||
|
||
// Связь между портами Индонезии
|
||
...createRoute('jakarta', 'belawan'),
|
||
|
||
// Южно-Китайское море
|
||
...createSequentialRoutes(['singapore', 'scs_1', 'scs_2', 'scs_3', 'scs_4', 'scs_5', 'scs_6', 'scs_7', 'hongkong']),
|
||
...createSequentialRoutes(['hongkong', 'scs_8', 'scs_9', 'scs_10', 'shanghai']),
|
||
|
||
// К Японии и Владивостоку
|
||
...createSequentialRoutes(['shanghai', 'jap_1', 'jap_2', 'tokyo']),
|
||
...createSequentialRoutes(['scs_10', 'jap_1', 'seoul']),
|
||
...createSequentialRoutes(['tokyo', 'vladivostok']),
|
||
...createSequentialRoutes(['vladivostok', 'seoul']),
|
||
|
||
// Тихий океан - западная часть
|
||
...createSequentialRoutes(['tokyo', 'pac_w_1', 'pac_w_2', 'pac_w_3', 'pac_w_4', 'pac_w_5', 'pac_w_6', 'pac_w_7', 'pac_w_8']),
|
||
|
||
// К Австралии (с севера)
|
||
...createSequentialRoutes(['pac_w_5', 'aus_1', 'aus_2', 'aus_3', 'aus_4', 'aus_5', 'aus_6', 'aus_7', 'sydney']),
|
||
...createSequentialRoutes(['singapore', 'aus_1']),
|
||
|
||
// От Африки к Австралии через южный Индийский океан
|
||
...createSequentialRoutes(['capetown', 'ind_s_1', 'ind_s_2', 'ind_s_3', 'ind_s_4', 'ind_s_5', 'ind_s_6', 'ind_s_7', 'ind_s_8', 'ind_s_9', 'ind_s_10', 'ind_s_11', 'ind_s_12', 'ind_s_13', 'aus_4']),
|
||
...createSequentialRoutes(['nairobi', 'ind_s_1']),
|
||
...createSequentialRoutes(['cape_3', 'ind_s_2']),
|
||
|
||
// К Новой Зеландии
|
||
...createSequentialRoutes(['sydney', 'nz_1', 'nz_2', 'auckland']),
|
||
|
||
// Транс-Тихоокеанский маршрут
|
||
...createSequentialRoutes(['tokyo', 'pac_c_1', 'pac_c_2', 'pac_c_3', 'pac_c_4', 'pac_c_5', 'pac_c_6', 'pac_c_7', 'pac_c_8', 'pac_e_1', 'losangeles']),
|
||
|
||
// ===== ПЕРЕКРЕСТНЫЕ СВЯЗИ (чтобы можно было переходить между маршрутами) =====
|
||
|
||
// Связи только между близкими параллельными маршрутами (не через весь океан)
|
||
// Атлантика - Африка (только ближайшие точки)
|
||
...createRoute('atl_mid_7', 'waf_1'),
|
||
|
||
// Карибское море - Центральная Атлантика (удалены прямые маршруты, должны проходить через промежуточные точки)
|
||
|
||
// Восточная Африка - Индийский океан (соединение двух путей)
|
||
...createRoute('eaf_10', 'ind_1'),
|
||
...createRoute('eaf_9', 'ind_1'),
|
||
...createRoute('eaf_8', 'ind_2'),
|
||
|
||
// Средиземное море - Европа (больше связей)
|
||
...createRoute('med_7', 'neur_1'),
|
||
...createRoute('med_6', 'paris'),
|
||
...createRoute('med_5', 'rome'),
|
||
...createRoute('med_4', 'athens'),
|
||
|
||
// Гибралтар - связи
|
||
...createRoute('gibraltar', 'barcelona'),
|
||
...createRoute('gibraltar', 'tangier'),
|
||
...createRoute('gibraltar', 'waf_1'),
|
||
|
||
// Северная Европа - Атлантика (только близкие)
|
||
...createRoute('neur_3', 'atl_6'),
|
||
...createRoute('neur_2', 'atl_6'),
|
||
|
||
// Панама - множественные подходы
|
||
...createRoute('panama_canal', 'car_5'),
|
||
...createRoute('panama_w', 'car_4'),
|
||
|
||
// Восточное побережье США - Атлантика (только ближайшие)
|
||
...createRoute('us_east_2', 'car_1'),
|
||
...createRoute('miami', 'car_1'),
|
||
|
||
// Тихий океан восток - Панама
|
||
...createRoute('pac_e_9', 'panama_e'),
|
||
...createRoute('pac_e_8', 'panama_canal'),
|
||
|
||
// Южная Америка - перекрёстные связи
|
||
...createRoute('sa_pac_1', 'panama_e'),
|
||
// Прямой маршрут sa_atl_10 -> car_6 удален (слишком короткий путь через океан)
|
||
|
||
// Индийский океан - Малакка (больше связей)
|
||
...createRoute('ind_8', 'malacca_1'),
|
||
...createRoute('ind_7', 'malacca_1'),
|
||
|
||
// Южно-Китайское море - Индийский океан
|
||
...createRoute('scs_1', 'ind_9'),
|
||
...createRoute('scs_1', 'malacca_3'),
|
||
|
||
// Австралия - множественные подходы
|
||
...createRoute('aus_1', 'scs_1'),
|
||
...createRoute('aus_1', 'ind_9'),
|
||
|
||
// Тихий океан запад - к разным направлениям
|
||
...createRoute('pac_w_4', 'aus_1'),
|
||
...createRoute('pac_w_3', 'aus_2'),
|
||
|
||
// Япония - Тихий океан (больше выходов)
|
||
...createRoute('jap_2', 'pac_w_1'),
|
||
...createRoute('tokyo', 'pac_w_1'),
|
||
...createRoute('vladivostok', 'pac_w_1'),
|
||
|
||
// Санкт-Петербург связи
|
||
...createRoute('stpetersburg', 'neur_5'),
|
||
...createRoute('stpetersburg', 'london'),
|
||
...createRoute('murmansk', 'north_3'),
|
||
|
||
// Транс-Тихоокеанский - связи с западом
|
||
...createRoute('pac_c_1', 'pac_w_1'),
|
||
...createRoute('pac_c_2', 'pac_w_2'),
|
||
...createRoute('pac_c_3', 'pac_w_3'),
|
||
|
||
// Мыс Горн - связи
|
||
...createRoute('sa_pac_12', 'horn_1'),
|
||
...createRoute('horn_3', 'sa_atl_1'),
|
||
|
||
// Мыс Доброй Надежды - Индийский океан
|
||
...createRoute('cape_3', 'ind_1'),
|
||
|
||
// Австралия - перекрестные связи
|
||
...createRoute('aus_4', 'ind_s_13'),
|
||
...createRoute('aus_3', 'ind_s_12'),
|
||
...createRoute('melbourne', 'aus_7'),
|
||
];
|
||
|
||
// Типы грузов для заданий (с весом и объемом)
|
||
const cargoTypes = [
|
||
{ id: 'electronics', name: 'Электроника', reward: 500, weight: 80, volume: 120 }, // Легкий, дорогой
|
||
{ id: 'textiles', name: 'Текстиль', reward: 250, weight: 60, volume: 100 }, // Легкий, дешевый
|
||
{ id: 'food', name: 'Продукты', reward: 300, weight: 100, volume: 150 }, // Легкий
|
||
{ id: 'chemicals', name: 'Химикаты', reward: 400, weight: 150, volume: 180 }, // Средний
|
||
{ id: 'furniture', name: 'Мебель', reward: 320, weight: 120, volume: 200 }, // Средний
|
||
{ id: 'machinery', name: 'Оборудование', reward: 450, weight: 200, volume: 250 }, // Средне-тяжелый
|
||
{ id: 'metals', name: 'Металлы', reward: 380, weight: 250, volume: 180 }, // Тяжелый
|
||
{ id: 'automobiles', name: 'Автомобили', reward: 600, weight: 280, volume: 300 }, // Тяжелый, дорогой
|
||
];
|
||
|
||
// Вместимость корабля (можно взять 2-3 средних груза или 1 тяжелый + 1-2 легких)
|
||
const SHIP_MAX_WEIGHT = 600; // Максимальный вес
|
||
const SHIP_MAX_VOLUME = 700; // Максимальный объем
|
||
|
||
// Цвета и иконки кораблей игроков
|
||
const playerColors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12'];
|
||
const playerShips = ['🚢', '⛴️', '🛳️', '⛵'];
|