Files
planet/frontend/public/earth/index.html
2026-04-11 03:42:35 +08:00

325 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>智能星球计划 - 现实层宇宙全息感知</title>
<script type="importmap">
{
"imports": {
"three": "https://esm.sh/three@0.128.0",
"simplex-noise": "https://esm.sh/simplex-noise@4.0.1",
"satellite.js": "https://esm.sh/satellite.js@5.0.0"
}
}
</script>
<script>
(function applyInitialHudScale() {
var referenceWidth = 1920;
var referenceHeight = 1080;
var minScale = 0.7;
var maxScale = 1;
var widthScale = window.innerWidth / referenceWidth;
var heightScale = window.innerHeight / referenceHeight;
var scale = Math.min(widthScale, heightScale);
var clampedScale = Math.max(minScale, Math.min(maxScale, scale));
document.documentElement.style.setProperty("--hud-scale", clampedScale.toFixed(3));
})();
</script>
<link rel="stylesheet" href="css/base.css">
<link rel="stylesheet" href="css/hud.css">
<link rel="stylesheet" href="css/toolbar.css">
<link rel="stylesheet" href="css/info-panel.css">
<link rel="stylesheet" href="css/coordinates-display.css">
<link rel="stylesheet" href="css/legend.css">
<link rel="stylesheet" href="css/earth-stats.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;500;600&display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@24,500,0,0">
</head>
<body class="earth-page">
<svg class="earth-filters" aria-hidden="true" width="0" height="0">
<defs>
<filter id="liquid-glass-distortion" x="-20%" y="-20%" width="140%" height="140%">
<feTurbulence type="fractalNoise" baseFrequency="0.012 0.02" numOctaves="2" seed="7" result="noise" />
<feGaussianBlur in="noise" stdDeviation="0.45" result="softNoise" />
<feDisplacementMap in="SourceGraphic" in2="softNoise" scale="5.5" xChannelSelector="R" yChannelSelector="G" />
</filter>
</defs>
</svg>
<div id="container" class="earth-app">
<div id="info-panel" class="hud-panel hud-panel-info">
<div id="brand-root"></div>
<div id="info-card" class="info-card">
<div class="info-card-header">
<span class="info-card-icon" id="info-card-icon">🛰️</span>
<h3 id="info-card-title">详情</h3>
</div>
<div id="info-card-content" class="info-card-content"></div>
</div>
<div id="error-message" class="hud-error-message"></div>
</div>
<div id="right-toolbar-group" class="earth-toolbar-group">
<div id="control-toolbar" class="earth-toolbar">
<div class="earth-toolbar-items">
<button id="search-action" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="搜索功能(待开发)">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">search</span>
</span>
<span class="tooltip earth-toolbar-tooltip">搜索功能(待开发)</span>
</button>
<button id="rotate-toggle" class="floating-btn liquid-glass-surface earth-toolbar-btn earth-rotate-toggle" title="自动旋转">
<span class="icon rotate-icon icon-pause" aria-hidden="true">
<span class="material-symbols-rounded">pause</span>
</span>
<span class="icon rotate-icon icon-play" aria-hidden="true">
<span class="material-symbols-rounded">play_arrow</span>
</span>
<span class="tooltip earth-toolbar-tooltip">自动旋转</span>
</button>
<div id="info-control-group" class="earth-toolbar-popover earth-info-group">
<button id="info-trigger" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="显示控制">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">info</span>
</span>
<span class="tooltip earth-toolbar-tooltip">显示控制</span>
</button>
<div id="info-toolbar" class="earth-stack-toolbar earth-info-toolbar">
<button id="toggle-terrain" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="显示/隐藏地形">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">terrain</span>
</span>
<span class="tooltip earth-toolbar-tooltip">显示/隐藏地形</span>
</button>
<button id="toggle-trails" class="floating-btn liquid-glass-surface active earth-toolbar-btn" title="显示/隐藏轨迹">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">timeline</span>
</span>
<span class="tooltip earth-toolbar-tooltip">隐藏轨迹</span>
</button>
<button id="toggle-satellites" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="显示/隐藏卫星">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">satellite_alt</span>
</span>
<span class="tooltip earth-toolbar-tooltip">显示卫星</span>
</button>
<button id="toggle-bgp" class="floating-btn liquid-glass-surface active earth-toolbar-btn" title="显示/隐藏BGP观测">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">radar</span>
</span>
<span class="tooltip earth-toolbar-tooltip">隐藏BGP观测</span>
</button>
<button id="toggle-cables" class="floating-btn liquid-glass-surface active earth-toolbar-btn" title="显示/隐藏线缆">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">cable</span>
</span>
<span class="tooltip earth-toolbar-tooltip">隐藏线缆</span>
</button>
</div>
</div>
<button id="reload-data" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="重新加载数据">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">refresh</span>
</span>
<span class="tooltip earth-toolbar-tooltip">重新加载数据</span>
</button>
<div id="zoom-control-group" class="earth-toolbar-popover earth-zoom-group">
<button id="zoom-trigger" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="缩放控制">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">zoom_in</span>
</span>
<span class="tooltip earth-toolbar-tooltip">缩放控制</span>
</button>
<div id="zoom-toolbar" class="earth-stack-toolbar earth-zoom-toolbar">
<button id="zoom-in" class="liquid-glass-surface earth-zoom-btn" title="放大" aria-label="放大"><span aria-hidden="true">+</span></button>
<span id="zoom-value" class="liquid-glass-surface earth-zoom-value" title="重置缩放到100%">100%<span class="tooltip earth-toolbar-tooltip">重置缩放到100%</span></span>
<button id="zoom-out" class="liquid-glass-surface earth-zoom-btn" title="缩小" aria-label="缩小"><span aria-hidden="true"></span></button>
</div>
</div>
<button id="settings-trigger" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="设置">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">settings</span>
</span>
<span class="tooltip earth-toolbar-tooltip">设置</span>
</button>
<button id="reset-view" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="重置视角">
<span class="icon" aria-hidden="true">
<span class="material-symbols-rounded">my_location</span>
</span>
<span class="tooltip earth-toolbar-tooltip">重置视角</span>
</button>
<button id="layout-toggle" class="floating-btn liquid-glass-surface earth-toolbar-btn earth-layout-toggle" title="最大化布局">
<span class="icon layout-icon layout-expand" aria-hidden="true">
<span class="material-symbols-rounded">open_in_full</span>
</span>
<span class="icon layout-icon layout-collapse" aria-hidden="true">
<span class="material-symbols-rounded">close_fullscreen</span>
</span>
<span class="tooltip earth-toolbar-tooltip">最大化布局</span>
</button>
</div>
</div>
</div>
<div id="coordinates-display" class="hud-panel hud-panel-coordinates hud-panel-draggable" data-panel-key="coordinates-display">
<div class="hud-panel-header hud-panel-drag-handle">
<h3 class="hud-panel-title">坐标信息</h3>
<button class="hud-panel-close" type="button" data-close-panel="coordinates-display" aria-label="关闭坐标信息">
<span class="material-symbols-rounded">close</span>
</button>
</div>
<div class="coord-item hud-panel-row">
<span class="coord-label hud-panel-label">经度:</span>
<span id="longitude-value" class="coord-value hud-panel-value">0.00°</span>
</div>
<div class="coord-item hud-panel-row">
<span class="coord-label hud-panel-label">纬度:</span>
<span id="latitude-value" class="coord-value hud-panel-value">0.00°</span>
</div>
<div id="zoom-level" class="earth-zoom-level">缩放: 1.0x</div>
<div class="earth-mouse-coords" id="mouse-coords">鼠标位置: 无</div>
</div>
<div id="legend" class="hud-panel hud-panel-legend hud-panel-draggable" data-panel-key="legend">
<div class="hud-panel-header hud-panel-drag-handle">
<h3 class="legend-title hud-panel-title">线缆图例</h3>
<button class="hud-panel-close" type="button" data-close-panel="legend" aria-label="关闭图例">
<span class="material-symbols-rounded">close</span>
</button>
</div>
<div class="legend-list">
<div class="legend-item">
<div class="legend-color legend-color-americas"></div>
<span>Americas II</span>
</div>
<div class="legend-item">
<div class="legend-color legend-color-au-a"></div>
<span>AU Aleutian A</span>
</div>
<div class="legend-item">
<div class="legend-color legend-color-au-b"></div>
<span>AU Aleutian B</span>
</div>
<div class="legend-item">
<div class="legend-color legend-color-default"></div>
<span>其他电缆</span>
</div>
</div>
</div>
<div id="earth-stats" class="hud-panel hud-panel-stats hud-panel-draggable" data-panel-key="earth-stats">
<div class="hud-panel-header hud-panel-drag-handle">
<h3 class="hud-panel-title">地球信息</h3>
<button class="hud-panel-close" type="button" data-close-panel="earth-stats" aria-label="关闭地球信息">
<span class="material-symbols-rounded">close</span>
</button>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">电缆系统:</span>
<span class="stats-value hud-panel-value" id="cable-count">0个</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">状态:</span>
<span class="stats-value hud-panel-value" id="cable-status-summary">-</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">登陆点:</span>
<span class="stats-value hud-panel-value" id="landing-point-count">0个</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">地形:</span>
<span class="stats-value hud-panel-value" id="terrain-status">开启</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">卫星:</span>
<span class="stats-value hud-panel-value" id="satellite-count">0 颗</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">BGP事件:</span>
<span class="stats-value hud-panel-value" id="bgp-anomaly-count">0 条</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">观测站:</span>
<span class="stats-value hud-panel-value" id="bgp-collector-count">0 个</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">BGP态势:</span>
<span class="stats-value hud-panel-value" id="bgp-status-summary">暂无观测数据</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">视角距离:</span>
<span class="stats-value hud-panel-value" id="camera-distance">300 km</span>
</div>
<div class="stats-item hud-panel-row">
<span class="stats-label hud-panel-label">纹理质量:</span>
<span class="stats-value hud-panel-value" id="texture-quality">8K 卫星图</span>
</div>
</div>
<div id="loading" class="earth-loading">
<div id="loading-spinner" class="earth-loading-spinner"></div>
<div id="loading-title" class="earth-loading-title earth-loading-text">正在初始化全球态势数据...</div>
<div id="loading-subtitle" class="earth-loading-subtitle">同步卫星、海底光缆、登陆点与BGP态势数据</div>
</div>
<div id="status-message" class="earth-status-message"></div>
<div id="tooltip" class="earth-tooltip"></div>
<div id="settings-modal" class="earth-settings-modal" aria-hidden="true">
<div id="settings-backdrop" class="earth-settings-backdrop"></div>
<div class="earth-settings-sheet liquid-glass-surface" role="dialog" aria-modal="true" aria-labelledby="settings-title">
<div class="earth-settings-header">
<div>
<div class="earth-settings-kicker">设置</div>
<h3 id="settings-title" class="earth-settings-title hud-panel-title">显示与视图</h3>
</div>
<button id="settings-close" class="earth-settings-close hud-panel-close" type="button" aria-label="关闭设置">
<span class="material-symbols-rounded">close</span>
</button>
</div>
<div class="earth-settings-content">
<section class="earth-settings-section">
<div class="earth-settings-section-title">视图</div>
<div class="earth-settings-list">
<label class="earth-settings-item" for="toggle-view-legend">
<div class="earth-settings-copy">
<span class="earth-settings-item-title">图例</span>
<span class="earth-settings-item-subtitle">控制左下角图例面板显示</span>
</div>
<span class="earth-settings-switch">
<input id="toggle-view-legend" type="checkbox" data-settings-panel="legend">
<span class="earth-settings-switch-track"></span>
</span>
</label>
<label class="earth-settings-item" for="toggle-view-coordinates">
<div class="earth-settings-copy">
<span class="earth-settings-item-title">坐标信息</span>
<span class="earth-settings-item-subtitle">控制右上角坐标信息面板显示</span>
</div>
<span class="earth-settings-switch">
<input id="toggle-view-coordinates" type="checkbox" data-settings-panel="coordinates-display">
<span class="earth-settings-switch-track"></span>
</span>
</label>
<label class="earth-settings-item" for="toggle-view-stats">
<div class="earth-settings-copy">
<span class="earth-settings-item-title">地球信息</span>
<span class="earth-settings-item-subtitle">控制右下角统计信息面板显示</span>
</div>
<span class="earth-settings-switch">
<input id="toggle-view-stats" type="checkbox" data-settings-panel="earth-stats">
<span class="earth-settings-switch-track"></span>
</span>
</label>
</div>
</section>
</div>
</div>
</div>
</div>
<script type="module" src="js/main.js"></script>
</body>
</html>