# 瓦片服务器 (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` - 瓦片文件不存在 **示例请求** ```bash curl "http://localhost:3050/tiles/6/42/20.png?time=202507220006" ``` ## 快速开始 ### 1. 编译运行 ```bash cargo run ``` ### 2. 测试 API 访问根路径查看服务状态: ```bash curl http://localhost:3050/ ``` 获取示例瓦片: ```bash curl "http://localhost:3050/tiles/6/42/20.png?time=202507220006" ``` ### 3. 创建瓦片数据 按照以下目录结构组织您的瓦片文件: ```bash 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`: 日志记录 ### 扩展建议 - 添加瓦片格式验证 - 实现瓦片缓存机制 - 支持多种图像格式 - 添加访问日志 - 实现配置文件支持