news 2026/5/1 5:26:41

使用Nginx基于下载的全球瓦片数据本地搭建瓦片底图服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Nginx基于下载的全球瓦片数据本地搭建瓦片底图服务

如何你已经有了 按 level(zoom)分类的 JPG或PNG 格式的瓦片数据需要发布瓦片数据
✅ 首选:Nginx /Apache 静态服务器直发
✅ 大规模:TileServer / MBTiles / 对象存储

为什么不用Geoserver?
GeoServer 不适合“管理已经切好的 XYZ/JPG 瓦片” GeoServer 的设计前提是:
原始空间数据 → 动态 / 缓存切片. 而不是: 已切好的瓦片 → 再发布

Nginx(其次 Apache)静态发布就是效率最高、最简单、最稳定的方案,而且这是行业共识,不是“经验之谈”。
静态瓦片请求的理想路径是:
HTTP 请求
→ 内核 sendfile
→ 文件系统页缓存
→ 网卡
❌ 没有 Python / Java
❌ 没有渲染
❌ 没有数据库
❌ 没有坐标计算
👉 IO 直通 = 性能极限

Nginx 的三大杀手级优势

  1. 事件驱动(epoll)
  • 单进程可扛数万并发
  • 非阻塞 IO
  1. sendfile + mmap
  • 文件直接从内核到网卡
  • 零拷贝
  1. 文件系统缓存命中率极高
  • 热瓦片 = 内存直出
  • QPS 几乎只看网卡带宽

一、最终目标

访问方式:
http://127.0.0.1/tiles/{z}/{x}/{y}.jpg
特点:
⚡ 极限性能
📦 零依赖
🔒 可加 HTTPS / 鉴权
🧱 可扩展 CDN

二、准备工作

1. 安装 Nginx

sudo apt update sudo apt install -y nginx

检查:

nginx -v

2. 准备瓦片目录(非常重要)

推荐目录结构

/data/tiles/ └── 0/ └── 0/ └── 0.jpg

即:
/data/tiles/{z}/{x}/{y}.jpg

📌 注意:
目录名必须是数字
文件名只包含 y.jpg

3. 权限设置(很多人卡在这里)

sudo chown -R www-data:www-data /data/tiles sudo chmod -R 755 /data/tiles

三、Nginx 核心配置

1. 新建站点配置

sudo nano /etc/nginx/sites-available/tiles.conf

2.tiles.conf内容

server { listen 80 default_server; listen [::]:80 default_server; # 瓦片根目录 #root /data; # 静态瓦片发布 location /tiles/ { alias /data/tiles/; autoindex on; # 直接命中磁盘文件 try_files $uri =404; # 缓存 1 年(瓦片不可变) expires 365d; add_header Cache-Control "public, immutable"; # 允许跨域 add_header Access-Control-Allow-Origin *; # 关闭访问日志(减少 IO) access_log off; } # 防止误访问根目录 location / { return 404; } }

3. 启用站点

sudo ln -s /etc/nginx/sites-available/tiles.conf /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx

四、系统级性能开关(必须)

编辑主配置:

sudo nano /etc/nginx/nginx.conf

确保这些是 on:

sendfile on; tcp_nopush on; tcp_nodelay on; aio threads;

五、验证是否正常(3 步)
1️⃣ 浏览器访问一个瓦片

http://127.0.0.1/tiles/1/0/0.jpg

✔ 能显示图片 = 成功
2️⃣ 用 curl 看缓存头
curl -I http:///127.0.0.1/tiles/1/0/1.jpg
应看到:
Cache-Control: public, immutable
Expires: …
3️⃣ Leaflet 测试
index.html

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <title>Leaflet 双 TileLayer(低分 + ROI 高分)</title> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /> <style> html, body, #map { width: 100%; height: 100%; margin: 0; padding: 0; } </style> </head> <body> <div id="map"></div> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script> <script> /* ========================= 1️⃣ 地图初始化 ========================= */ const map = L.map('map', { center: [35, 105], // 中国附近 zoom: 4, minZoom: 1, maxZoom: 18 }); /* ========================= 2️⃣ 瓦片 URL ========================= */ const TILE_URL = 'http://127.0.0.1/tiles/{z}/{x}/{y}.jpg'; /* ========================= 3️⃣ 低分全球底图(z ≤ 5) ========================= */ const lowResLayer = L.tileLayer(TILE_URL, { tms: true, // ⚠️ 你的是 TMS minZoom: 1, maxZoom: 18, maxNativeZoom: 5, // 🔑 全球真实瓦片只到 5 attribution: 'Low Resolution Tiles' }); /* ========================= 4️⃣ 高分 ROI 图层(z ≥ 6) ========================= */ const highResLayer = L.tileLayer(TILE_URL, { tms: true, // 同样是 TMS minZoom: 6, // 🔑 6 级开始才请求 maxZoom: 18, opacity: 1.0, attribution: 'High Resolution ROI Tiles' }); /* ========================= 5️⃣ 叠加顺序(关键) ========================= */ // ⚠️ 先加低分,再加高分 lowResLayer.addTo(map); highResLayer.addTo(map); /* ========================= 6️⃣ 调试:点击查看当前级别 ========================= */ map.on('click', (e) => { console.log( `lat=${e.latlng.lat.toFixed(6)}, ` + `lon=${e.latlng.lng.toFixed(6)}, ` + `zoom=${map.getZoom()}` ); }); </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 17:47:14

转行做数据安全工程师:需要掌握的核心技术

大学生学逆向工程&#xff1a;入门需要掌握哪些基础知识&#xff1f; 一、引言 逆向工程&#xff08;Reverse Engineering&#xff09;是网络安全领域的重要技能&#xff0c;通过反编译、调试等手段&#xff0c;将二进制文件&#xff08;如 exe、elf&#xff09;还原为可读代码…

作者头像 李华
网站建设 2026/4/26 21:52:24

mysql生成千万级数据

1.生成数据需要的工具mysqlversion&#xff1a;8.0.25mysql workbench2.生成数据的步骤1.创建表 2.创建存储过程 3.调用存储过程3.具体步骤3.1创建表create table data_test(id int not null auto_increment primary key comment 主键,c1 varchar(40) comment uuid ) comment t…

作者头像 李华
网站建设 2026/4/18 5:12:39

我是如何解决接口自动化中的20个典型问题的?

我是一名接口自动化测试工程师&#xff0c;在公司中负责接口自动化测试的设计和执行。在公司中&#xff0c;接口自动化测试非常重要&#xff0c;因为公司的业务场景非常复杂&#xff0c;需要保证接口的质量。在这篇文章中&#xff0c;我将分享我在公司中接口自动化测试遇到的20…

作者头像 李华
网站建设 2026/4/17 16:12:09

救命神器9个AI论文软件,助你轻松搞定继续教育论文!

救命神器9个AI论文软件&#xff0c;助你轻松搞定继续教育论文&#xff01; AI 工具助力论文写作&#xff0c;效率提升不再是梦 在继续教育的道路上&#xff0c;论文写作往往成为许多学员的“拦路虎”。无论是课程论文、毕业论文&#xff0c;还是科研成果的总结&#xff0c;都需…

作者头像 李华
网站建设 2026/4/25 19:46:17

服务渗透之MYSQL数据库安全

服务渗透之MYSQL数据库安全 1&#xff09;服务渗透之数据库安全 MySQL数据库服务是服务器核心数据支撑&#xff0c;其安全关乎业务命脉。需重点关注服务开放状态如3306端口及非默认端口暴露&#xff0c;配置缺陷如远程访问未限制&#xff0c;空密码允许登录等&#xff0c;权限管…

作者头像 李华
网站建设 2026/4/23 13:43:34

以数据化能力推动安全治理落地生效的智能引擎

一、概要&#xff5c;用数据化成果验证分类分级的真实价值提示&#xff1a;数据分类分级的价值&#xff0c;最终要体现在“看得见、用得上、落得下”的成效上。 在数字经济全面深化的背景下&#xff0c;数据已成为企业最核心的生产要素之一。知源-AI数据分类分级产品以“数据化…

作者头像 李华