1477 lines
82 KiB
HTML
1477 lines
82 KiB
HTML
<!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",
|
||
"pmtiles": "https://esm.sh/pmtiles@4.4.1",
|
||
"@mapbox/vector-tile": "https://esm.sh/@mapbox/vector-tile@2.0.4",
|
||
"pbf": "https://esm.sh/pbf@4.0.1",
|
||
"simplex-noise": "https://esm.sh/simplex-noise@4.0.1",
|
||
"satellite.js": "https://esm.sh/satellite.js@5.0.0",
|
||
"hls.js": "https://esm.sh/hls.js@1.6.15",
|
||
"astronomy-engine": "https://esm.sh/astronomy-engine@2.1.19"
|
||
}
|
||
}
|
||
</script>
|
||
<script>
|
||
(function applyInitialEarthViewportMode() {
|
||
var width = window.innerWidth;
|
||
var height = window.innerHeight;
|
||
var mode = "desktop";
|
||
|
||
if (width <= 820) {
|
||
mode = "mobile";
|
||
} else if (width <= 1080 || height <= 760) {
|
||
mode = "compact";
|
||
}
|
||
|
||
document.documentElement.classList.toggle("layout-mode-mobile", mode === "mobile");
|
||
document.documentElement.classList.toggle("layout-mode-compact", mode === "compact");
|
||
document.documentElement.dataset.earthLayoutMode = mode;
|
||
})();
|
||
|
||
(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));
|
||
})();
|
||
|
||
(function applyInitialToolbarLayout() {
|
||
var width = window.innerWidth;
|
||
var height = window.innerHeight;
|
||
var toolbarBaseWidth = 620;
|
||
var toolbarMinScale = 0.68;
|
||
var orbSizeBase = 46;
|
||
var hubSizeBase = 58;
|
||
var orbGapBase = 12;
|
||
var archSpanBase = 232;
|
||
var archRiseBase = 40;
|
||
var sidePaddingBase = 12;
|
||
var bottomClearanceBase = 34;
|
||
var extraHeightBase = 34;
|
||
var visibleOrbCount = 8;
|
||
var toolbarWidth = Math.min(toolbarBaseWidth, Math.max(0, width - 40));
|
||
var viewportScale = Math.min(width / 1920, height / 1080);
|
||
var toolbarScale = Math.max(
|
||
toolbarMinScale,
|
||
Math.min(1, Math.min(toolbarWidth / toolbarBaseWidth, viewportScale)),
|
||
);
|
||
var orbSize = orbSizeBase * toolbarScale;
|
||
var desiredGap = orbGapBase * toolbarScale;
|
||
var span = archSpanBase * toolbarScale;
|
||
var rise = archRiseBase * toolbarScale;
|
||
var minSpanForSpacing =
|
||
visibleOrbCount > 1
|
||
? (visibleOrbCount - 1) * (orbSize + desiredGap)
|
||
: orbSize;
|
||
var maxSpanByWidth =
|
||
toolbarWidth - orbSize - sidePaddingBase * 2 * toolbarScale;
|
||
|
||
if (minSpanForSpacing > maxSpanByWidth) {
|
||
toolbarScale = Math.max(
|
||
toolbarMinScale,
|
||
Math.min(toolbarScale, maxSpanByWidth / minSpanForSpacing),
|
||
);
|
||
orbSize = orbSizeBase * toolbarScale;
|
||
desiredGap = orbGapBase * toolbarScale;
|
||
span = archSpanBase * toolbarScale;
|
||
rise = archRiseBase * toolbarScale;
|
||
minSpanForSpacing =
|
||
visibleOrbCount > 1
|
||
? (visibleOrbCount - 1) * (orbSize + desiredGap)
|
||
: orbSize;
|
||
maxSpanByWidth =
|
||
toolbarWidth - orbSize - sidePaddingBase * 2 * toolbarScale;
|
||
}
|
||
|
||
span = Math.max(minSpanForSpacing, Math.min(maxSpanByWidth, span));
|
||
rise = Math.min(rise, span * 0.32);
|
||
|
||
var hubSize = hubSizeBase * toolbarScale;
|
||
var maxVerticalReach = rise + orbSize * 0.5;
|
||
var toolbarHeight =
|
||
maxVerticalReach +
|
||
hubSize +
|
||
bottomClearanceBase * toolbarScale +
|
||
extraHeightBase * toolbarScale;
|
||
var rootStyle = document.documentElement.style;
|
||
var roundedOrbSize = Math.round(orbSize);
|
||
var roundedHubSize = Math.round(hubSize);
|
||
|
||
rootStyle.setProperty("--initial-toolbar-scale", toolbarScale.toFixed(3));
|
||
rootStyle.setProperty("--initial-toolbar-orb-size", roundedOrbSize + "px");
|
||
rootStyle.setProperty("--initial-toolbar-hub-size", roundedHubSize + "px");
|
||
rootStyle.setProperty("--initial-toolbar-height", Math.ceil(toolbarHeight) + "px");
|
||
rootStyle.setProperty(
|
||
"--initial-toolbar-arc-width",
|
||
Math.ceil(span + orbSize + sidePaddingBase * 2 * toolbarScale) + "px",
|
||
);
|
||
rootStyle.setProperty(
|
||
"--initial-toolbar-arc-height",
|
||
Math.ceil(rise + orbSize * 0.95) + "px",
|
||
);
|
||
rootStyle.setProperty("--initial-toolbar-inner-arc-width", Math.ceil(span * 0.72) + "px");
|
||
rootStyle.setProperty(
|
||
"--initial-toolbar-inner-arc-height",
|
||
Math.ceil(hubSize * 0.8 + desiredGap * 0.5) + "px",
|
||
);
|
||
})();
|
||
</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/legend.css">
|
||
<link rel="stylesheet" href="css/earth-stats.css">
|
||
<link rel="stylesheet" href="css/tv-panel.css">
|
||
<link rel="stylesheet" href="css/news-panel.css">
|
||
<link rel="stylesheet" href="css/layer-panel.css">
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;500;600&display=swap">
|
||
<link rel="stylesheet" href="css/fonts.css">
|
||
</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="left-column" class="earth-left-column">
|
||
<div id="brand-panel" class="hud-panel hud-panel-brand">
|
||
<div id="brand-root"></div>
|
||
</div>
|
||
|
||
<div id="layer-toggles" class="hud-panel hud-panel-layers hud-panel-draggable" data-panel-key="layer-toggles">
|
||
<!-- Header / drag handle -->
|
||
<div class="layer-panel-header hud-panel-drag-handle">
|
||
<span class="material-symbols-rounded layer-panel-icon">layers</span>
|
||
<span class="layer-panel-title">图层</span>
|
||
<button id="layer-panel-collapse" class="layer-panel-btn" type="button" aria-label="折叠图层列表" title="折叠">
|
||
<span class="material-symbols-rounded">expand_less</span>
|
||
</button>
|
||
<button class="layer-panel-btn hud-panel-close" type="button" data-close-panel="layer-toggles" aria-label="关闭图层面板" title="关闭">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Collapsible body -->
|
||
<div class="layer-panel-body" id="layer-panel-body">
|
||
<!-- Search -->
|
||
<div class="layer-panel-search">
|
||
<div class="layer-panel-search-box">
|
||
<span class="material-symbols-rounded layer-panel-search-icon">search</span>
|
||
<input
|
||
type="text"
|
||
id="layer-search-input"
|
||
class="layer-panel-search-input"
|
||
placeholder="搜索图层..."
|
||
autocomplete="off"
|
||
spellcheck="false"
|
||
>
|
||
<button id="layer-search-clear" class="layer-panel-btn layer-search-clear" type="button" aria-label="清除搜索" title="清除" hidden>
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Layer rows -->
|
||
<div class="layer-panel-list" id="layer-panel-list">
|
||
<div class="layer-row" data-layer-name="海缆 subsea cables">
|
||
<span class="material-symbols-rounded layer-row-icon">cable</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">海缆</span>
|
||
<span class="layer-row-meta">Subsea Cables</span>
|
||
</div>
|
||
<button id="toggle-cables" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换海缆显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="卫星 satellites">
|
||
<span class="material-symbols-rounded layer-row-icon">satellite_alt</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">卫星</span>
|
||
<span class="layer-row-meta">Satellites</span>
|
||
</div>
|
||
<button id="toggle-satellites" class="layer-row-toggle" type="button" role="switch" aria-checked="false" title="切换卫星显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="算力中心 compute centers">
|
||
<span class="material-symbols-rounded layer-row-icon">memory</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">算力中心</span>
|
||
<span class="layer-row-meta">Compute Centers</span>
|
||
</div>
|
||
<button id="toggle-compute-centers" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换算力中心显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="船只 船舶 ais vessels ships maritime">
|
||
<span class="material-symbols-rounded layer-row-icon">directions_boat</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">船只</span>
|
||
<span class="layer-row-meta">AIS Vessels</span>
|
||
</div>
|
||
<button id="toggle-vessels" class="layer-row-toggle" type="button" role="switch" aria-checked="false" title="切换船只显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="bgp观测 routing signals">
|
||
<span class="material-symbols-rounded layer-row-icon">hub</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">BGP观测</span>
|
||
<span class="layer-row-meta">Routing Signals</span>
|
||
</div>
|
||
<button id="toggle-bgp" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换BGP观测显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="地形 terrain">
|
||
<span class="material-symbols-rounded layer-row-icon">landscape</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">地形</span>
|
||
<span class="layer-row-meta">Terrain</span>
|
||
</div>
|
||
<button id="toggle-terrain" class="layer-row-toggle" type="button" role="switch" aria-checked="false" title="切换地形显示" data-status-target="terrain-status">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="高清材质 纹理 texture hd earth">
|
||
<span class="material-symbols-rounded layer-row-icon">globe</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">高清材质</span>
|
||
<span class="layer-row-meta">High-Res Texture</span>
|
||
</div>
|
||
<button id="toggle-earth-high-res-texture" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换高清材质显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="大气 云图 云层 clouds atmosphere">
|
||
<span class="material-symbols-rounded layer-row-icon">cloud</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">大气云图</span>
|
||
<span class="layer-row-meta">Cloud Layer</span>
|
||
</div>
|
||
<button id="toggle-atmosphere-clouds" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换大气云图显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="国界 国家 borders countries boundary">
|
||
<span class="material-symbols-rounded layer-row-icon">public</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">国界</span>
|
||
<span class="layer-row-meta">Country Borders</span>
|
||
</div>
|
||
<button id="toggle-country-boundaries" class="layer-row-toggle active" type="button" role="switch" aria-checked="true" title="切换国界显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
<div class="layer-row" data-layer-name="经纬线 graticule 经纬 latitude longitude">
|
||
<span class="material-symbols-rounded layer-row-icon">grid_4x4</span>
|
||
<div class="layer-row-copy">
|
||
<span class="layer-row-label">经纬线</span>
|
||
<span class="layer-row-meta">Graticule</span>
|
||
</div>
|
||
<button id="toggle-grid-lines" class="layer-row-toggle" type="button" role="switch" aria-checked="false" title="切换经纬线显示">
|
||
<span class="layer-row-toggle-track"></span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Empty search state -->
|
||
<div class="layer-panel-empty" id="layer-panel-empty" hidden>无匹配图层</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="error-message" class="earth-error-message" aria-live="assertive" aria-atomic="true"></div>
|
||
|
||
<div id="motion-debug-panel" class="hud-panel hud-panel-motion-debug hud-panel-draggable hud-panel-hidden" data-panel-key="motion-debug-panel" aria-live="polite">
|
||
<div class="motion-debug-header hud-panel__header hud-panel-drag-handle">
|
||
<div class="motion-debug-title hud-panel-title">
|
||
<span class="material-symbols-rounded" aria-hidden="true">sensors</span>
|
||
<span>动捕调试</span>
|
||
</div>
|
||
<div class="motion-debug-header-actions">
|
||
<span id="motion-debug-status" class="motion-debug-status">动捕未连接</span>
|
||
<button type="button" class="hud-panel-close hud-panel__action hud-panel__action--close" data-motion-debug-close aria-label="关闭动捕调试面板">
|
||
<span class="material-symbols-rounded" aria-hidden="true">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="motion-debug-body hud-panel__body">
|
||
<canvas id="motion-debug-canvas" class="motion-debug-canvas" width="320" height="220"></canvas>
|
||
<div class="motion-debug-footer">
|
||
<span>匹配动作</span>
|
||
<strong id="motion-debug-match">等待骨架数据</strong>
|
||
</div>
|
||
<label class="motion-debug-toggle">
|
||
<input type="checkbox" data-motion-skeleton-only-toggle>
|
||
<span class="motion-debug-toggle-track"></span>
|
||
<span>只显示骨骼</span>
|
||
</label>
|
||
<label class="motion-debug-toggle">
|
||
<input id="motion-debug-pause" type="checkbox" data-motion-recognition-pause-toggle>
|
||
<span class="motion-debug-toggle-track"></span>
|
||
<span>停止匹配动作</span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="right-toolbar-group" class="earth-toolbar-group">
|
||
<div id="control-toolbar" class="earth-toolbar">
|
||
<div id="toolbar-cluster" class="earth-toolbar-cluster is-collapsed">
|
||
<div class="earth-toolbar-orb" data-orb-index="0" style="--orb-delay: 0s;">
|
||
<button id="layer-action" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="图层">
|
||
<span class="icon" aria-hidden="true">
|
||
<span class="material-symbols-rounded">layers</span>
|
||
</span>
|
||
<span class="tooltip earth-toolbar-tooltip">图层</span>
|
||
</button>
|
||
</div>
|
||
<div class="earth-toolbar-orb" data-orb-index="1" style="--orb-delay: 0.12s;">
|
||
<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>
|
||
</div>
|
||
<div class="earth-toolbar-orb" data-orb-index="2" style="--orb-delay: 0.24s;">
|
||
<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>
|
||
<div class="earth-toolbar-orb" data-orb-index="3" style="--orb-delay: 0.36s;">
|
||
<button id="toggle-tv" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="新闻直播">
|
||
<span class="icon" aria-hidden="true">
|
||
<span class="material-symbols-rounded">live_tv</span>
|
||
</span>
|
||
<span class="tooltip earth-toolbar-tooltip">打开媒体面板</span>
|
||
</button>
|
||
</div>
|
||
<div class="earth-toolbar-orb" data-orb-index="4" style="--orb-delay: 0.54s;">
|
||
<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>
|
||
<div class="earth-toolbar-orb earth-toolbar-popover earth-zoom-group" id="zoom-control-group" data-orb-index="5" style="--orb-delay: 0.72s;">
|
||
<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>
|
||
<div class="earth-toolbar-orb" data-orb-index="6" style="--orb-delay: 0.9s;">
|
||
<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>
|
||
</div>
|
||
<div class="earth-toolbar-orb" data-orb-index="7" style="--orb-delay: 1.08s;">
|
||
<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>
|
||
</div>
|
||
<div class="earth-toolbar-orb" data-orb-index="8" style="--orb-delay: 1.26s;">
|
||
<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 class="earth-toolbar-hub">
|
||
<button id="toolbar-hub" class="earth-toolbar-hub-btn liquid-glass-surface" title="工具菜单" aria-label="展开工具菜单">
|
||
<span class="material-symbols-rounded" aria-hidden="true">tune</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div id="legend" class="hud-panel hud-panel-legend hud-panel-draggable" data-panel-key="legend">
|
||
<!-- Drag bar: current mode + collapse + close -->
|
||
<div class="legend-bar hud-panel-drag-handle">
|
||
<div class="legend-current" id="legend-current">
|
||
<span class="legend-title">图例</span>
|
||
<span id="legend-current-label" class="legend-current-label">海缆</span>
|
||
</div>
|
||
<div class="legend-bar-actions">
|
||
<button id="legend-collapse" class="legend-bar-btn hud-panel__action hud-panel__action--collapse" title="折叠">
|
||
<span class="material-symbols-rounded">expand_less</span>
|
||
</button>
|
||
<button class="legend-bar-btn hud-panel__action hud-panel__action--close hud-panel-close" type="button" data-close-panel="legend" aria-label="关闭图例">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<!-- Collapsible list -->
|
||
<div id="legend-body" class="legend-body hud-panel__body hud-panel__body--collapsible">
|
||
<div class="legend-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="earth-stats" class="hud-panel hud-panel-stats hud-panel-draggable" data-panel-key="earth-stats">
|
||
<!-- Thin drag bar with kicker + close -->
|
||
<div class="stats-drag-bar hud-panel-drag-handle">
|
||
<span class="stats-kicker">全球态势</span>
|
||
<button class="hud-panel-close" type="button" data-close-panel="earth-stats" aria-label="关闭地球信息">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
|
||
<!-- 2-col KPI grid -->
|
||
<div class="stats-grid">
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="cable-count" data-earth-stat="cable-count">—</span>
|
||
<span class="stat-label">海缆系统</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="landing-point-count" data-earth-stat="landing-point-count">—</span>
|
||
<span class="stat-label">登陆点</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="satellite-count" data-earth-stat="satellite-count">—</span>
|
||
<span class="stat-label">在轨卫星</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="compute-center-count" data-earth-stat="compute-center-count">—</span>
|
||
<span class="stat-label">算力中心</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="vessel-count" data-earth-stat="vessel-count">—</span>
|
||
<span class="stat-label">AIS 船只</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="bgp-anomaly-count" data-earth-stat="bgp-anomaly-count">—</span>
|
||
<span class="stat-label">BGP 事件</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num" id="bgp-collector-count" data-earth-stat="bgp-collector-count">—</span>
|
||
<span class="stat-label">BGP 观测站</span>
|
||
</div>
|
||
<div class="stat-cell">
|
||
<span class="stat-num stat-num--sm" id="cable-status-summary">—</span>
|
||
<span class="stat-label">运行中</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BGP status footer -->
|
||
<div class="stats-footer">
|
||
<span class="stats-footer-dot"></span>
|
||
<span id="bgp-status-summary" class="stats-footer-text" data-earth-stat="bgp-status-summary">暂无观测数据</span>
|
||
</div>
|
||
<div class="stats-footer">
|
||
<span class="stats-footer-dot"></span>
|
||
<span id="vessel-live-summary" class="stats-footer-text" data-earth-stat="vessel-live-summary">AISStream 未连接</span>
|
||
</div>
|
||
|
||
<!-- hidden elements kept for JS compatibility -->
|
||
<span id="terrain-status" data-earth-stat="terrain-status" hidden></span>
|
||
<span id="texture-quality" data-earth-stat="texture-quality" hidden></span>
|
||
<span id="camera-distance" hidden></span>
|
||
</div>
|
||
|
||
<div id="media-panel" class="hud-panel hud-panel-media hud-panel-draggable" data-panel-key="media-panel" data-drag-self="true">
|
||
<div class="hud-panel__header hud-panel-drag-handle">
|
||
<div class="hud-panel__title-group">
|
||
<span class="hud-panel-title hud-panel__title tv-panel-header-title">Live 新闻</span>
|
||
</div>
|
||
<div id="tv-header-controls-live" class="tv-panel-header-controls tv-panel-header-controls--live">
|
||
<select id="tv-source-select" class="tv-panel-select" aria-label="选择新闻直播源"></select>
|
||
<div class="tv-panel-toolbar-actions">
|
||
<button id="tv-refresh" class="hud-panel__action hud-panel__action--refresh" type="button" title="刷新直播源" aria-label="刷新直播源">
|
||
<span class="material-symbols-rounded">refresh</span>
|
||
</button>
|
||
<button id="tv-open-external" class="hud-panel__action hud-panel__action--external" type="button" title="访问官网" aria-label="访问官网">
|
||
<span class="material-symbols-rounded">open_in_new</span>
|
||
</button>
|
||
<button id="tv-meta-toggle" class="hud-panel__action hud-panel__action--collapse tv-panel-meta-toggle" type="button" title="折叠新闻直播内容" aria-label="折叠新闻直播内容">
|
||
<span class="material-symbols-rounded">expand_less</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="hud-panel__actions">
|
||
<button class="hud-panel-close hud-panel__action hud-panel__action--close" type="button" data-close-panel="media-panel" aria-label="关闭 Live 新闻面板">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tv-panel-content">
|
||
<section id="tv-panel" class="tv-tab-pane tv-tab-pane--active">
|
||
<div class="tv-panel-meta-wrap" id="tv-meta-wrap">
|
||
<div class="tv-panel-meta" id="tv-panel-meta">
|
||
<div class="tv-panel-title-row">
|
||
<div id="tv-source-title" class="tv-panel-title">暂无可用频道</div>
|
||
<span id="tv-source-origin" class="tv-panel-tag">待加载</span>
|
||
<span id="tv-source-status" class="tv-panel-tag tv-panel-tag--status">等待加载</span>
|
||
</div>
|
||
<div id="tv-source-meta" class="tv-panel-subtitle">当前未配置可播放新闻直播源</div>
|
||
<div id="tv-source-catalog" class="tv-panel-catalog">频道目录待同步</div>
|
||
<div id="tv-source-notes" class="tv-panel-notes">支持后台配置默认源与采集器补充源。</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="tv-panel-player">
|
||
<div id="tv-empty-state" class="tv-panel-empty">暂无可播放直播源,请先在系统配置中添加频道。</div>
|
||
<iframe
|
||
id="tv-iframe"
|
||
class="tv-panel-iframe"
|
||
hidden
|
||
title="新闻直播"
|
||
referrerpolicy="strict-origin-when-cross-origin"
|
||
allow="autoplay; fullscreen; picture-in-picture"
|
||
></iframe>
|
||
<video id="tv-video" class="tv-panel-video" hidden controls autoplay muted playsinline></video>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="tv-panel-edge" data-edge="r"></div>
|
||
<div class="tv-panel-edge" data-edge="b"></div>
|
||
<div class="tv-panel-edge" data-edge="l"></div>
|
||
<div class="tv-panel-edge" data-edge="br"></div>
|
||
<div class="tv-panel-edge" data-edge="bl"></div>
|
||
</div>
|
||
|
||
<button id="desktop-news-ticker" class="earth-news-ticker" type="button" aria-label="打开态势新闻">
|
||
<span id="news-ticker-region" class="earth-news-ticker__region">GLOBAL</span>
|
||
<span class="earth-news-ticker__viewport">
|
||
<span id="news-ticker-track" class="earth-news-ticker__track">正在准备全球态势新闻...</span>
|
||
</span>
|
||
</button>
|
||
|
||
<div id="news-hud-panel" class="hud-panel earth-news-hud hud-panel-draggable hud-panel-hidden" role="dialog" aria-modal="false" aria-label="态势聚合新闻">
|
||
<div class="hud-panel__header earth-news-hud__header hud-panel-drag-handle">
|
||
<div class="hud-panel__title-group">
|
||
<span class="hud-panel-title hud-panel__title">态势聚合新闻</span>
|
||
<span id="news-region-chip" class="news-region-chip hud-panel__chip">global</span>
|
||
</div>
|
||
<div class="hud-panel__actions">
|
||
<button id="news-refresh" class="hud-panel__action hud-panel__action--refresh" type="button" title="刷新新闻源" aria-label="刷新新闻源">
|
||
<span class="material-symbols-rounded">refresh</span>
|
||
</button>
|
||
<button id="news-open-external" class="hud-panel__action hud-panel__action--external" type="button" title="打开源站" aria-label="打开源站">
|
||
<span class="material-symbols-rounded">open_in_new</span>
|
||
</button>
|
||
<button id="news-hud-close" class="hud-panel-close hud-panel__action hud-panel__action--close" type="button" aria-label="收起态势新闻">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div id="news-panel" class="earth-news-hud__body">
|
||
<div id="news-panel-body" class="news-panel-body">
|
||
<div class="news-panel-subtitle">跟随地球正面视角自动切换区域新闻</div>
|
||
|
||
<div class="news-panel-focus">
|
||
<div>
|
||
<div class="news-focus-kicker">当前关注区域</div>
|
||
<div id="news-focus-label" class="news-focus-label">全球焦点</div>
|
||
<div id="news-focus-coords" class="news-focus-coords">跟随当前视角自动聚焦</div>
|
||
</div>
|
||
<div id="news-source-count" class="news-source-count">0 路聚合源</div>
|
||
</div>
|
||
|
||
<div class="news-board">
|
||
<div id="news-board-status" class="news-board-status">正在准备全球态势新闻...</div>
|
||
<div id="news-board-list" class="news-board-list"></div>
|
||
<div id="news-board-empty" class="news-board-empty" hidden>正在准备全球态势新闻聚合源...</div>
|
||
</div>
|
||
</div>
|
||
<a id="news-feed-anchor" hidden rel="noreferrer noopener" target="_blank"></a>
|
||
</div>
|
||
<div class="earth-news-hud-edge" data-edge="r"></div>
|
||
<div class="earth-news-hud-edge" data-edge="b"></div>
|
||
<div class="earth-news-hud-edge" data-edge="l"></div>
|
||
<div class="earth-news-hud-edge" data-edge="br"></div>
|
||
<div class="earth-news-hud-edge" data-edge="bl"></div>
|
||
</div>
|
||
|
||
<div id="status-message" class="earth-status-message" aria-live="polite" aria-atomic="true"></div>
|
||
<div id="tooltip" class="earth-tooltip"></div>
|
||
<div id="earth-mobile-popup" class="earth-mobile-popup" hidden aria-live="polite">
|
||
<span id="earth-mobile-popup-dock" class="earth-mobile-popup-dock" aria-hidden="true"></span>
|
||
<span class="earth-mobile-popup-icon" id="earth-mobile-popup-icon"></span>
|
||
<div class="earth-mobile-popup-body">
|
||
<div class="earth-mobile-popup-title" id="earth-mobile-popup-title"></div>
|
||
<div class="earth-mobile-popup-sub" id="earth-mobile-popup-sub"></div>
|
||
</div>
|
||
<span class="material-symbols-rounded earth-mobile-popup-chevron">chevron_right</span>
|
||
</div>
|
||
<div id="mobile-drawer-overlay" class="earth-mobile-drawer-overlay" hidden></div>
|
||
<div id="mobile-drawer-shell" class="earth-mobile-drawer-shell" aria-hidden="true">
|
||
<div class="earth-mobile-drawer-sheet">
|
||
<div id="mobile-drawer-handle" class="earth-mobile-drawer-header">
|
||
<div class="earth-mobile-drawer-grabber" aria-hidden="true"></div>
|
||
</div>
|
||
<div class="earth-mobile-drawer-nav">
|
||
<div class="earth-mobile-drawer-nav-copy">
|
||
<span class="earth-mobile-drawer-nav-kicker">Earth Menu</span>
|
||
<span class="earth-mobile-drawer-nav-title">模块切换</span>
|
||
</div>
|
||
<div class="earth-mobile-drawer-tabs-shell">
|
||
<div class="earth-mobile-drawer-tabs-fade earth-mobile-drawer-tabs-fade--left" aria-hidden="true"></div>
|
||
<div class="earth-mobile-drawer-tabs-fade earth-mobile-drawer-tabs-fade--right" aria-hidden="true"></div>
|
||
<div class="earth-mobile-drawer-tabs" role="tablist" aria-label="移动端菜单">
|
||
<button class="earth-mobile-drawer-tab is-active" type="button" role="tab" data-drawer-card="layers" aria-selected="true">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">layers</span>
|
||
<span class="earth-mobile-drawer-tab-label">图层</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="search" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">search</span>
|
||
<span class="earth-mobile-drawer-tab-label">搜索</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="situation" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">travel_explore</span>
|
||
<span class="earth-mobile-drawer-tab-label">态势</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="news" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">article</span>
|
||
<span class="earth-mobile-drawer-tab-label">新闻</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="tv" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">live_tv</span>
|
||
<span class="earth-mobile-drawer-tab-label">TV</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="motion" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">sensors</span>
|
||
<span class="earth-mobile-drawer-tab-label">动捕</span>
|
||
</button>
|
||
<button class="earth-mobile-drawer-tab" type="button" role="tab" data-drawer-card="settings" aria-selected="false">
|
||
<span class="earth-mobile-drawer-tab-icon material-symbols-rounded" aria-hidden="true">tune</span>
|
||
<span class="earth-mobile-drawer-tab-label">设置</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-drawer-content">
|
||
<section class="earth-mobile-drawer-slot is-active" data-drawer-slot="layers">
|
||
<div class="earth-mobile-page earth-mobile-page--layers">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Layer Control</span>
|
||
<span id="mobile-layer-summary" class="earth-mobile-page-summary">已启用 0 个图层</span>
|
||
</div>
|
||
<div id="mobile-layer-list" class="earth-mobile-layer-list"></div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="search">
|
||
<div class="earth-mobile-page earth-mobile-page--search">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Object Search</span>
|
||
<span class="earth-mobile-page-summary">搜索海缆、登陆点、卫星、算力中心和 BGP 事件</span>
|
||
</div>
|
||
<div class="earth-mobile-search-shell">
|
||
<span class="material-symbols-rounded earth-mobile-search-icon" aria-hidden="true">search</span>
|
||
<input
|
||
id="mobile-earth-search-input"
|
||
class="earth-mobile-search-input"
|
||
type="text"
|
||
inputmode="search"
|
||
autocomplete="off"
|
||
spellcheck="false"
|
||
placeholder="输入名称、地点、NORAD、ASN..."
|
||
>
|
||
<button id="mobile-earth-search-clear" class="earth-mobile-search-clear" type="button" aria-label="清除搜索" hidden>
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
<div id="mobile-earth-search-meta" class="earth-mobile-search-meta">输入关键词以搜索当前地球对象</div>
|
||
<div id="mobile-earth-search-results" class="earth-mobile-search-results" role="listbox" aria-label="移动端搜索结果"></div>
|
||
<div id="mobile-earth-search-empty" class="earth-mobile-search-empty">支持搜索海缆、登陆点、卫星、算力中心、BGP 事件与观测站。</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot earth-mobile-drawer-slot--situation" data-drawer-slot="situation">
|
||
<div class="earth-mobile-page earth-mobile-page--situation">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Situation</span>
|
||
<span class="earth-mobile-page-summary">面向移动端整合的全球态势概览</span>
|
||
</div>
|
||
<div class="earth-mobile-stats-grid">
|
||
<div class="earth-mobile-stat-card">
|
||
<span id="mobile-cable-count" class="earth-mobile-stat-num" data-earth-stat="cable-count">—</span>
|
||
<span class="earth-mobile-stat-label">海缆系统</span>
|
||
</div>
|
||
<div class="earth-mobile-stat-card">
|
||
<span id="mobile-landing-point-count" class="earth-mobile-stat-num" data-earth-stat="landing-point-count">—</span>
|
||
<span class="earth-mobile-stat-label">登陆点</span>
|
||
</div>
|
||
<div class="earth-mobile-stat-card">
|
||
<span id="mobile-satellite-count" class="earth-mobile-stat-num" data-earth-stat="satellite-count">—</span>
|
||
<span class="earth-mobile-stat-label">在轨卫星</span>
|
||
</div>
|
||
<div class="earth-mobile-stat-card">
|
||
<span id="mobile-compute-center-count" class="earth-mobile-stat-num" data-earth-stat="compute-center-count">—</span>
|
||
<span class="earth-mobile-stat-label">算力中心</span>
|
||
</div>
|
||
<div class="earth-mobile-stat-card">
|
||
<span id="mobile-bgp-anomaly-count" class="earth-mobile-stat-num" data-earth-stat="bgp-anomaly-count">—</span>
|
||
<span class="earth-mobile-stat-label">BGP 事件</span>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-situation-card">
|
||
<div class="earth-mobile-situation-card-title">图例</div>
|
||
<div id="mobile-situation-legend-mode" class="earth-mobile-situation-card-subtitle">海缆</div>
|
||
<div id="mobile-situation-legend-list" class="earth-mobile-situation-legend-list"></div>
|
||
</div>
|
||
<div class="earth-mobile-situation-card">
|
||
<div class="earth-mobile-situation-card-title">BGP 状态</div>
|
||
<div id="mobile-bgp-status-summary" class="earth-mobile-situation-status" data-earth-stat="bgp-status-summary">暂无观测数据</div>
|
||
<div id="mobile-vessel-live-summary" class="earth-mobile-situation-status" data-earth-stat="vessel-live-summary">AISStream 未连接</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="news">
|
||
<div class="earth-mobile-page earth-mobile-page--news">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">News</span>
|
||
<span class="earth-mobile-page-summary">跟随当前视角聚焦全球区域新闻</span>
|
||
</div>
|
||
<div class="earth-mobile-news-focus">
|
||
<div>
|
||
<div class="earth-mobile-news-focus-kicker">当前关注区域</div>
|
||
<div id="mobile-news-focus-label" class="earth-mobile-news-focus-label">全球焦点</div>
|
||
<div id="mobile-news-focus-coords" class="earth-mobile-news-focus-coords">跟随当前视角自动聚焦</div>
|
||
</div>
|
||
<div id="mobile-news-source-count" class="earth-mobile-news-source-count">0 路聚合源</div>
|
||
</div>
|
||
<div id="mobile-news-board-status" class="earth-mobile-news-board-status">正在准备全球态势新闻...</div>
|
||
<div id="mobile-news-board-list" class="earth-mobile-news-board-list"></div>
|
||
<div id="mobile-news-board-empty" class="earth-mobile-news-board-empty" hidden>正在准备全球态势新闻聚合源...</div>
|
||
<div class="earth-mobile-news-actions">
|
||
<button id="mobile-news-refresh" class="earth-mobile-action-btn" type="button">刷新</button>
|
||
<button id="mobile-news-open-external" class="earth-mobile-action-btn" type="button">打开源站</button>
|
||
</div>
|
||
<a id="mobile-news-feed-anchor" hidden rel="noreferrer noopener" target="_blank"></a>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="tv">
|
||
<div class="earth-mobile-page earth-mobile-page--tv">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">TV</span>
|
||
<span class="earth-mobile-page-summary">移动端新闻直播和频道切换</span>
|
||
</div>
|
||
<select id="mobile-tv-source-select" class="earth-mobile-tv-select" aria-label="选择移动端新闻直播源"></select>
|
||
<div class="earth-mobile-tv-player">
|
||
<div id="mobile-tv-empty-state" class="earth-mobile-tv-empty">暂无可播放直播源,请先在系统配置中添加频道。</div>
|
||
<iframe
|
||
id="mobile-tv-iframe"
|
||
class="earth-mobile-tv-iframe"
|
||
hidden
|
||
title="移动端新闻直播"
|
||
referrerpolicy="strict-origin-when-cross-origin"
|
||
allow="autoplay; fullscreen; picture-in-picture"
|
||
></iframe>
|
||
<video id="mobile-tv-video" class="earth-mobile-tv-video" hidden controls autoplay muted playsinline></video>
|
||
</div>
|
||
<div id="mobile-tv-overview" class="earth-mobile-tv-overview">
|
||
<div id="mobile-tv-overview-bar" class="earth-mobile-tv-overview-bar" role="button" tabindex="0" aria-expanded="false" aria-controls="mobile-tv-meta-wrap">
|
||
<div class="earth-mobile-tv-overview-copy">
|
||
<span class="earth-mobile-tv-overview-kicker">频道信息</span>
|
||
<span id="mobile-tv-overview-headline" class="earth-mobile-tv-overview-headline">暂无可用频道</span>
|
||
<span id="mobile-tv-overview-summary" class="earth-mobile-tv-overview-summary">展开查看当前频道来源、目录和补充说明</span>
|
||
<div id="mobile-tv-overview-tags" class="earth-mobile-tv-overview-tags" aria-label="频道摘要标签"></div>
|
||
</div>
|
||
<div class="earth-mobile-tv-overview-actions">
|
||
<button id="mobile-tv-refresh" class="earth-mobile-action-btn earth-mobile-action-btn--compact" type="button" aria-label="刷新频道列表" title="刷新频道列表">
|
||
<span class="material-symbols-rounded" aria-hidden="true">refresh</span>
|
||
</button>
|
||
<button id="mobile-tv-open-external" class="earth-mobile-action-btn earth-mobile-action-btn--compact" type="button" aria-label="访问频道官网" title="访问频道官网">
|
||
<span class="material-symbols-rounded" aria-hidden="true">open_in_new</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div id="mobile-tv-meta-wrap" class="earth-mobile-tv-meta-wrap">
|
||
<div class="earth-mobile-tv-meta">
|
||
<span id="mobile-tv-source-status" class="earth-mobile-tv-status">等待加载直播源</span>
|
||
<div id="mobile-tv-source-title" class="earth-mobile-tv-title">暂无可用频道</div>
|
||
<div id="mobile-tv-source-meta" class="earth-mobile-tv-subtitle">当前未配置可播放新闻直播源</div>
|
||
<div id="mobile-tv-source-catalog" class="earth-mobile-tv-catalog">频道目录待同步</div>
|
||
<div id="mobile-tv-source-notes" class="earth-mobile-tv-notes">支持后台配置默认源与采集器补充源。</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="motion">
|
||
<div class="earth-mobile-page earth-mobile-page--motion">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Motion Capture</span>
|
||
<span class="earth-mobile-page-summary">查看浏览器摄像头画面、骨架连线和当前匹配动作</span>
|
||
</div>
|
||
<div id="mobile-motion-debug-mount" class="earth-mobile-motion-debug-mount"></div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="settings">
|
||
<div class="earth-mobile-page earth-mobile-page--settings">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Settings</span>
|
||
<span class="earth-mobile-page-summary">仅保留移动端仍有意义的 Earth 配置</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-group">
|
||
<div class="earth-mobile-settings-title">旋转</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">旋转模式</span>
|
||
<span class="earth-mobile-settings-subtitle">旋转、巡航和动捕是互斥运行模式</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-segmented" role="group" aria-label="移动端选择旋转模式">
|
||
<button type="button" class="earth-mobile-settings-pill is-active" data-rotation-mode="rotate" aria-pressed="true">旋转模式</button>
|
||
<button type="button" class="earth-mobile-settings-pill" data-rotation-mode="cruise" aria-pressed="false">巡航模式</button>
|
||
<button type="button" class="earth-mobile-settings-pill" data-rotation-mode="motion" aria-pressed="false">动捕模式</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">巡航模块</span>
|
||
<span class="earth-mobile-settings-subtitle">选择哪些可交互图层参与巡航队列。</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-chip-group" role="group" aria-label="移动端选择巡航模块">
|
||
<button type="button" class="earth-mobile-settings-chip is-active" data-cruise-module-toggle="bgp" aria-pressed="true">BGP</button>
|
||
<button type="button" class="earth-mobile-settings-chip" data-cruise-module-toggle="news" aria-pressed="false">新闻</button>
|
||
<button type="button" class="earth-mobile-settings-chip" data-cruise-module-toggle="computeCenters" aria-pressed="false">算力</button>
|
||
<button type="button" class="earth-mobile-settings-chip" data-cruise-module-toggle="vessels" aria-pressed="false">船只</button>
|
||
<button type="button" class="earth-mobile-settings-chip" data-cruise-module-toggle="cables" aria-pressed="false">海缆</button>
|
||
<button type="button" class="earth-mobile-settings-chip" data-cruise-module-toggle="satellites" aria-pressed="false">卫星</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-group">
|
||
<div class="earth-mobile-settings-title">视图</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">卫星显示风格</span>
|
||
<span class="earth-mobile-settings-subtitle">选择卫星锁定态使用自身发光或真实地表覆盖范围</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-segmented" role="group" aria-label="移动端选择卫星显示风格">
|
||
<button type="button" class="earth-mobile-settings-pill" data-satellite-display-style="self_glow" aria-pressed="false">自身发光</button>
|
||
<button type="button" class="earth-mobile-settings-pill is-active" data-satellite-display-style="ground_footprint" aria-pressed="true">真实地表覆盖</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">悬停提示</span>
|
||
<span class="earth-mobile-settings-subtitle">控制鼠标悬停地表时显示国家、位置或完整信息</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-segmented" role="group" aria-label="移动端选择悬停提示内容">
|
||
<button type="button" class="earth-mobile-settings-pill" data-surface-hover-info-mode="country" aria-pressed="false">国家</button>
|
||
<button type="button" class="earth-mobile-settings-pill" data-surface-hover-info-mode="position" aria-pressed="false">位置</button>
|
||
<button type="button" class="earth-mobile-settings-pill is-active" data-surface-hover-info-mode="full" aria-pressed="true">完整</button>
|
||
</div>
|
||
</div>
|
||
<label class="earth-mobile-settings-card">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">卫星呼吸闪烁</span>
|
||
<span class="earth-mobile-settings-subtitle">空闲时让卫星点缓慢明暗呼吸</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-satellite-idle-breathing-toggle checked>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-mobile-settings-card">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">真实卫星高度</span>
|
||
<span class="earth-mobile-settings-subtitle">按真实轨道高度压缩分层显示</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-satellite-real-altitude-toggle checked>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-mobile-settings-card">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">轨迹显示</span>
|
||
<span class="earth-mobile-settings-subtitle">控制卫星轨迹线显示</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-trails-toggle checked>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-mobile-settings-card">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">低缩放圆点</span>
|
||
<span class="earth-mobile-settings-subtitle">150% 以下将可交互图标简化为对应颜色圆点</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-interactable-compact-dots-toggle checked>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-mobile-settings-card">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">日夜模式</span>
|
||
<span class="earth-mobile-settings-subtitle">按真实太阳位置区分地球昼夜明暗</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-daynight-toggle checked>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label
|
||
class="earth-mobile-settings-card"
|
||
data-gatekeeper-permission="earth.motion_debug"
|
||
>
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">动捕调试模式</span>
|
||
<span class="earth-mobile-settings-subtitle">显示摄像头识别到的骨架连线和匹配动作</span>
|
||
</div>
|
||
<span class="earth-mobile-settings-switch">
|
||
<input type="checkbox" data-motion-debug-toggle>
|
||
<span class="earth-mobile-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<div
|
||
class="earth-mobile-settings-card earth-mobile-settings-card--stacked"
|
||
data-gatekeeper-permission="earth.motion_debug"
|
||
>
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">动捕输入源</span>
|
||
<span class="earth-mobile-settings-subtitle">网页摄像头无需安装;Motion Agent 用于双摄或网络摄像头</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-segmented" role="group" aria-label="移动端选择动捕输入源">
|
||
<button type="button" class="earth-mobile-settings-pill is-active" data-motion-provider="browser_camera" aria-pressed="true">浏览器摄像头</button>
|
||
<button type="button" class="earth-mobile-settings-pill" data-motion-provider="motion_agent" aria-pressed="false">Motion Agent</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">地球默认大小</span>
|
||
<span class="earth-mobile-settings-subtitle">用于重置视角、缩放重置和巡航视图</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-slider-row">
|
||
<input
|
||
class="earth-mobile-settings-slider"
|
||
type="range"
|
||
min="0.5"
|
||
max="5"
|
||
step="0.01"
|
||
value="1"
|
||
data-default-earth-size-slider
|
||
aria-label="移动端调整地球默认大小"
|
||
>
|
||
<span class="earth-mobile-settings-slider-value" data-default-earth-size-value>100%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-group">
|
||
<div class="earth-mobile-settings-title">地形</div>
|
||
<div class="earth-mobile-settings-card earth-mobile-settings-card--stacked">
|
||
<div class="earth-mobile-settings-copy">
|
||
<span class="earth-mobile-settings-label">地形透明度</span>
|
||
<span class="earth-mobile-settings-subtitle">调高后会呈现更明显的绿色地形覆盖效果</span>
|
||
</div>
|
||
<div class="earth-mobile-settings-slider-row">
|
||
<input
|
||
class="earth-mobile-settings-slider"
|
||
type="range"
|
||
min="0.05"
|
||
max="1"
|
||
step="0.01"
|
||
value="0.62"
|
||
data-terrain-opacity-slider
|
||
aria-label="移动端调整地形透明度"
|
||
>
|
||
<span class="earth-mobile-settings-slider-value" data-terrain-opacity-value>62%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="earth-mobile-settings-group">
|
||
<div class="earth-mobile-settings-title">系统</div>
|
||
<div class="earth-mobile-settings-actions">
|
||
<button id="mobile-settings-reset" class="earth-mobile-action-btn earth-mobile-action-btn--ghost" type="button">重置设置</button>
|
||
<a class="earth-mobile-action-btn" href="/admin" target="_blank" rel="noreferrer noopener">打开 Admin</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-mobile-drawer-slot" data-drawer-slot="details">
|
||
<div class="earth-mobile-page earth-mobile-page--details">
|
||
<div class="earth-mobile-page-intro">
|
||
<span class="earth-mobile-page-kicker">Details</span>
|
||
<span class="earth-mobile-page-summary">点击地球对象后查看统一详情</span>
|
||
</div>
|
||
<div class="earth-mobile-detail-card">
|
||
<div class="earth-mobile-detail-header">
|
||
<span id="mobile-info-card-icon" class="earth-mobile-detail-icon">🛰️</span>
|
||
<div class="earth-mobile-detail-heading">
|
||
<div id="mobile-info-card-title" class="earth-mobile-detail-title">对象详情</div>
|
||
<div id="mobile-info-card-type" class="earth-mobile-detail-type">等待选择对象</div>
|
||
</div>
|
||
</div>
|
||
<div id="mobile-info-card-content" class="earth-mobile-detail-content">
|
||
<div class="earth-mobile-detail-empty">点击海缆、算力中心、BGP 事件或卫星后在这里查看详情。</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="search-modal" class="earth-search-modal" aria-hidden="true">
|
||
<div id="search-backdrop" class="earth-search-backdrop"></div>
|
||
<div class="earth-search-sheet hud-panel" role="dialog" aria-modal="true" aria-label="搜索">
|
||
<div class="earth-search-header hud-panel__header">
|
||
<div class="hud-panel__title-group">
|
||
<div class="earth-search-kicker">搜索</div>
|
||
</div>
|
||
<div class="hud-panel__actions">
|
||
<button id="search-close" class="earth-search-close hud-panel__action hud-panel__action--close" type="button" aria-label="关闭搜索">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-search-content hud-panel__body">
|
||
<div class="earth-search-input-shell">
|
||
<span class="material-symbols-rounded earth-search-input-icon" aria-hidden="true">search</span>
|
||
<input
|
||
id="earth-search-input"
|
||
class="earth-search-input"
|
||
type="text"
|
||
inputmode="search"
|
||
autocomplete="off"
|
||
spellcheck="false"
|
||
placeholder="搜索海缆、登陆点、卫星、算力中心、BGP 事件..."
|
||
>
|
||
<button id="earth-search-clear" class="earth-search-clear hud-panel__action" type="button" aria-label="清除搜索" hidden>
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
<div id="earth-search-meta" class="earth-search-meta">输入关键词以搜索当前地球对象</div>
|
||
<div id="earth-search-results" class="earth-search-results" role="listbox" aria-label="搜索结果"></div>
|
||
<div id="earth-search-empty" class="earth-search-empty">支持搜索海缆、登陆点、卫星、算力中心、BGP 事件与观测站。</div>
|
||
</div>
|
||
</div>
|
||
</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 hud-panel" role="dialog" aria-modal="true" aria-label="设置">
|
||
<div class="earth-settings-header hud-panel__header">
|
||
<div class="hud-panel__title-group">
|
||
<div class="earth-settings-kicker">设置</div>
|
||
</div>
|
||
<button id="settings-reset" class="earth-settings-reset hud-panel__action" type="button" aria-label="重置设置">
|
||
<span class="material-symbols-rounded">restart_alt</span>
|
||
<span>重置</span>
|
||
</button>
|
||
<button id="settings-close" class="earth-settings-close hud-panel__action hud-panel__action--close" type="button" aria-label="关闭设置">
|
||
<span class="material-symbols-rounded">close</span>
|
||
</button>
|
||
</div>
|
||
<div class="earth-settings-content hud-panel__body">
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">旋转</div>
|
||
<div class="earth-settings-list">
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">旋转模式</span>
|
||
<span class="earth-settings-item-subtitle">旋转、巡航和动捕是互斥运行模式;巡航按模块轮播,动捕消费手势控制</span>
|
||
</div>
|
||
<div class="earth-settings-segmented" role="group" aria-label="选择旋转模式">
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn is-active"
|
||
data-rotation-mode="rotate"
|
||
aria-pressed="true"
|
||
>
|
||
旋转模式
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn"
|
||
data-rotation-mode="cruise"
|
||
aria-pressed="false"
|
||
>
|
||
巡航模式
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn"
|
||
data-rotation-mode="motion"
|
||
aria-pressed="false"
|
||
>
|
||
动捕模式
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">巡航模块</span>
|
||
<span class="earth-settings-item-subtitle">选择哪些可交互图层参与巡航队列。默认 BGP,其他图层按需加入。</span>
|
||
</div>
|
||
<div class="earth-settings-chip-group" role="group" aria-label="选择巡航模块">
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip is-active"
|
||
data-cruise-module-toggle="bgp"
|
||
aria-pressed="true"
|
||
>
|
||
BGP
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip"
|
||
data-cruise-module-toggle="news"
|
||
aria-pressed="false"
|
||
>
|
||
新闻
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip"
|
||
data-cruise-module-toggle="computeCenters"
|
||
aria-pressed="false"
|
||
>
|
||
算力中心
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip"
|
||
data-cruise-module-toggle="vessels"
|
||
aria-pressed="false"
|
||
>
|
||
船只
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip"
|
||
data-cruise-module-toggle="cables"
|
||
aria-pressed="false"
|
||
>
|
||
海缆
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-chip"
|
||
data-cruise-module-toggle="satellites"
|
||
aria-pressed="false"
|
||
>
|
||
卫星
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">视图</div>
|
||
<div class="earth-settings-list">
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">卫星显示风格</span>
|
||
<span class="earth-settings-item-subtitle">选择卫星锁定态使用自身发光,还是强调真实地表覆盖范围。</span>
|
||
</div>
|
||
<div class="earth-settings-segmented" role="group" aria-label="选择卫星显示风格">
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn"
|
||
data-satellite-display-style="self_glow"
|
||
aria-pressed="false"
|
||
>
|
||
自身发光
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn is-active"
|
||
data-satellite-display-style="ground_footprint"
|
||
aria-pressed="true"
|
||
>
|
||
真实地表覆盖
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">悬停提示</span>
|
||
<span class="earth-settings-item-subtitle">控制鼠标悬停地表时显示国家、位置或完整信息。</span>
|
||
</div>
|
||
<div class="earth-settings-segmented" role="group" aria-label="选择悬停提示内容">
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn"
|
||
data-surface-hover-info-mode="country"
|
||
aria-pressed="false"
|
||
>
|
||
国家
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn"
|
||
data-surface-hover-info-mode="position"
|
||
aria-pressed="false"
|
||
>
|
||
位置
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="earth-settings-segmented-btn is-active"
|
||
data-surface-hover-info-mode="full"
|
||
aria-pressed="true"
|
||
>
|
||
完整
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<label class="earth-settings-item" for="toggle-satellite-idle-breathing">
|
||
<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-satellite-idle-breathing" type="checkbox" data-satellite-idle-breathing-toggle checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-settings-item" for="toggle-satellite-real-altitude">
|
||
<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-satellite-real-altitude" type="checkbox" data-satellite-real-altitude-toggle checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-settings-item" for="toggle-trails-display">
|
||
<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-trails-display" type="checkbox" data-trails-toggle checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-settings-item" for="toggle-interactable-compact-dots">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">低缩放圆点</span>
|
||
<span class="earth-settings-item-subtitle">150% 以下将可交互图标简化为对应颜色圆点,便于巡航和总览扫视</span>
|
||
</div>
|
||
<span class="earth-settings-switch">
|
||
<input id="toggle-interactable-compact-dots" type="checkbox" data-interactable-compact-dots-toggle checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label class="earth-settings-item" for="toggle-daynight">
|
||
<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-daynight" type="checkbox" checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<label
|
||
class="earth-settings-item"
|
||
for="toggle-motion-debug"
|
||
data-gatekeeper-permission="earth.motion_debug"
|
||
>
|
||
<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-motion-debug" type="checkbox" data-motion-debug-toggle>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<div
|
||
class="earth-settings-item earth-settings-item--stacked"
|
||
data-gatekeeper-permission="earth.motion_debug"
|
||
>
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">动捕输入源</span>
|
||
<span class="earth-settings-item-subtitle">浏览器摄像头适合网页/SaaS;Motion Agent 适合双摄、RTSP/HTTP 和客户端</span>
|
||
</div>
|
||
<div class="earth-settings-segmented" role="group" aria-label="选择动捕输入源">
|
||
<button type="button" class="earth-settings-segmented-btn is-active" data-motion-provider="browser_camera" aria-pressed="true">浏览器摄像头</button>
|
||
<button type="button" class="earth-settings-segmented-btn" data-motion-provider="motion_agent" aria-pressed="false">Motion Agent</button>
|
||
</div>
|
||
</div>
|
||
<label class="earth-settings-item" for="toggle-view-layers">
|
||
<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-layers" type="checkbox" data-settings-panel="layer-toggles" checked>
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
<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-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>
|
||
<label class="earth-settings-item" for="toggle-view-tv">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">新闻直播</span>
|
||
<span class="earth-settings-item-subtitle">控制右上角 Live 新闻面板显示</span>
|
||
</div>
|
||
<span class="earth-settings-switch">
|
||
<input id="toggle-view-tv" type="checkbox" data-settings-panel="media-panel">
|
||
<span class="earth-settings-switch-track"></span>
|
||
</span>
|
||
</label>
|
||
</div>
|
||
</section>
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">视图</div>
|
||
<div class="earth-settings-list">
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">地球默认大小</span>
|
||
<span class="earth-settings-item-subtitle">用于重置视角、缩放重置和巡航视图的默认缩放比例</span>
|
||
</div>
|
||
<div class="earth-settings-slider-row">
|
||
<input
|
||
id="default-earth-size-slider"
|
||
class="earth-settings-slider"
|
||
type="range"
|
||
min="0.5"
|
||
max="5"
|
||
step="0.01"
|
||
value="1"
|
||
aria-label="调整地球默认大小"
|
||
>
|
||
<span id="default-earth-size-value" class="earth-settings-slider-value">100%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">地形</div>
|
||
<div class="earth-settings-list">
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">地形透明度</span>
|
||
<span class="earth-settings-item-subtitle">调高后会呈现更明显的绿色地形覆盖效果</span>
|
||
</div>
|
||
<div class="earth-settings-slider-row">
|
||
<input
|
||
id="terrain-opacity-slider"
|
||
class="earth-settings-slider"
|
||
type="range"
|
||
min="0.05"
|
||
max="1"
|
||
step="0.01"
|
||
value="0.62"
|
||
aria-label="调整地形透明度"
|
||
>
|
||
<span id="terrain-opacity-value" class="earth-settings-slider-value">62%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">国界精度</div>
|
||
<div class="earth-settings-list">
|
||
<div class="earth-settings-item earth-settings-item--stacked">
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title" id="boundary-precision-status">国界精度</span>
|
||
<span class="earth-settings-item-subtitle" id="boundary-precision-detail">正在读取高清国界状态...</span>
|
||
</div>
|
||
<div id="boundary-precision-progress-wrap" class="earth-boundary-progress" hidden>
|
||
<div class="earth-boundary-progress__track">
|
||
<div id="boundary-precision-progress-bar" class="earth-boundary-progress__bar"></div>
|
||
</div>
|
||
<span id="boundary-precision-progress-value" class="earth-boundary-progress__value">0%</span>
|
||
</div>
|
||
<div class="earth-settings-boundary-action-row">
|
||
<div class="earth-settings-segmented earth-settings-segmented--boundary" role="group" aria-label="选择国界精度">
|
||
<button id="boundary-precision-disable" type="button" class="earth-settings-segmented-btn is-active" aria-pressed="true">低精</button>
|
||
<button id="boundary-precision-build" type="button" class="earth-settings-segmented-btn" aria-pressed="false">高精</button>
|
||
</div>
|
||
<button id="boundary-precision-rebuild" type="button" class="earth-settings-reload-action" aria-label="重新获取并构建高清国界" title="重新获取并构建" hidden disabled>
|
||
<span class="material-symbols-rounded">refresh</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="earth-settings-section">
|
||
<div class="earth-settings-section-title">系统</div>
|
||
<div class="earth-settings-list">
|
||
<a
|
||
class="earth-settings-item earth-settings-link"
|
||
href="/admin"
|
||
target="_blank"
|
||
rel="noreferrer noopener"
|
||
>
|
||
<div class="earth-settings-copy">
|
||
<span class="earth-settings-item-title">Admin</span>
|
||
<span class="earth-settings-item-subtitle">打开管理后台仪表盘</span>
|
||
</div>
|
||
<span class="earth-settings-link-meta">
|
||
<span class="material-symbols-rounded">admin_panel_settings</span>
|
||
<span class="material-symbols-rounded">arrow_forward</span>
|
||
</span>
|
||
</a>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script type="module" src="js/main.js"></script>
|
||
</body>
|
||
</html>
|