mmap/README.md
2025-07-22 21:24:34 +08:00

119 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 瓦片服务器 (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`: 日志记录
### 扩展建议
- 添加瓦片格式验证
- 实现瓦片缓存机制
- 支持多种图像格式
- 添加访问日志
- 实现配置文件支持