284 lines
6.0 KiB
Markdown
284 lines
6.0 KiB
Markdown
|
||
[
|
||
{
|
||
"name": "USS Abraham Lincoln CSG",
|
||
"type": "Aircraft Carrier Strike Group",
|
||
"lat": 12.5,
|
||
"lng": 50.0,
|
||
"region": "Arabian Sea SE of Socotra"
|
||
},
|
||
|
||
{
|
||
"name": "Destroyer (Gulf of Oman)",
|
||
"type": "Destroyer",
|
||
"lat": 25.2,
|
||
"lng": 58.0,
|
||
"region": "Gulf of Oman"
|
||
},
|
||
{
|
||
"name": "Coast Guard Ship 1 (Gulf of Oman)",
|
||
"type": "Coast Guard",
|
||
"lat": 25.4,
|
||
"lng": 58.2,
|
||
"region": "Gulf of Oman"
|
||
},
|
||
{
|
||
"name": "Coast Guard Ship 2 (Gulf of Oman)",
|
||
"type": "Coast Guard",
|
||
"lat": 25.0,
|
||
"lng": 57.8,
|
||
"region": "Gulf of Oman"
|
||
},
|
||
|
||
{
|
||
"name": "Destroyer (Northern Persian Gulf)",
|
||
"type": "Destroyer",
|
||
"lat": 26.5,
|
||
"lng": 51.0,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Frigate 1 (Persian Gulf)",
|
||
"type": "Frigate",
|
||
"lat": 26.7,
|
||
"lng": 50.6,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Frigate 2 (Persian Gulf)",
|
||
"type": "Frigate",
|
||
"lat": 27.0,
|
||
"lng": 50.2,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Frigate 3 (Persian Gulf)",
|
||
"type": "Frigate",
|
||
"lat": 26.3,
|
||
"lng": 50.8,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Auxiliary Ship 1",
|
||
"type": "Auxiliary",
|
||
"lat": 26.0,
|
||
"lng": 51.2,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Auxiliary Ship 2",
|
||
"type": "Auxiliary",
|
||
"lat": 25.8,
|
||
"lng": 51.5,
|
||
"region": "Persian Gulf"
|
||
},
|
||
{
|
||
"name": "Auxiliary Ship 3",
|
||
"type": "Auxiliary",
|
||
"lat": 26.2,
|
||
"lng": 50.9,
|
||
"region": "Persian Gulf"
|
||
}
|
||
]
|
||
|
||
卡塔尔
|
||
|
||
Al Udeid Air Base
|
||
|
||
Camp As Sayliyah
|
||
|
||
🇧🇭 巴林
|
||
|
||
Naval Support Activity Bahrain
|
||
|
||
🇰🇼 科威特
|
||
|
||
Camp Arifjan
|
||
|
||
Ali Al Salem Air Base
|
||
|
||
Camp Buehring
|
||
|
||
🇦🇪 阿联酋
|
||
|
||
Al Dhafra Air Base
|
||
|
||
🇸🇦 沙特阿拉伯
|
||
|
||
Prince Sultan Air Base
|
||
|
||
Eskan Village
|
||
|
||
🇮🇶 伊拉克
|
||
|
||
Al Asad Airbase
|
||
|
||
Erbil Air Base
|
||
|
||
Baghdad Diplomatic Support Center
|
||
|
||
Camp Taji
|
||
|
||
Ain al-Asad (部分文献与 Al Asad 同义但可单列展示)
|
||
|
||
🇸🇾 叙利亚(驻点)
|
||
|
||
Al-Tanf Garrison
|
||
|
||
Rmelan Landing Zone
|
||
|
||
Shaddadi Base
|
||
|
||
Conoco Gas Field Base
|
||
|
||
🇯🇴 约旦
|
||
|
||
Muwaffaq Salti Air Base
|
||
|
||
🇹🇷 土耳其
|
||
|
||
Incirlik Air Base
|
||
|
||
Kürecik Radar Station
|
||
|
||
🇮🇱 以色列(合作设施)
|
||
|
||
Nevatim Air Base (美军设施区)
|
||
|
||
Ramon Air Base (协作区)
|
||
|
||
🇴🇲 阿曼
|
||
|
||
Thumrait Air Base
|
||
|
||
Masirah Air Base
|
||
|
||
🇪🇬 埃及(区域支援)
|
||
|
||
West Cairo Air Base
|
||
|
||
🇩🇯 吉布提(非波斯湾但中东行动关键)
|
||
|
||
地图基础设置
|
||
|
||
中心:
|
||
|
||
center: [52.5, 26.5]
|
||
zoom: 5.2
|
||
style: "mapbox://styles/mapbox/dark-v11"
|
||
二、27 个基地完整 JSON 数据
|
||
[
|
||
{ "id": 1, "name": "Al Udeid Air Base", "country": "Qatar", "lat": 25.117, "lng": 51.314 },
|
||
{ "id": 2, "name": "Camp As Sayliyah", "country": "Qatar", "lat": 25.275, "lng": 51.520 },
|
||
|
||
{ "id": 3, "name": "Naval Support Activity Bahrain", "country": "Bahrain", "lat": 26.236, "lng": 50.608 },
|
||
|
||
{ "id": 4, "name": "Camp Arifjan", "country": "Kuwait", "lat": 28.832, "lng": 47.799 },
|
||
{ "id": 5, "name": "Ali Al Salem Air Base", "country": "Kuwait", "lat": 29.346, "lng": 47.520 },
|
||
{ "id": 6, "name": "Camp Buehring", "country": "Kuwait", "lat": 29.603, "lng": 47.456 },
|
||
|
||
{ "id": 7, "name": "Al Dhafra Air Base", "country": "UAE", "lat": 24.248, "lng": 54.547 },
|
||
|
||
{ "id": 8, "name": "Prince Sultan Air Base", "country": "Saudi Arabia", "lat": 24.062, "lng": 47.580 },
|
||
{ "id": 9, "name": "Eskan Village", "country": "Saudi Arabia", "lat": 24.774, "lng": 46.738 },
|
||
|
||
{ "id": 10, "name": "Al Asad Airbase", "country": "Iraq", "lat": 33.785, "lng": 42.441 },
|
||
{ "id": 11, "name": "Erbil Air Base", "country": "Iraq", "lat": 36.237, "lng": 43.963 },
|
||
{ "id": 12, "name": "Baghdad Diplomatic Support Center", "country": "Iraq", "lat": 33.315, "lng": 44.366 },
|
||
{ "id": 13, "name": "Camp Taji", "country": "Iraq", "lat": 33.556, "lng": 44.256 },
|
||
{ "id": 14, "name": "Ain al-Asad", "country": "Iraq", "lat": 33.800, "lng": 42.450 },
|
||
|
||
{ "id": 15, "name": "Al-Tanf Garrison", "country": "Syria", "lat": 33.490, "lng": 38.618 },
|
||
{ "id": 16, "name": "Rmelan Landing Zone", "country": "Syria", "lat": 37.015, "lng": 41.885 },
|
||
{ "id": 17, "name": "Shaddadi Base", "country": "Syria", "lat": 36.058, "lng": 40.730 },
|
||
{ "id": 18, "name": "Conoco Gas Field Base", "country": "Syria", "lat": 35.336, "lng": 40.295 },
|
||
|
||
{ "id": 19, "name": "Muwaffaq Salti Air Base", "country": "Jordan", "lat": 32.356, "lng": 36.259 },
|
||
|
||
{ "id": 20, "name": "Incirlik Air Base", "country": "Turkey", "lat": 37.002, "lng": 35.425 },
|
||
{ "id": 21, "name": "Kurecik Radar Station", "country": "Turkey", "lat": 38.354, "lng": 37.794 },
|
||
|
||
{ "id": 22, "name": "Nevatim Air Base", "country": "Israel", "lat": 31.208, "lng": 35.012 },
|
||
{ "id": 23, "name": "Ramon Air Base", "country": "Israel", "lat": 30.776, "lng": 34.666 },
|
||
|
||
{ "id": 24, "name": "Thumrait Air Base", "country": "Oman", "lat": 17.666, "lng": 54.024 },
|
||
{ "id": 25, "name": "Masirah Air Base", "country": "Oman", "lat": 20.675, "lng": 58.890 },
|
||
|
||
{ "id": 26, "name": "West Cairo Air Base", "country": "Egypt", "lat": 30.915, "lng": 30.298 },
|
||
|
||
{ "id": 27, "name": "Camp Lemonnier", "country": "Djibouti", "lat": 11.547, "lng": 43.159 }
|
||
]
|
||
三、状态模型
|
||
type BaseStatus = "operational" | "damaged" | "attacked"
|
||
|
||
interface BaseAttackStatus {
|
||
id: number
|
||
status: BaseStatus
|
||
damageLevel: 1 | 2 | 3
|
||
attackTime?: number
|
||
}
|
||
四、可视化规则
|
||
1️⃣ 状态颜色
|
||
|
||
operational → 绿色稳定点
|
||
|
||
damaged → 橙色闪烁
|
||
|
||
attacked → 红色脉冲扩散动画
|
||
|
||
2️⃣ 红色脉冲动画
|
||
|
||
2 秒循环
|
||
|
||
扩散半径 0 → 40px
|
||
|
||
opacity 1 → 0
|
||
|
||
3️⃣ 伊朗攻击源
|
||
|
||
固定发射源坐标:
|
||
|
||
const IRAN_SOURCE = [51.3890, 35.6892] // Tehran
|
||
|
||
攻击动画使用抛物线 LineLayer:
|
||
|
||
颜色:#ff0000
|
||
|
||
线宽:2px
|
||
|
||
飞行时间:1200ms
|
||
|
||
五、大屏右侧态势面板
|
||
|
||
显示:
|
||
|
||
总基地数:27
|
||
|
||
被袭击:X
|
||
|
||
严重损毁:X
|
||
|
||
中度损毁:X
|
||
|
||
轻度损毁:X
|
||
|
||
每 5 秒自动刷新统计。
|
||
|
||
六、性能要求
|
||
|
||
使用 requestAnimationFrame
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
禁止重复创建 marker
|
||
|
||
所有动画走 WebGL 图层
|
||
|
||
禁止 DOM 动画 |