立项背景与目标:构建一套高质量的全球国家、美食、旅游景点、主要城市数据集,并通过交互式3D地球仪进行可视化呈现,服务于旅行、美食、旅游相关的Web内容项目。
核心功能模块:
• 数据采集模块:从 Wikidata SPARQL 查询203个国家基础信息、美食(每国30条)、景点(每国30个,含坐标)、主要城市(每国6个)
• 数据增强模块:通过Wikipedia REST API获取详细描述、图片和链接(中文优先,英文回退)
• 数据合并导出:输出最终JSON文件(661KB)
• 3D地球Web应用:Three.js渲染,含蓝色星球贴图、大气光晕着色器、星空背景、国家边界线、可点击国家、景点金色标记点
• 国家信息面板:侧滑面板,分Tab展示美食、景点、城市
• 搜索功能:支持中文名、英文名、ISO代码搜索国家
• 本地Web服务器:提供 /api/data 和 /api/world-atlas 两个API端点
最终数据规模:203个国家框架,52个有实际数据,287个美食项,977个景点(含坐标),254个城市(含坐标)
业务流程:
运行main.py → SPARQL查询203国基础信息 → 逐国采集美食/景点/城市 → Wikipedia增强描述 → 增量缓存到enriched.json(支持断点续采)→ merge合并 → 输出earth_data.json → 启动web/server.py → 浏览器加载3D地球 → 用户旋转/缩放/点击国家/搜索 → 查看美食/景点/城市
整体架构:数据采集与展示分离,通过共享JSON文件解耦
• scraper/(Python数据采集包):config.py、sparql.py(查询客户端+限速重试)、countries.py、wikidata.py(采集器)、wikipedia.py(增强)、merge.py
• web/(3D地球前端):index.html(单页应用1073行)、server.py、data/countries-110m.json
设计特点:
• 弹性采集策略:SPARQL查询间隔1.5秒限速、最多3次重试(指数退避)、请求超时180秒
• 断点续采:enriched.json文件充当检查点,--resume标志跳过已采集国家
• 3D坐标投影:latLngToVec3()将地理坐标转为Three.js笛卡尔坐标
• ISO编码桥接:硬编码ISO 3166-1数字码到Alpha-2码映射表