TopoJSON 1.4.0 がリリースされました。

D3 の作者、マイク・ボストック氏によるもう一つのプロジェクト、TopoJSON がアップデートされて 1.4.0 となりました TopoJSON とは地図の作成に必要なデータを効率よく格納するためのデータフォーマットです。また TopoJSON は D3 と密接に関連したプロジェクトであり、D3 で地図を作成する場合、ほぼ必須となるデータ形式です。

TopoJSON は、やはりジオメトリ(地理情報を座標を使って表したもの)のエンコードフォーマットである GeoJSON の拡張形式であり、通常、GeoJSON より大幅にデータサイズが圧縮されます。

TopoJSON について詳しくは、「TopoJSONとは」をご参照ください(訳文が原文のアップデートに追いついてなくて申し訳ないですが、基本的な考え方に変化ないと思います)。

今回の 1.4.0 の目玉は、本家 Github のリリース情報にある通り、以下の三点です。

  • トポロジー・コンストラクタを一から書き直したことにより、効率と正確さが向上!
  • --no-quantizationオプションを用いることによる可逆 TopoJSON(非量子化、非差分符号化)のサポート。
  • 多数の新しいテスト。

なお、今回のリリースの数日前に、マイク氏は “How To Infer Topology: a visual explanation of how TopoJSON works”(「トポロジーの抽出方法 - TopoJSON の仕組みのビジュアル解説」)という文書を公開しています。

こちらも余裕が無くて全文を訳すことが出来ないので、前文だけを以下に翻訳しておきます。原文も平易な英文ですし、D3 による「ビジュアル」なデモを見るだけでも参考になると思いますので、できれば続きを原文で読んでみてください。

ちなみに、ビジュアルな解説のために D3 を使うことは「セレクションの仕組み」の説明でも行われており、D3 の用途として、(1) データ視覚化、(2) 地図作成、のほかに、(3)SVGプレゼンテーションを想定していることを、作者自身が示しているものと思われます。


トポロージーの抽出方法

2013/09/02 (原文) / 2013/09/04 (翻訳)

bl.ocks.org/6406992

名前が暗示する通り、TopoJSONはトポロジカル(位相幾何学的)な地図空間データのフォーマットです。ジオメトリ(ここではジオメトリの原義「幾何学」ではなく、座標を使って表した地理情報のこと)が各シェイプをそれぞれ別の(そしてしばしば冗長な)座標配列としてエンコードするのに対し、トポロジ(これも原義「位相幾何学」ではなく、座標とアークを使って表した地理情報のこと)は、一連の座標を複数のアーク(弧)と呼ばれるラインの断片としてエンコードし、アークは各シェイプ間で共有可能になっています。たとえばカリフォルニア州とネバダ州の州境は、二つのポリゴンで共有される一つのアークになります。上図はアメリカの州境を示す様々なアークです。

トポロジを用いることによる最大のメリットは、シェイプ単純化の改善です。各シェイプを個別に単純化することによって引き起こされうる歪みを排除できるからです。また、トポロジにより地図配色選択可能なメッシュといった応用が可能となります。同時に、冗長な座標を取り除くことで、よりコンパクトなフォーマットとなるのです。

しかし、ほとんどの地理空間データフォーマットは(E00を除いて)非トポロジ形式です。そのため、通常、まず最初に、ジオメトリからトポロジを抽出することによってTopoJSON を作成する必要があります。

この記事は TopoJSON の実装について解説するものです。この記事の目的は、一つには一般的な興味に応えることにあり、もう一つには、topojson コマンドラインツールを使った変換時の問題解決の一助としていただくことにあります。TopoJSON エンコードを他の言語にも実装したいと思っている人にも、この記事は良いガイドとなるでしょう。

このアルゴリズムは次の4つのステップからなります。

  1. 抽出 - シェイプをラインとリングに分解
  2. 結合 - ジャンクション(交点)の特定
  3. 切断 - ジャンクションが端点となるよう、アークを分割・入れ替え
  4. 重複排除 - 重複したアークの整理

各ステップの実装方法については、Githubに各ステップと同じ名前のソースファイルを置いてあります。興味のある方はご覧ください。

続きは原文で!

コメントを残す


二 × = 18