当前位置: 首页 > news >正文

Ubuntu上vue3 vite使用MBTiles搭建地图服务器

1、首先从点击进入连接下载你所需要的地图.mbtiles,我选的是步骤如下:

点击Asia
在这里插入图片描述
然后再点击China
在这里插入图片描述
再点击experimental vector tle package
在这里插入图片描述
就可以下载下来china-shortbread-1.0.mbtiles 并将其修改为china.mbtiles

2、在桌面或者其他地方创建一个文件夹,这里取名为mbtiles-server,将china.mbtiles放入此文件夹中,此文件夹中的内容如下:

在这里插入图片描述

需要创建server.js, index.html 和 package.json这三个文件,其中server.js中的内容如下:

const path = require('path');
const Koa = require('koa');
const Router = require('@koa/router');
const cors = require('koa2-cors');
const MBTiles = require('@mapbox/mbtiles');const router = new Router();
let mbtiles = null;// new MBTiles(path.resolve(__dirname, "taiwan.mbtiles"), (err, mb) => {
new MBTiles(path.resolve(__dirname, "china.mbtiles"), (err, mb) => {mbtiles = mb;
});function getTile (x, y, z) {return new Promise((resolve, reject) => {mbtiles.getTile(z, x, y, (err, data, headers) => {if (err) {reject(err);return;}resolve(data);})})
}router.get('/tile/:z/:x/:y.pbf', async (ctx, next) => {const { x, y, z } = ctx.params;const data = await getTile(x, y, z);ctx.body = data;ctx.set('content-encoding', 'gzip') // 注意响应头ctx.set('content-type', 'application/x-protobuf')return next();
});const app = new Koa();app.use( // 跨域cors({origin: function (ctx) { //设置允许来自指定域名请求// if (ctx.url === '/tile') {return '*'; // 允许来自所有域名请求// }},maxAge: 500000000000, //指定本次预检请求的有效期,单位为秒。credentials: true, //是否允许发送CookieallowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法'allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段})
);app.use(router.routes());app.listen(3000);

index.html中的内容如下:

<!DOCTYPE html>
<html>
<head><title>MBTiles 测试</title><link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" /><style>#map { height: 100vh; }</style>
</head>
<body>
<div id="map"></div>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<script src="https://unpkg.com/leaflet.vectorgrid@1.3.0/dist/Leaflet.VectorGrid.bundled.js"></script>
<script>// 初始化地图const map = L.map('map').setView([39.9042, 116.4074], 5);// 添加矢量瓦片层(需要合适的矢量瓦片样式)const vectorTileLayer = L.vectorGrid.protobuf("http://localhost:3000/tile/{z}/{x}/{y}.pbf", {vectorTileLayerStyles: {// 定义样式,根据你的数据图层调整// water: {//   fill: true,//   fillColor: '#9bc2c4',//   fillOpacity: 0.6,//   color: '#9bc2c4',//   opacity: 0.6,//   weight: 1// },// transportation: {//   color: '#cccccc',//   weight: 1// }},maxZoom: 14,minZoom: 0}).addTo(map);// 添加一个底图以便参考L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: '© OpenStreetMap contributors'}).addTo(map);
</script>
</body>
</html>

package.json中的内容如下:

{"name": "mbtiles-server","version": "1.0.0","description": "MBTiles tile server","main": "server.js","scripts": {"start": "node server.js","dev": "nodemon server.js"},"dependencies": {"koa": "^2.14.0","@koa/router": "^12.0.0","koa2-cors": "^2.0.6","@mapbox/mbtiles": "^0.12.1"},"devDependencies": {"nodemon": "^2.0.22"}
}

3、需要安装一下server.js依赖的包,即在 mbtiles-server这个文件夹下打开个终端,运行npm install即可安装package.json中所需要的包

4、3的终端中运行npm start 或者 node server.js即可启动node后端,当然肯定是需要安装node的,我的node版本为v18.20.6

5、然后直接在浏览器中打开index.html即可看到如下图所示:

在这里插入图片描述

问题就是服务器太卡,还有就是瓦片不全,响应速度过慢

参考文章如下:
https://zhuanlan.zhihu.com/p/390797186 写的不完整

http://www.dtcms.com/a/515907.html

相关文章:

  • CClink转EtherCAT协议转换落地——汇川PLC管控球磨机CClink伺服案例
  • wordpress handsome长沙seo免费诊断
  • ChatGPT Atlas 发布:把 AI 直插进浏览器的一次重构
  • 第1章:初识Linux系统——第9节:安装服务软件、维护文件系统安全与文件权限配置实例
  • openAI发布的AI浏览器:什么是Atlas?(含 ChatGPT 浏览功能)macOS 离线下载安装Atlas完整教程
  • 西安市高陵区建设局网站聊城网站制作信息
  • ssh别名和多服务器同步文件
  • 苏州建设网站的公司软件开发和编程的区别
  • Linux I²C 总线驱动开发:从架构到实战的完整指南
  • Eureka控制台页面参数说明 ​
  • 智慧养老+适老化改造:科技与温情的双向奔赴,让晚年生活更有尊严
  • 什么是网络安全,网络空间安全有哪些安全?
  • 深圳网站建设要多少钱网站开发h5技术
  • 【浙江政务服务网-注册_登录安全分析报告】
  • 二十三、K8s企业级架构设计及落地
  • 网站建设销售客户开发创建个人网站的步骤
  • MySQL覆盖索引深度解析:从原理到实践的性能优化之道
  • 国产中间件与浏览器选型指南:覆盖政务、金融、电信应用场景
  • linux学习笔记(49)Redis详解(1)
  • 扩展、Docker-compose-1
  • Label Smoothing
  • 深入理解 MySQL 锁机制:全局锁、表锁与行锁
  • 本科专业 网站开发wordpress子站点目录
  • ABP Framework 与 若依(RuoYi) 产品可用性全方位碰撞
  • SharpDevelop下载安装图解(附安装包,适合新手)
  • 深度学习-174-知识图谱技术之langchain与neo4j的结合应用
  • nlp security tk
  • PixBean - 小豆包API专属工具站已发布 v1.0.0
  • 【题解】P2501 [HAOI2006] 数字序列 [思维 + dp]
  • Xshell效率实战系列五:大文件传输封神技——断点续传+压缩传输双buff拉满