Go to file
2025-07-22 21:24:34 +08:00
src init 2025-07-22 21:24:34 +08:00
.gitignore init 2025-07-22 21:24:34 +08:00
Cargo.lock init 2025-07-22 21:24:34 +08:00
Cargo.toml init 2025-07-22 21:24:34 +08:00
README.md init 2025-07-22 21:24:34 +08:00

瓦片服务器 (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: 日志记录

扩展建议

  • 添加瓦片格式验证
  • 实现瓦片缓存机制
  • 支持多种图像格式
  • 添加访问日志
  • 实现配置文件支持