安装必要依赖
sudo yum install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel giflib-devel xorg-x11-server-Xvfb mesa-libGLES-devel.x86_64 mesa-dri-drivers
gcc相关
centos系统需要手动升级一下gcc的版本,过程如下
Download file: ftp.gnu.org/gnu/gcc/gcc…
//required libraries:
yum install libmpc-devel mpfr-devel gmp-devel
yum install zlib-devel*
./configure --with-system-zlib --disable-multilib --enable-languages=c,c++
make -j 8
<== this may take around 70 minutes or less to finish with 8 threads (depending on your cpu speed)
make install
安装gcc完成后需要重启一下系统。
其他操作系统则升级一下系统依赖包就可以了。
nodejs
官网文档要求v6的nodejs,但是目前测试下来装不上,只在v4版本下安装成功。本文档中使用的v4.8.3
安装tileserver-gl
npm install -g tileserver-gl
如果是root用户还需要添加
--unsafe-perm
参数安装完成后可能需要手动在
/usr/local/bin
下创建软链接tileserver-gl指向tileserver-gl包路径下,src/main.js
文件。配置修改
启动需要一个config文件和地图文件。地图文件可以在openmaptiles.org/下载
options.paths.root字段为tileserver-gl-styles这个包的路径,options.paths.fonts字段为字体文件所在文件夹,options.paths.styles为style文件所在文件夹。mbtiles为地图文件所在的文件夹,最后的data字段为地图文件的信息。styles字段下为配置地图服务使用的样式,需要在指定的styles路径下有对应名称的文件夹。dark-matter-gl-style需要手动下载,其余两个为默认自带。
config.json文件内容:
{
"options": {
"paths": {
"root": "/root/.nvm/versions/node/v4.8.3/lib/node_modules/tileserver-gl/node_modules/tileserver-gl-styles",
"fonts": "fonts",
"glyphs": "{fontstack}/{range}.pbf",
"styles": "styles",
"mbtiles": "/opt/TileServer"
}
},
"styles": {
"dark-matter-gl-style": {
"style": "dark-matter-gl-style/style.json",
"tilejson": {
"bounds": [
73.3997347,
14.8082548,
134.8754563,
53.6608154
]
}
},
"klokantech-basic": {
"style": "klokantech-basic/style.json",
"tilejson": {
"bounds": [
73.3997347,
14.8082548,
134.8754563,
53.6608154
]
}
},
"osm-bright": {
"style": "osm-bright/style.json",
"tilejson": {
"bounds": [
73.3997347,
14.8082548,
134.8754563,
53.6608154
]
}
}
},
"data": {
"v3": {
"mbtiles": "china.mbtiles"
}
}
}
额外样式文件:
在options.paths.styles指定的文件夹中 git clone https://github.com/openmaptiles/dark-matter-gl-style.git然后切换到gh-pages分支就可以直接使用。程序默认使用style.json文件,所以需要为分支中style-local.json文件创建软链接。
ln –sf style-local.json style.json
字体文件:
git clonegit clone https://github.com/openmaptiles/fonts.git
然后在项目文件夹中
npm install
,然后执行node ./generate.js
,编译的pbf文件会在_output文件夹中,移动到options.paths.fonts指定的路径下即可。
或者可以删除options.paths.root指定的路径下fonts文件夹,
git clone https://github.com/openmaptiles/fonts.git
然后切换到gh-pages
分支最后修改想使用的样式下的配置文件(style.json),将所有text-font字段设置为fonts文件夹中有的字体,推荐使用Klokantech Noto Sans CJK Regular。将所有text-field字段设置为{name}\n{name_en},这样显示的地图信息会用当地语言和英语标识地名。
text-field可用的值见下表。
Name fields
There are 10 different name fields for each of the label layers:
Field | Description |
name | The name (or names) used locally for the place. |
name_ar | Arabic (if available, otherwise same as name) |
name_en | English (if available, otherwise same as name) |
name_es | Spanish (if available, otherwise same as name_en) |
name_fr | French (if available, otherwise same as name_en) |
name_de | German (if available, otherwise same as name_en) |
name_pt | Portuguese (if available, otherwise same as name_en) |
name_ru | Russian (if available, otherwise same as name) |
name_zh | Chinese* (if available, otherwise same as name) |
name_zh-Hans | Simplified Chinese* (if available, otherwise same as name) |
启动:
xvfb-run -s "-screen 0 1024x768x24 +extension GLX" tileserver-gl china.mbtiles -c ./config.json --verbose
其中
china.mbtiles
为地图文件,-c
指定所使用的配置文件可能会遇到的问题:
<1>如果自行编译安装且nvm版本不为v4.8.3(更高版本)的话,启动完成后会报错,排错日志/opt/TileServer/tileserver-gl.log中, 各种node_modules由于版本不一致无法执行
Error: The module '/root/.nvm/versions/node/v8.4.0/lib/node_modules/tileserver-gl/node_modules/canvas/build/Release/canvas.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 46. This version of Node.js requires NODE_MODULE_VERSION 57. Please try re-compiling or re-installing |
<2>即便本地环境(Centos7环境下)已安装nvmv4.8.3,可能由于没有及时的yum update可能还是会报错
错误1:“
Error: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory”
解决方法:在/usr/lib下做软连接
ln -s libcurl.so.4 libcurl-gnutls.so.4
错误2:“
Error: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/.nvm/versions/node/v4.8.3/lib/node_modules/tileserver-gl/node_modules/@mapbox/mapbox-gl-native/lib/mapbox-gl-native.node)”
当前系统glibc版本较低,由于正式环境不太方便进行yum update操作,因此需要将其他系统的高版本glibc文件考本过去,参考链接:
https://itbilu.com/linux/management/NymXRUieg.html
新问题总结:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
cd /usr/lib64
rm -rf libstdc++.so.6
cp -r /usr/local/lib64/libstdc++.so.6.0.21 ./
ln -s libstdc++.so.6.0.21 libstdc++.so.6
libcurl-gnutls.so.4: cannot open shared object file
ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4
(注意:文件版本可能会出现变化)