美文网首页GIS相关vue面试
mapbox-gl-native node 编译

mapbox-gl-native node 编译

作者: 四爷在此 | 来源:发表于2018-08-17 19:36 被阅读191次

    最近想用node 试试基于gl 的矢量数据渲染,服务器端渲染效果如何,实际上应该类似于把mapbox-gl 用到了headless 的浏览器内核中去做渲染。当然gl-native 应该是调用的OpenGL,而我们把js 放到headless 去用webgl 渲染,性能上也许会有差异。但至少API 会简易一些。

    几个坑

    首先我用的 mapbox-gl-native-nodev3.5.4 基于node-v4.7, mapbox-gl-native 项目地址,C++写的,给安卓,IOS,node等各平台暴露了接口。看到这里,实际上这类C++ 的库,比如GDAL 也是这么操作的,有各类语言的binding.

    第一个问题: node-pre-gyp install ...|| make node

    会遇到拿不到 aws 上的资源,实际上可以拿到,只要网速好,多等一等。。因为node-gyp 安装node 的C++ 扩展模块,是需要拉取代码到本地并且用本地gcc去编译对应平台(本文是linux)的node文件。

    var mbgl = require('../../lib/node-v' + process.versions.modules + '/mbgl')

    这句话,在js 脚本层面是 require 一个文件模块,实际上是加载.so 的可执行模块,如果在windows 上应该是 .dll 文件。本文采用的是 node v4.7.3,所以会去查找lib 下node-v46 下的.node 文件。如果我们采用的是mapbox-gl-native v4.1, 那我们应该采用至少 node v6 以上版本,对应的运行时回去查找 lib/node-v48 下面的.node 文件。

    总结下:

    • mapbox-gl-native v.3.5 请用 node v 4.7
    • mapbox-gl-native v.4.1 请用 node v 6.x

    第二个问题: gcc 版本,导致glibc过低

    拿到关键的 gl-native.node binary 之后,运行时,可能会遇到gcc 版本过低的问题, 这个就找个repository,升级gcc到4.9 以上。

    sudo add-apt-repository ppa: ubuntu-toolchain-r/test
    apt-get install g++-4.9 gcc-4.9

    然后软连接替换掉 /usr/bin/ 中默认的g++ 即可,

    第三问题,运行时错误。

    由于nodejs 加载运行C++ 扩展模块,会需要一些依赖,比如直接跑该项目的 test case 可能会报错

    libEGL 错误

    针对这类问题,有的时候还不能直接装apt install libEGL,可能不叫这个名字。 经验就是

    apt search libegl

    然后会列出 源里面所有相关的包,


    apt search result

    所以我们就选第一个 runtime 版本的包安装一下就好了。图中所示是另外一个依赖包,关于OpenGL 的

    zlib 版本问题

    参考这个博客
    下载最新zlib, 从源码编译 安装即可

    最终可以服务器端随意渲染了,把渲染结果利用sharp 库写成位图文件.

    node render.js

    倾斜30度的一份pbf 矢量数据

    关键的.node 文件和 render.js 代码都放到了 github 项目

    后面可以试着做更复杂的渲染,批量,多线程等等。

    最后贴一个也可以实现后台渲染数据的gl 项目
    https://github.com/stackgl/headless-gl ,之前很火,现在不维护了。

    相关文章

      网友评论

        本文标题:mapbox-gl-native node 编译

        本文链接:https://www.haomeiwen.com/subject/wgvtiftx.html