Centos7 安装 tileserver

1,420 阅读3分钟
安装必要依赖

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的版本,过程如下
//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

(注意:文件版本可能会出现变化)