GIS相关vue面试

mapbox-gl-native node 编译

2018-08-17  本文已影响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 文件。

总结下:

第二个问题: 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 ,之前很火,现在不维护了。

上一篇下一篇

猜你喜欢

热点阅读