目标:构建一个支持地球—太阳系—宇宙三级尺度、统一表达“中心 + 半径 + 可信度”三段式结构的可落地时空数据基础设施,服务于数字人文、天文史、文化遗产与未来叙事研究。
一、总体架构
graph TD
A[用户输入] --> B{数据类型}
B -->|地球事件| C[Earth Layer: WGS84 + JD(TT)]
B -->|天文事件| D[Solar/Cosmic Layer: ICRS + TCB]
C & D --> E[统一时空对象模型]
E --> F[存储层: PostgreSQL + PostGIS + 自定义类型]
E --> G[计算层: Python/GeoPandas + Astropy + Uncertainty Engine]
E --> H[可视化层: MapLibre + TimelineJS + 3D Celestial Viewer]
F & G & H --> I[API 服务]
I --> J[Web 应用 / 知识图谱 / DH 平台]
二、核心数据模型(可直接用于数据库设计)
1. 时空参考系枚举(spacetime_reference_system)
| code | name | description |
|---|---|---|
earth | Earth-Centered | WGS84 (EPSG:4326) + Terrestrial Time (TT) |
solarsys | Solar System Barycentric | ICRS (J2000) + Barycentric Coordinate Time (TCB) |
cosmic | Cosmic Comoving | ICRS + Redshift + Cosmic Time (ΛCDM model) |
2. 置信度分级标准(CL-Level)
| Level | Code | Confidence | Criteria |
|---|---|---|---|
| CL1 | high | ≥0.9 | 多源交叉验证,仪器实测 |
| CL2 | medium | 0.7–0.89 | 单源可靠记载,有上下文佐证 |
| CL3 | low | 0.4–0.69 | 推测、孤证、模糊描述 |
| CL4 | speculative | <0.4 | 假说、象征性、无直接证据 |
✅ 支持扩展为连续值(0.0–1.0),但建议优先使用分级以保证语义一致性。
3. 统一时空对象表结构(PostgreSQL)
-- 自定义类型:不确定空间
CREATE TYPE uncertain_space AS (
reference_system TEXT, -- 'earth', 'solarsys', 'cosmic'
center JSONB, -- 结构见下文
spatial_uncertainty JSONB, -- 含 angular_radius_arcsec, distance_uncertainty_ly 等
confidence_level TEXT -- 'high', 'medium', ...
);
-- 自定义类型:不确定时间
CREATE TYPE uncertain_time AS (
reference_system TEXT,
center_jd DOUBLE PRECISION, -- 儒略日(TT 或 TCB,需注明)
time_radius_seconds DOUBLE PRECISION,
confidence_level TEXT
);
-- 主表
CREATE TABLE spacetime_entities (
id TEXT PRIMARY KEY,
label TEXT NOT NULL,
description TEXT,
space uncertain_space,
"time" uncertain_time,
original_source TEXT,
conversion_metadata JSONB, -- 记录转换路径、历法、锚点等
created_at TIMESTAMPTZ DEFAULT NOW()
);
center 字段结构示例:
- Earth:
{ "type": "earth", "lon": 116.4, "lat": 39.9, "alt_m": 50 }
- SolarSys / Cosmic:
{
"type": "icrs",
"ra_deg": 83.8958,
"dec_deg": -69.2667,
"distance_ly": 168000,
"redshift": null
}
三、关键技术模块
模块 1:坐标与时间转换引擎(Python)
# 依赖库
# - astropy: 历法、ICRS、TCB/TT 转换
# - pyproj: WGS84 与投影转换
# - convertdate: 农历、干支等历史历法
class SpacetimeConverter:
def earth_to_icrs(self, lon, lat, jd_tt):
"""将地球经纬度+TT时间转换为ICRS方向(忽略距离)"""
from astropy.coordinates import EarthLocation, ICRS, AltAz
from astropy.time import Time
loc = EarthLocation(lon=lon, lat=lat, height=0)
t = Time(jd_tt, format='jd', scale='tt')
altaz = AltAz(obstime=t, location=loc)
icrs = altaz.transform_to(ICRS)
return icrs.ra.deg, icrs.dec.deg
def tt_to_tcb(self, jd_tt, earth_pos=None):
"""将TT时间转换为TCB(需地球在太阳系中的位置)"""
# 使用 astropy 的 relativistic time conversion
# 实际需调用 SOFA 或 ERFA 库
pass
def parse_historical_date(self, text, calendar="chinese_lunar"):
"""解析“乾元二年秋”等历史日期 → JD(TT) ± uncertainty"""
# 调用 convertdate + 规则引擎
pass
模块 2:不确定性传播计算器
def propagate_spatiotemporal_uncertainty(anchor, offset):
"""
锚点 + 相对偏移 → 绝对时空 + 合并不确定性
"""
# 空间:sqrt(anchor.r² + offset.r²)
new_space_radius = math.sqrt(
anchor.space.spatial_uncertainty['radius_m']**2 +
offset.space_offset_uncertainty**2
)
# 时间:同理
new_time_radius = math.sqrt(
anchor.time.time_radius_seconds**2 +
offset.time_offset_seconds**2
)
# 可信度:取 min 或贝叶斯融合
new_conf = min(anchor.space.confidence_level_value,
anchor.time.confidence_level_value,
offset.confidence)
return {
"space": { "center": ..., "radius_m": new_space_radius, "confidence": new_conf },
"time": { ... }
}
模块 3:时空关系查询 API(PostGIS 扩展)
-- 示例:查找所有“可能与事件A同时同地”的事件
SELECT b.id
FROM spacetime_entities a, spacetime_entities b
WHERE a.id = 'event_A'
AND ST_DWithin(
ST_Transform(a.space.center::geometry, 4326),
ST_Transform(b.space.center::geometry, 4326),
a.space.spatial_uncertainty->>'radius_m'::float +
b.space.spatial_uncertainty->>'radius_m'::float
)
AND ABS(a.time.center_jd - b.time.center_jd) * 86400 <=
a.time.time_radius_seconds + b.time.time_radius_seconds
AND (a.space.confidence_level_value * a.time.confidence_level_value) > 0.5;
四、数据集对接与迁移策略
1. 现有数据集适配方案
| 数据集 | 适配方式 |
|---|---|
| CBDB(中国历代人物传记) | 将籍贯/仕历地转为 L2(县治中心 ±30km),时间转为 JD(TT) ± 季度 |
| Pleiades(古代地中海地名) | 直接映射到 earth 层,保留其 location_type 和 accuracy 字段 |
| NASA Exoplanet Archive | 转为 cosmic 层,赤经/赤纬→ICRS,发现时间→TCB(校正光行时) |
| SILKNOW | 保留其本体,通过 SPARQL 映射到本模型 |
2. 数据录入工具(Web 表单)
提供三种录入模式:
- 精确模式:输入经纬度 + 公历日期(自动转 JD)
- 模糊模式:选择行政区 + 季节/年号(自动估算半径与 JD)
- 相对模式:选择锚点事件 + 偏移(如“李白出生后20年”)
所有录入自动记录
conversion_metadata,支持溯源。
五、可视化与交互设计
1. 地球视图(MapLibre GL JS)
- 高精度点:实心圆(颜色深)
- 模糊区域:半透明缓冲区(颜色浅)
- 悬停显示:置信度、原始记载、误差范围
2. 宇宙视图(Three.js + Celestia-style)
- 显示 ICRS 坐标下的天体位置
- 用光锥(light cone)表示“可观测事件”
- 时间轴可切换 TT / TCB / 宇宙时间
3. 时空联动面板
- 左侧地图,右侧时间轴
- 选择时间区间 → 高亮同期地理事件
- 拖动地图区域 → 显示该地历史事件时间分布
六、实施路线图(6个月)
| 阶段 | 时间 | 交付物 |
|---|---|---|
| Phase 1:核心模型与存储 | Month 1–2 | PostgreSQL schema + Python 类库 + 转换引擎原型 |
| Phase 2:地球层支持 | Month 3 | CBDB/SILKNOW 数据迁移工具 + Web 录入界面 |
| Phase 3:宇宙层支持 | Month 4 | NASA 数据接入 + ICRS/TCB 转换模块 |
| Phase 4:计算与API | Month 5 | 时空关系查询 API + 不确定性传播服务 |
| Phase 5:可视化与发布 | Month 6 | Web 应用 + 开放 API + 文档 |
七、开源与互操作性
- 数据格式:支持导出为 JSON-LD(兼容 Schema.org)、GeoJSON(扩展属性)、RDF(OWL 本体)
- API 标准:遵循 OGC API – Features,扩展
uncertainty字段 - 代码开源:GitHub 仓库,MIT 许可
- 社区共建:提供 CL-Level 编码指南,鼓励领域专家贡献转换规则
八、预期成果
- 一个可部署的时空数据平台,支持从“村东五里”到“大麦哲伦云”的统一建模;
- 一套开放标准,推动数字人文项目采用结构化不确定性表达;
- 跨领域知识融合能力:连接历史文献、考古遗址、天文观测;
- 为AI训练提供高质量时空知识:大模型可学习“模糊但合理”的时空推理。
结语:本方案不追求“终极宇宙真理”,而是提供一个可扩展、可解释、可协作的时空基础设施——让每一个历史事件,无论精确或模糊,都能在四维时空中找到它“最可能的位置”。
📄 附录:
技术负责人:___孟繁永________
版本:v1.0
日期:2025年12月1日