nodejsソースからmapbox-gl-nativeをコンパイルします.

2408 ワード

mapbox-gl-nativeは、mapboxバックエンドレンダリングエンジンであり、mapbox-gl-jsと同じ仕様を使用して、Android、IOS、MacOS、Linuxなどの各種プラットフォームで使用できます.ここではLinuxの下でソースコンパイルされたnodejsバージョンを主に検討します.
システムの要求:
  • 64ビットLinuxまたはMacOS
  • C+14
  • nodejs v 4.x(公式文書によるとnode v 5+に問題があるという)
  • コンパイルプロセス
  • 依存パッケージ
    $ npm install
  • をインストールします.
  • コンパイルが完了したら、libフォルダでnodeファイル「mbgl-node.abi-426 node」を生成します.nodejs環境でmapbox-gl-nativeを使用するなら、inportはこのファイルでいいです. 
    $ make node
     
  • 使い方 
    var mbgl = require('../platform/node/index.js');
    var sharp = require('sharp');
    var request = require('request');
    
    var options = {
      request: function(req, callback) {
        request({
          url: req.url,
          encoding: null,
          gzip: true
        }, function(err, res, body) {
          if (err) callback(err)
          callback(null, {data: body})
        });
      },
      ratio: 1
    };
    
    var map = new mbgl.Map(options);
    
    map.load(require('./style.json'));
    
    map.render({
      center: [119.58398,29.828955],
      zoom: 10,
      width: 1024,
      height: 1024
    }, function(err, buffer) {
      if (err) throw err;
    
      map.release();
    
      var image = sharp(buffer, {
        raw: {
          width: 1024,
          height: 1024,
          channels: 4
        }
      });
    
      // Convert raw image buffer to PNG
      image.toFile('./image.png', function(err) {
        if (err) throw err;
      });
    });
     ここでmbglが引用するのはPlayformフォルダの中のjsファイルで、playtformフォルダは各種プラットフォーム参照の入口であり、playform/nodeの中のindex.jsファイルを開くことができます.先ほどコンパイルして作成したnodeファイルはindex.jsで引用されたことが分かりました.
    var mbgl = require('../../lib/mbgl-node.abi-' + process.versions.modules);
     テストを実行
    上に貼った例は、コンパイルされたばかりのnode-mapbox-gl-nativeを用いて地図スタイルをレンダリングし、指定された中心点とレベルで1024*1024の画像を作成して、現在のフォルダに保存することです.nodeで以上のコードを実行すれば結果が得られます.
    $ node ./test.js
    出会う穴
     1、mapbox-gl-nativeを実行するにはグラフィックデスクトップ環境が必要で、グラフィックデスクトップ環境(例えばuuntu serve)ではないと実行会エラーが発生します.
    terminate caled after throwingg an instance of'std:runtime_error  what(): Failed to open X display.Aborted(core dumped)
     
    解決方法はxvfbをインストールし、xvfbを使用して上記のコマンドを実行します.
    $ sudo apt-get install xvfb
    $ xvfb-run -a -s '-screen 0 800x600x24' node ./test.js
    2、ソースコードのコンパイルの過程で問題が発生し、コンパイルの失敗を招いた:
     fatal error:X 11/Xlib.h:No such file or directory
    解決方法:libx 11-devのインストール
    $ sudo apt-get install libx11-dev