# CMR Mini Program（彩图奔跑小程序）
> 文档版本：v1.0
> 最后更新：2026-04-02 08:28:05


## 📌 项目简介

CMR Mini Program 是一个基于微信小程序的定向运动平台，支持：

- 自定义地图（非第三方地图）
- 基于瓦片（XYZ）渲染
- TFW / GIS 数据定位
- 控制点（打卡点）与路线系统
- 适用于赛事、训练、互动地图等场景

本项目核心目标：

> 构建一套完全自研的「轻量级地图引擎 + 定向运动系统」

---

## 🧠 技术架构

```text
GeoTIFF + TFW
      ↓
QGIS 处理
      ↓
XYZ 瓦片（3857）
      ↓
小程序地图引擎
      ↓
控制点 / 路线 / 游戏逻辑
🗺️ 地图系统设计
坐标体系
类型	说明
EPSG:4326	经纬度（WGS84）
EPSG:3857	Web Mercator（瓦片使用）
瓦片规则
/{z}/{x}/{y}.png

标准 XYZ 瓦片

支持本地或服务器部署

支持自定义地图（非在线地图）

TFW 支持

支持读取：

meta.tfw

TFW 六参数：

A  像素宽度
D  旋转
B  旋转
E  像素高度（负）
C  左上角X
F  左上角Y

自动识别：

✅ 经纬度（EPSG:4326）

✅ 米制坐标（EPSG:3857）

并转换为地图中心点。

🏗️ 项目结构
cmr-miniprogram/
│
├── app.js                # 全局逻辑
├── app.json              # 全局配置
├── app.wxss              # 全局样式
├── project.config.json   # 项目配置
├── sitemap.json          # 索引配置
│
├── pages/
│   ├── index/            # 首页
│   └── map/              # 地图页（核心）
│
├── components/           # 公共组件
│
├── utils/
│   ├── projection.js     # 坐标转换
│   ├── tile.js           # 瓦片计算
│   ├── tfw.js            # TFW解析
│
├── engine/               # 地图引擎（核心）
│   ├── renderer/         # 渲染
│   ├── gesture/          # 手势处理
│   ├── camera/           # 视图控制
│   ├── overlay/          # 覆盖物（控制点等）
│
└── assets/

👉 小程序项目结构由 app.js / app.json / pages 等组成，是官方标准结构

⚙️ 开发环境
必备工具

微信开发者工具

VS Code（推荐）

Node.js（LTS）

开发模式
VS Code → 写代码
微信开发者工具 → 编译 / 运行
🚀 功能模块规划
1. 地图引擎（核心）

瓦片加载（XYZ）

经纬度 ↔ 屏幕坐标转换

拖拽 / 缩放

相机系统（center / zoom）

2. 数据层

TFW 解析

meta.json（可选）

控制点 JSON

3. 覆盖物系统

控制点（打卡点）

路线绘制

编号 / 标记

高亮 / 状态变化

4. 交互系统

点击点位

GPS 定位

判定是否到达控制点

5. 游戏逻辑

打卡顺序

计时

成绩记录

NPC / 问答扩展

📍 当前进度

✅ QGIS 瓦片生成

✅ XYZ 瓦片加载

✅ TFW 自动定位（支持 4326 / 3857）

✅ 浏览器调试页

🚧 小程序地图引擎开发中

🧩 后续计划

 地图引擎小程序版（Canvas / View）

 控制点系统

 路线规划

 离线地图支持

 B端赛事管理系统

 Web + 小程序统一架构

💡 核心设计理念

不依赖第三方地图（如高德/腾讯）

全部地图数据可控

支持离线 / 私有部署

面向定向运动深度定制

📌 适用场景

定向运动赛事

校园活动

城市探索游戏

户外训练

教育互动地图

🧠 一句话总结

这是一个“自研地图引擎 + 定向运动系统”的小程序项目，而不是普通地图应用。

