gods-eye-view 海底光缆数据集成指南:TeleGeography 数据集、CC BY-NC-SA 许可边界与 Cesium 渲染管线

gods-eye-view 海底光缆数据集成指南:TeleGeography 数据集、CC BY-NC-SA 许可边界与 Cesium 渲染管线 gods-eye-view 海底光缆数据集成指南TeleGeography 数据集、CC BY-NC-SA 许可边界与 Cesium 渲染管线【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view本文以 gods-eye-view浏览器内的实景 3D 地球空间情报模拟器仓库中捆绑的 TeleGeography 海底光缆数据集为核心系统讲解数据文件的构成与来源、CC BY-NC-SA 3.0 许可的使用边界与商用剥离方案并从源码层面拆解该数据集从 GeoJSON 加载、Cesium 实体化到交互拾取与标签渲染的完整管线。读完本文你将掌握如何合规使用这份数据、如何更新与校验数据文件以及该图层在真实代码中的实现细节。数据集是什么bundled GeoJSON 与它的来源gods-eye-view 的海底光缆图层直接依赖一份随仓库捆绑的离线数据位于 src/data/local_data/telegeography_submarine_cables/ 目录下的两个 GeoJSON 文件其原始数据来自 TeleGeography 的 Submarine Cable Map该项目官网提供的全球海底光缆公开 GeoJSON 端点。该目录共包含四个文件文件作用cable-geo.json712 条海底光缆系统的几何要素FeatureCollection要素类型为MultiLineString等landing-point-geo.json1,917 个光缆登陆点要素FeatureCollection要素类型为Pointsource.json机器可读的数据元信息来源 URL、下载时间、SHA-256 校验和等README.md本文所基于的许可与使用说明其中source.json记录了每次下载的快照信息source.json{ id: telegeography-submarine-cables, name: TeleGeography Submarine Cable Map, category: infrastructure, downloaded_at: 2026-05-24, license_note: Public map GeoJSON endpoints. Check TeleGeography terms before redistribution or commercial use. Full structured dataset is licensed separately by TeleGeography., files: [ { path: cable-geo.json, url: https://www.submarinecablemap.com/api/v3/cable/cable-geo.json, format: GeoJSON, geojson_type: FeatureCollection, feature_count: 712, sha256: 3d28db104e57982e7ae67fabe66f2ff8dc01e137458454e0de0032a8878c6bad }, { path: landing-point-geo.json, url: https://www.submarinecablemap.com/api/v3/landing-point/landing-point-geo.json, format: GeoJSON, geojson_type: FeatureCollection, feature_count: 1917, sha256: 11fc154189db51237099ffe1da2183984d666a906e5ed0e89b86421192eb622b } ] }这份数据快照下载于 2026-05-24。cable-geo.json的实际内容为标准的 GeoJSONFeatureCollectionCRS 声明为urn:ogc:def:crs:OGC:1.3:CRS84即 WGS84 经纬度每个 cable 要素的properties至少包含id、name、color、feature_id与coordinates代表性坐标geometry为MultiLineString。需要更新数据时直接访问上表中的 Source URL 重新拉取即可。许可边界为什么它不在项目的 MIT 许可覆盖范围内这是使用该数据集时最重要的一条约束。gods-eye-view 的源码以 MIT 许可开源但这份捆绑数据集不受 MIT 许可覆盖它由 TeleGeography 以Creative Commons Attribution-NonCommercial-ShareAlike 3.0CC BY-NC-SA 3.0授权。仓库数据来源总览对此有明确说明该项目对非宽松许可的数据采取单独打包、单独授权的策略而不是将其隐藏或混入源码许可。CC BY-NC-SA 3.0 的三大义务对应本文档的三条要求署名Attribution必须保留 © TeleGeography — submarinecablemap.com 的署名信息。仓库在 src/data/dataCredits.js 中通过viewer.creditDisplay.addStaticCredit(new Cesium.Credit(html, /* showOnScreen */ false))将 TeleGeography 等数据源注册进画面左下角#cesium-credits信用行中可展开的Data attribution弹层这就是署名义务在实现层面的落地。非商业NonCommercial数据不得用于商业用途。若将本项目用于商业场景必须删除这两个文件cable-geo.json、landing-point-geo.json或从 TeleGeography 获取商业授权。仓库在 DATA_SOURCES.md 中明确指出整个目录src/data/local_data/telegeography_submarine_cables/是自包含的文件夹删除后应用其余部分照常运行。相同方式共享ShareAlike对数据的再分发或改编副本必须继续遵循 CC BY-NC-SA 3.0。此外TeleGeography 更丰富的结构化数据集由 TeleGeography 另行单独/商业授权本仓库捆绑的只是其公开地图 GeoJSON 端点导出的子集。该限制同样在源码中被显式注释提醒——bundledSource.js 顶部即写道// This dataset is CC BY-NC-SA 3.0, not the projects MIT license. // Commercial users must remove it or obtain a TeleGeography license. // See DATA_SOURCES.md and the bundled datasets source.json.数据加载管线从 GeoJSON 到 Cesium 场景图层入口是 src/data/telegeographySubmarineCables.js它调用createApplicationCables并传入由 createBundledCableSource 创建的捆绑数据源。这个数据源的作用是把 GeoJSON 资产 URL 与渲染器解耦它用new URL(..., import.meta.url)解析出两个相对路径并通过fetch(..., { cache: force-cache })并发读取两个文件export function createBundledCableSource({ fetchImpl (...args) fetch(...args), } {}) { async function read(url, signal) { signal?.throwIfAborted(); const response await fetchImpl(url, { signal, cache: force-cache }); if (!response.ok) { ... throw new Error(HTTP ${response.status} for ${url}); } const json await response.json(); signal?.throwIfAborted(); return json; } return { label: TeleGeography, async fetch(signal) { const [cables, landingPoints] await Promise.all([ read(cableUrl, signal), read(landingPointUrl, signal), ]); return { cables, landingPoints }; }, }; }值得注意的设计细节read()在fetch前、response.json()后都检查signal.throwIfAborted()配合外部传入的AbortSignal实现加载取消两个文件通过Promise.all并发读取fetch缓存策略为force-cache避免重复走网络数据源只暴露label与fetch(signal)两个成员index.js 中的createSubmarineCableLayer会先校验source?.fetch || source.label否则抛出TypeError(A cable source with a label and fetch(signal) is required)——这是该图层所有数据源的统一契约。数据规范化与几何参考点提取拿到原始 GeoJSON 后ingestion.js 首先调用 geometry.js 中的normalizeFeatures为每个要素补齐字符串形式的id缺失时回退为${kind}-${index}随后用featureReference提取每个要素的参考坐标经纬度提取优先级为properties.coordinates如 cable 要素中的代表性坐标几何类型为Point时取geometry.coordinates其余类型如MultiLineString递归收集所有坐标后取经纬度算术平均。featureLabel则按properties.name→properties.id→feature.id→ 空字符串的优先级生成显示名称。这两套工具函数是后续拾取pick与标签渲染的基础。Cesium 实体化两条数据源 一个参考数据源createIngestion的load(viewer)是整个加载流程的核心它创建三个 Cesium 数据源cable 数据源Cesium.GeoJsonDataSource.load加载规范化后的光缆要素样式为clampToGround: true、stroke使用state.cableColor.withAlpha(0.95)、fill使用withAlpha(0.18)、strokeWidth: 2、markerColor/markerSize分别为state.cableColor与6landing 数据源同理加载登陆点要素stroke为state.landingColor.withAlpha(0.9)、fill为withAlpha(0.35)reference 数据源Cesium.CustomDataSource名称为${source.label} Cable References用于承载参考点标签。加载完成后代码遍历 cable 与 landing 的实体对每个实体执行parts.rendering.styleCableEntity/styleLandingEntity样式化、parts.interaction.registerPickEntity注册拾取信息kind分别为cable与landing-point并调用addReferenceStem为参考点添加柱状参考标记stem。state._count最终记录为cableFeatures.length landingFeatures.length。并发安全load 代际generation所有权机制ingestion.js最精巧的部分是它的代际所有权ownership机制每次load都会state._loadGeneration并新建一个AbortController用owns()判断本次加载是否仍然拥有生命周期。这是因为 Cesium 的dataSources.add()本身是延迟 tick 上才真正变更集合的异步点——如果用户在一个加载尚未落地时就 disable/destroy随后 add 依然会物化到场景中。该实现的应对方式是用Promise.allSettled等待三次add全部 settle若!owns() || rejectedAdd则把本次代际添加的所有数据源逐个viewer.dataSources.remove(source, true)补偿移除对从未 add 成功的源remove 是无害的 no-op而 Cesium 的 add 在抛出dataSourceAdded事件前就会先把集合变更落地因此 rejected 的 add 也可能已产生变更必须一并清理只有仍然拥有生命周期的加载才会在 finally 中清除_loading/_abort避免过期加载误清状态导致后续 enable 重复加载。这一模式在注释中说明其思想继承自 militaryAwareness 的activationId模式是处理快速开关图层 异步加载竞态的可复用范本。渲染策略标签的深度决策与性能预算海底光缆图层在 policy.js 中集中管理渲染相关的关键常量这是理解其视觉表现与性能取舍的窗口常量值含义BASE_CABLE_COLOR#39d5ff光缆线条基准色青色BASE_LANDING_COLOR#8fffd2登陆点基准色浅绿STEM_TARGET_PX66参考标记柱顶端在屏幕上的目标像素高度CABLE_REFERENCE_LABEL_MAX_DISTANCE_M9000000参考标签的最大可见距离米CABLE_REFERENCE_LABEL_WINNER_CAP160提交给共享宿主的最邻近可见标签候选上限CABLE_OVERLAY_SOURCE_IDtelegeography-submarine-cables共享世界叠加层的 source id与图层 id 一致CABLE_OVERLAY_COLLISION_CAPACITY96共享环境标签绘制预算与基建类数据源一致CABLE_STEM_TIP_EPSILON_M0.5相机静止时忽略亚米级参考柱顶端抖动CABLE_SWEEP_MOTION_PROBE_INTERVAL_MS2000运动探测回退窗口详见下文CABLE_SWEEP_MOTION_EPSILON_M250判定为有效运动的相机位移阈值其中两个常量的设计意图值得展开扫描门sweep gate的运动回退探测。参考标签的脏标记扫描sweep由moveEnd事件驱动但追踪实体、轨道飞行等相机可能永远不触发moveEnd。因此CABLE_SWEEP_MOTION_PROBE_INTERVAL_MS 2000保证这种相机下每 2 秒至少采样一次运动而CABLE_SWEEP_MOTION_EPSILON_M 250的注释给出了推导依据——参考柱顶端高度约为相机距离的 8.5%按 66 px 目标计算250 米的相机位移会使顶端移动约 21 米低于该阈值的位移在视觉上无法区分交给moveEnd精确收尾即可。二者配合避免了对每一帧都做脏扫描。标签深度决策Phase 5 修订2026-08-18。常量CABLE_LABEL_DEPTH_DECISION记录了渲染架构上的一次明确取舍export const CABLE_LABEL_DEPTH_DECISION Object.freeze({ option: 2, decidedAt: 2026-08-18, supersedes: 2026-08-02, depthTested: false, });方案 2 将光缆参考文字从 Cesium 原生LabelGraphics方案 1迁移到共享的世界叠加层宿主水平剔除 钥匙孔淡出不做逐标签瓦片深度测试。方案 1 在 2,629 个参考实体上每个实体每帧要评估 2 个CallbackProperty通道并在每次扫描时重建 160 个标签的LabelCollection仅该图层在相机运动期间就消耗约 9.5 ms/帧。方案 2 牺牲了低空城市级相机下照片级瓦片对标签文字的遮挡深度线索但换来显著性能收益——这与水坝、数据中心等基建类数据源采用的宿主合成策略一致锚点与参考柱仍保持 Cesium 原生并被深度测试。此外CABLE_GLOBE_STACK_IDS是一个显式白名单bing-aerial、bing-labels、esri-imagery、osm只有这些 map stack 的影像会渲染在显示中的 Cesium 地球上其余未知名 stack 一律回退到所有表面都可见的保守行为避免被错误断言到地形表面。配套的单测会遍历真实的MAP_STACKS一旦漏配会立即暴露。交互与生命周期拾取注册与图层装卸在加载过程中每个实体都通过parts.interaction.registerPickEntity(entity, { kind, reference, label })注册到拾取系统基于WeakMap因此用户点击光缆线或登陆点时能获得带类型cable/landing-point、参考坐标与名称的拾取结果。图层本身由createSubmarineCableLayer组装渲染 / 摄取 / 交互三部分后经createLifecycle包装成完整的生命周期对象支持启停enable/disable、销毁destroy等操作state中记录的_cachedCableJson/_cachedLandingJson缓存使得重复启用不会重复拉取文件。这些能力都由配套测试验证例如 bundledSource.test.mjs 覆盖了数据源读取与错误路径qa-cables-overlay.mjs、qa-cables-render-probe.mjs、qa-cables-shot.mjs 等 QA 脚本从叠加层渲染、渲染探针与成片质量三个角度对光缆图层做回归验证。合规使用速查基于上述文档与源码整理出一份可直接执行的合规操作清单查看进入应用后启用海底光缆图层即可看到 712 条光缆与 1,917 个登陆点的渲染结果保留署名不要移除画面左下角信用行中的 Data attribution 弹层TeleGeography 的归属信息© TeleGeography — submarinecablemap.com通过 src/data/dataCredits.js 注册其中商用剥离若用于商业用途删除整个自包含目录 src/data/local_data/telegeography_submarine_cables/或联系 TeleGeography 获取商业授权应用其余部分不受影响再分发对数据的任何改编或再分发副本必须继续采用 CC BY-NC-SA 3.0 授权更新数据从source.json中记录的官方 GeoJSON 端点重新下载并替换cable-geo.json/landing-point-geo.json更新后建议同步核对feature_count与sha256扩展数据源若想接入其他海底光缆数据实现含label与fetch(signal)的 source 对象并传给createSubmarineCableLayer即可其余渲染与交互逻辑完全复用。【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考