2.3 KiB
2.3 KiB
瓦片服务器 (Tile Server)
基于 Axum 的高性能瓦片服务器,支持通过时间参数动态加载不同时次的瓦片数据。
功能特性
- ✅ 支持时间参数动态加载瓦片
- ✅ 标准 XYZ 瓦片格式支持
- ✅ 高性能异步文件读取
- ✅ 适当的 HTTP 缓存头设置
- ✅ 完整的错误处理
- ✅ CORS 支持
目录结构
tiles/
└── 202507220000/ ← 时次目录(YYYYMMDDHHMM)
└── {z}/{x}/{y}.png
└── 202507220006/
└── {z}/{x}/{y}.png
API 接口
获取瓦片
请求
GET /tiles/{z}/{x}/{y}.png?time={time}
参数说明
z: 缩放级别 (u8)x: X 坐标 (u32)y: Y 坐标 (u32)time: 时间参数,格式为 YYYYMMDDHHMM (12位数字)
响应
200 OK- 返回 PNG 图像数据400 Bad Request- 参数错误404 Not Found- 瓦片文件不存在
示例请求
curl "http://localhost:3050/tiles/6/42/20.png?time=202507220006"
快速开始
1. 编译运行
cargo run
2. 测试 API
访问根路径查看服务状态:
curl http://localhost:3050/
获取示例瓦片:
curl "http://localhost:3050/tiles/6/42/20.png?time=202507220006"
3. 创建瓦片数据
按照以下目录结构组织您的瓦片文件:
mkdir -p tiles/202507220000/6/42
# 将您的瓦片文件放入相应目录
cp your-tile.png tiles/202507220000/6/42/20.png
配置说明
- 端口: 3050 (可在 main.rs 中修改)
- 绑定地址: 0.0.0.0 (监听所有网络接口)
- 缓存策略: 1小时 (public, max-age=3600)
错误处理
服务器会返回详细的错误信息:
- 缺少时间参数:
400 Bad Request - 时间格式无效:
400 Bad Request - 瓦片不存在:
404 Not Found - 服务器错误:
500 Internal Server Error
开发说明
项目结构
src/
└── main.rs # 主服务器代码
Cargo.toml # 依赖配置
README.md # 项目说明
tiles/ # 瓦片数据目录
核心依赖
axum: Web 框架tokio: 异步运行时tower-http: HTTP 中间件 (CORS)tracing: 日志记录
扩展建议
- 添加瓦片格式验证
- 实现瓦片缓存机制
- 支持多种图像格式
- 添加访问日志
- 实现配置文件支持