Mable API について語る

PEmugi
Mable Blog
Published in
4 min readJun 17, 2017

Mable のハイパー グレート バックエンド GIS エンジニアの PEmugi です。
今日は Mable API をご紹介しようと思います。

Mable API って何?

Mable はレーザー カッターで道路線をテーブルやコースターに焼き付けて作ります。

レーザー カッターは入力としてベクターデータを必要とするので、道路線のデータ元である OpenStreetMap から必要な範囲のデータを切り出して一般的なベクターデータフォーマットに変換・出力する必要があるのです。

当初は、Overpass API などをつかって手作業で切り出していたのですが、パフォーマンスの問題や切り出す作業に手間がかかり、「自前で作るか!」となり生まれたのが Mable API です。
つまり「OpenStreetMap から指定範囲の道路を SVG で出力する」というのが最初の機能だったのです。

しかし、このブログでもご紹介した Mable Preview 開発のために画像で出力したり、背景画像を付けたりなどなどの機能が加わり今では以下のようなことができる API になってます。

  • 出力形式: SVG, PNG, GeoJSON
  • 背景画像の設定 (インターネット上の画像を利用可能)
  • クレジット表記の追加 (OSM 使ってるよって表記!)
  • マスク画像でのくりぬき (インターネット上の画像を利用可能)
  • ラインのポリゴン化
Mable API の出力例

どこでどうやって動いているの?

どこで?

GMO さんの ConoHa というクラウドで運用しています。

ConoHa の利点としては、ディスクが SSD で低スペックのインスタンスでもそこそこのパフォーマンスを確保できるところ、そして基本的にネットワーク トラフィックなどで従量課金が無いのでコストが見積もりやすいことが挙げられます。
要は低予算でそこそこのパフォーマンスが出せるっていう理由ですね。毎月約 2000 円くらいですw これで全世界の道路を出力できる API が運用できちゃってるんです。

どうやって?

OpenStreetMap の全世界のラインデータを格納した Database Serverと、Database Server から送られたデータを画像やデータにレンダリングして配信する Application Server の 2 台構成です。

図を見ながら各コンポーネントの役割を少し解説しますね。

Mable API の構成
  • DB Server: PostgreSQL + PostGIS
    全球のラインデータを PostGIS で空間データを扱えるように拡張した PostgreSQL に格納しています。
    ラインのポリゴン化の機能は PostGIS の機能を使って RDBMS 内でポリゴンを計算して実現しています。
  • App Server: GeoServer
    Java で実装された OSS な GIS データの配信・共有を行うサーバーソフトウェアです。WMS / WFS などの GIS データにアクセスするためのプロトコルでクライアントからのリクエストに応じて指定範囲のデータをレンダリング (SVG, PNG, JPEG) したりベクターデータ (GeoJSON) として配信します。Mable API はかなりの部分をこの GeoServer に助けてもらってます。
  • App Server: Tornado
    Tornado は Python の Web Framework & 非同期ネットワークライブラリです。Tornado をベースに Web Application を構築しその中で GeoServer への処理の移譲や GeoServer からの出力画像に背景を付けたり、マスク画像でクリップしたりといったような画像処理をやってます。
    App Server は 2 コア しかないので、Tornado のように シングルスレッドで動作しつつも non-blocking i/o を活用し多くのリクエストをさばけるのは大変うれしい。適切に実装すれば GeoServer で時間のかかるリクエストを待つ間も他のリクエストを受け処理することができます。
  • App Server: Nginx
    Nginx はリバースプロキシおよびコンテンツキャッシュとして採用しています。

こんな感じです。

今後もいろんな機能を実装しつつ Mable Project から生まれるかわいいプロダクトたちを支えていきたいと思います。

--

--

PEmugi
Mable Blog

Shimpei Matsuura / GIS Software Engineer / NPO法人オープンコンシェルジュ 社員/ OSGeo.JP / 地理空間情報なエンジニア