概要
MapSCII は、 Node.jsベース のターミナル用地図表示ツール。 ASCII/Braille で世界地図を表示し、 マウスやキーボード で直感的に操作可能。 カスタマイズ性 が高く、 オフライン動作 や独自タイルサーバー接続も対応。 Linux/OSX の多くのターミナルで動作し、 完全JavaScript製。 インストール・実行方法 や 操作方法 もシンプル。
MapSCIIとは
- Node.js ベースの ベクタタイル→ASCII/Braille レンダラー
- xterm互換ターミナル で世界地図表示
- オンライン/オフライン 両対応
- 100%純粋JavaScript 実装
主な特徴
- マウス操作 による地図のドラッグ・ズーム
- 任意地点周辺の Point-of-Interest(POI) 表示
- Mapbox Styles によるレイヤースタイルのカスタマイズ
- 任意のベクタタイルサーバー への接続
- OSM2VectorTiles ベースの最適化済みタイルも利用可能
- ローカルVectorTile/MBTiles 対応でオフライン利用
- Linux/OSXターミナル との高い互換性
- 滑らかな操作感 を実現する最適化アルゴリズム
すぐに試す方法
- ターミナルで
telnet mapscii.me実行 - Windows 利用者は PuTTY 等のtelnetクライアントを利用
ローカルでの起動方法
- Node.js 最新版が必要
- npxで一発起動:
npx mapscii
ローカルインストール方法
- npm 利用時
- Node.js v10以上を用意
npm install -g mapscii- OSXや権限エラー時は
sudo npm install -g mapscii
- snap 利用時(Linuxのみ)
sudo snap install mapscii- snapパッケージは@nathanhainesがメンテナンス
実行方法
- インストール後、コマンドラインで
mapscii実行
操作方法
- キーボードショートカット
- 矢印キー:スクロール移動
- a/z:ズームイン・アウト
- c:ブロック文字モード切替
- q:終了
- マウス操作
- 対応ターミナルならドラッグで移動、ホイールでズーム
背景技術・利用ライブラリ
- コンソール制御
- x256:RGB→xterm-256色変換
- term-mouse:マウスイベント処理
- keypress:入力処理
- string-width:文字列幅計算
- 地図データ処理
- vector-tile:VectorTileパース
- pbf:Protobufデコード
- mbtiles:MBTilesパース
- ベクトル・数値処理
- earcut:ポリゴン三角形分割
- rbush:2D空間インデックス
- bresenham:線分点計算
- simplify-js:ポリライン簡略化
- データフロー管理
- node-fetch:HTTPリクエスト
- env-paths:タイル保存先パス管理
今後の課題(TODO)
- GeoJSON 対応(geojson-vt経由)
- CLI起動パラメータ 対応
- タイルソース・スタイル・中心座標・ズーム・デモモード等
- マウス操作の拡張
- POI/ラベル・ポリゴン等へのホバー対応
- スタイラー
- ズームレベルごとのスタイル対応
- レンダラー
- 別スレッドでのタイル処理
- 広域描画時の最適化
- 複数行ラベル描画
- タイルソース
- 単一VectorTile対応
特別謝辞
- lukasmartinelli & manuelroth (OSM2VectorTiles開発)
- mourner (earcut, rbush, simplify-js等のGISアルゴリズム開発)
ライセンス・著作権
- 地図データ
- OpenStreetMap:Open Database License(ODbL)準拠
- クレジット必須、改変後も同ライセンスで配布
- 地図タイル・ドキュメント:CC BY-SA 2.0
- MapSCII本体
- 詳細はリポジトリ内ライセンスファイル参照