nodejs+mp2+mbtiles+实现google底图服务(centos7)
1 安装配置 nodejs + pm2
# 下载nodejs
wget https://nodejs.org/dist/v11.10.0/node-v11.10.0-linux-x64.tar.xz
# 解压
chmod +x node-v11.10.0-linux-x64.tar.xz
xz -d node-v11.10.0-linux-x64.tar.xz
tar -xf node-v11.10.0-linux-x64.tar
# 修改路径
mv ./node-v11.10.0-linux-x64 /usr/share/node
# node npm 文件链接
ln -s /usr/share/node/bin/node /usr/bin/node
ln -s /usr/share/node/bin/npm /usr/bin/npm
# 验证安装
node -v
npm -v
# 设置npm淘宝镜像加速
npm config set registry https://registry.npm.taobao.org
#npm install -g cnpm --registry=https://registry.npm.taobao.org
# 代理设置
# npm config set proxy http://10.121.5.248:808
# npm config set proxy=http://10.121.5.248:808
# 安装pm2
npm install -g pm2
# pm2 文件链接
ln -s /usr/share/node/lib/node_modules/pm2/bin/pm2 /usr/local/bin
# 运行服务demo
# pm2 start server.js
# 查看pm运行情况
# pm2 list
# 停止所有
# pm2 stop all
# 查看日志
# pm2 logs -f
2 安装git(可以跳过)
# yum 安装git版本管理
# yum install git
3 添加 package.json 和server.js
(hithub项目依赖变动不能直接安装运行)
- package.json
{
"name": "mbtile-server",
"description": "A crazy simple mbtiles server in node",
"version": "0.0.1",
"private": false,
"dependencies": {
"@mapbox/mbtiles": "^0.11.0",
"express": "^4.17.1",
},
"engines": {
"node": "0.8.x"
}
}
- server.js
var express = require("express"),
app = express(),
MBTiles = require('@mapbox/mbtiles');
if (process.argv.length < 3) {
console.log("Error! Missing TILES filename.\nUsage: node server.js TILES [PORT]");
process.exit(1);
}
var port = 3000;
if (process.argv.length === 4) {
port = parseInt(process.argv[3]);
}
var mbtilesLocation = String(process.argv[2]).replace(/\.mbtiles/,'') + '.mbtiles';
new MBTiles(mbtilesLocation, function(err, mbtiles) {
if (err) throw err;
app.get('/:z/:x/:y.*', function(req, res) {
var extension = req.param(0);
switch (extension) {
case "png": {
mbtiles.getTile(req.param('z'), req.param('x'), req.param('y'), function(err, tile, headers) {
if (err) {
res.status(404).send('Tile rendering error: ' + err + '\n');
} else {
res.header("Content-Type", "image/png")
res.send(tile);
}
});
break;
}
case "grid.json": {
mbtiles.getGrid(req.param('z'), req.param('x'), req.param('y'), function(err, grid, headers) {
if (err) {
res.status(404).send('Grid rendering error: ' + err + '\n');
} else {
res.header("Content-Type", "text/json")
res.send(grid);
}
});
break;
}
}
});
});
// actually create the server
app.listen(port);
4 安装底图服务并启动
制作mbtiles
-
安装python
默认已经安装 -
获取mbutil
#使用切图工具 tilecache等 切为googleDisk瓦片(各种底图下载工具也可以)如切片路径为google/z/x/y.png
# 获取项目源码(python)
git clone git://github.com/mapbox/mbutil.git
cd mbutil
# 获取使用帮助
./mb-util -h
# 将mbtiles 文件导出到 zxy目录:
mb-util tiles.mbtiles google
# 将zxy目录导入到 `mbtiles` 文件
mb-util gooole tiles.mbtiles
启动
# npm 安装依赖
npm i
# 启ss
# node方式 启动
# server.js +filename+ port
#node server.js tile.mbtiles 4000
# pm2方式 启动
# server.js +filename+ port
pm2 start server.js tiles.mbtiles 4000
5 开放端口
# 防火墙开放端口
firewall-cmd --zone=public --add-port=4000/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload
6 验证服务
。。。。