ちずのつくりかた / map school


> この記事は[map schoolの翻訳](http://macwright.org/mapschool/)です。
> この記事の内容は少々古く、日本語版を含む最新の内容は [map school本家](http://www.macwright.org/mapschool/index.ja.html)にて公開されています。

地図とはそもそも、なんでしょうか？ 一言に地図と言っても、様々な種類があります。車や自転車を運転している時の案内も地図ですし、デザインされた地図もありますし、係争地になっている国境線をあらわす地図もあるでしょう。ここでは、地図を制作する側の視点から、地図が地図として成り立つための必要な要素について深く考えてみましょう。

まず基本的なこととして、地図はデータから作られています。このデータとは、数多くのポイントであったり、面積をあらわすポリゴンの集合体であったり、あるいは色調や気温を画像のような形式であらわしたものであったりします。大切なのは、一概にデータと呼称する場合、そこには複数の意味合いが含まれている、ということです。

私たちはさまざまなデータを元にして数字や画像を作り出し、そして方針の判断を定めます。そうした活動では、'シンボル化'という画像作成工程がしばしば行われます。'シンボル化'とは、対象となるデータセットに含まれている情報を分析して取捨選択し、それぞれの情報をどのように表現するかを定める作業です。そしてデータを分析するということは、データを改変し、集約し、要約を作り出すことによって、そこから得られる多くの知見や、導き出される多様な意見を明らかにすることでもあります。データの分析とシンボル化という2つの課題は、往々にして密接に関わっています。データのシンボル化はデータのどの部分を表現可能とするかを定める作業ですし、データの分析はその中でどの要素や部分に対してフォーカスするべきかを定める作業です。

# データ

地理データは **ラスタ** と **ベクタ** のどちらかの方法で表現されます。ラスタはデータがピクセルとして格納され、ベクタではジオメトリとして格納されます。実際にデータを利用する際には、この2つの形式を併用して利用することが一般的です。例えばラスタ形式で提供される衛星画像の上に、ベクタデータとして道路データを重ねて表示する方法は一般的に行われています。

## ラスタ

![raster.png](https://qiita-image-store.s3.amazonaws.com/0/9928/cd8f4c02-584c-02e9-f0ca-2b3e4460e27d.png "raster.png")


**ラスタ**データは、デジタルカメラで撮影した写真のような画像による形式を指します。このデータ形式では拡大を行うたびに、情報がピクセル単位に分割されます。ラスタデータに対して'ズームイン'してゆくと、どこかの段階でこの形式はデータがピクセル、つまり画素単位として表現されていることがわかります。

ラスタデータは、例えば衛星写真から取得された地表データなどを画像として表現する際に利用されています。この際、それぞれのピクセルが必ずしもなにかしらの色だけをあらわしているわけではありません。例えば、それぞれのピクセルはその対応する場所の標高を数値データとして持っていたり、ラスタデータ全体が特定の標高データを持っている場合もあります。また、それぞれのピクセルが保持してるデータは、例えば気温のデータなど、なにかその場所の環境をあらわす内容である場合もあります。

##### ラスタ・バンド

ラスタデータに含まれるピクセルは、必ずしも色と対応しているわけではありません。通常、そこに含まれる情報は'バンド'と呼ばれます。一般的な画像ファイルで使われるのは、赤緑青の三原色です。私たちがよく見かける写真は、この三原色の組み合わせによって成り立っています。また、ラスタの種類によって、使われるバンドの数はさまざまです。例えば標高データではバンドの数が少なくなりますし、赤外線や紫外線といった可視光以外のバンドを利用するラスタもあります。ラスタデータを分析し、表示する際には、そのラスタからどのような内容を引き出したいのかによって、利用するバンドの組み合わせを考える必要があります。

##### ラスタ形式

ラスタ形式とはそもそも、データをコンパクトにまとめ、分析と表示を素早く実行することを目的としたフォーマットです。[GeoTIFF](http://trac.osgeo.org/geotiff/) や JPEG2000など、一般的に使われる画像形式に対して位置情報が付与されている場合もあります。

内部的に、ラスタデータ形式は2つのタスクを管理します。ひとつは、データをピクセル化すること。もうひとつは、ピクセルがカバーする地球上の位置とデータの'範囲'を紐付けることです。

## ベクタ

![vector_types.png](https://qiita-image-store.s3.amazonaws.com/0/9928/07711d60-3efc-0cc2-7e9c-9c7dc5419f44.png "vector_types.png")


**ベクタ**データはピクセルよりもさらに基礎的なジオメトリ(位置情報)をあらわします。ベクタデータをどこまで'ズームイン'しても、ピクセルはでてきません。データはジオメトリとしてあらわされるポイントやラインから構成されており、必要な場合にのみ画像に変換されます。

ベクタデータは道路や建物、情報を持ったポイント (point of interest, POI) など、世界における特定の場所を表現するために利用されています。

##### ベクタ形式

ベクタフォーマットでもっとも広く使われているのは [Shapefile](http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)形式です。Shapefileはシンプルなファイル形式のフォーマットであり、地理データが `.shp`・ `.prj`・ `.shx`・`.dbf`という4つのファイルに分割して格納されています。Shapefileはバイナリデータであり、テキストエディタで内部のデータを確認することができません。

[GeoJSON](http://geojson.org/)と[TopoJSON](https://github.com/mbostock/topojson)、および [KML](http://developers.google.com/kml) は比較的新しいフォーマットであり、それぞれ[JSON](http://www.json.org/) や [XML](http://en.wikipedia.org/wiki/XML)といったテキスト用のフォーマットをもとに作られています。テキスト形式であることによって、これらの形式のデータを扱うソフトウェアは、Shapefileを取り扱うよりも簡易に実装が可能です。さらにこれらの形式は機能追加や改良の柔軟性にも優れているため、最近のウェブソフトウェア実装では標準の地位を確立しつつあります。

### トポロジ

ベクタデータによっては、単にデータの位置と形状を保存するだけでなく、隣接する複数の形状の関連性といったトポロジ情報が含まれることがあります。例えばこの例として、行政区の境界がよくあげられます。片方の足をアリゾナ州に、もう片方の足をニューメキシコ州に置いて立っている、と考えてみてください。多くの地理データでは、アリゾナ州をあらわす形状がひとつ作成され、もうひとつ別の形状としてニューメキシコ州が作成されます。2つの州の境界線は正確に重複しますが、2つの州の地理データの間にデータとしての関連性はありません。

この状態で、例えば 'どちらの州に触れているか？' という判定を行ったり、境界線の線の形を保ったままオブジェクトの形状を単純化する処理を行うことを考えてみてください。私たちはそのようなとき、トポロジ、という考え方を用います。この場合、ベクタデータの中にはアリゾナ州やニューメキシコ州の形状を保存するのではなく、どのラインがどのオブジェクトの境界線を形成しているかを関連付けます。そのため、2つの州の境界線は1本のラインとして表現可能であり、その状態で2つの州を同時にあらわすことが可能です。また、もし境界線のラインが1本の場合は、そのラインを修正することで2つの州の内容を同時に編集することが可能となります。

## ジオコーディング

ここまでに挙げた事例以外でも、地理データには有用な使い方があります。そのなかのひとつでは、コンピュータだけが解析可能な数字の羅列ではなく、地理データをテキストとして保存することによって、特定地点の場所やストリートの名前、住所などへのリファレンスとして利用します。

不幸なことに、そこで得られる結果を直接地図にあらわすことはできません。例えば、場所の名称のつけかたに相違があったり、1つの地点に対する複数の定義などがあったりするため、例えば `United States`という単語を '120, 40'というポイント情報として変換するなど、得られる結果が直接的ではなく、誤った結果が返されることもよくあります。この処理は **ジオコーディング**と呼ばれます。

この処理プロセスを逆に実行したものは **リバースジオコーディング**と呼ばれ、あらかじめ地理的な位置が明確に定まっていることを前提として、例えば`United States`や`1714 14th Street`など、人間にとって可読性がある形式で対象の検索や変換を行います。ジオコーディングと同様、検索結果が常に正しいとは限りません。1つの地球上に存在する1つのポイントを示す場合、境界線の範囲が矛盾や重複を起こしていたり、その地点が複数の住所ポイントに関与していたりする場合が存在します。

ジオコーディングやリバースジオコーディングはとてもトリッキーです。緯度経度の誤りや、構造の整っていない住所データ、そして更新されない道路や建物データなど、住所表記と緯度経度を正しく相互に変換するのは困難を極めます。

## データの収集

地図データは長い時間をかけて、船の航海日誌から、ジオコーディングされたTweetまで、数えきれないほど多くの方法を使って収集されてきました。現在ではメジャーな情報源として、メリットの多い方法がいくつか採用されています。

**GPS**は複数の人工衛星から構成されるシステムです。携帯電話の地図上の青い丸印の表示は、このシステムを利用しています。GPSは正確なベクタデータを作成するための基盤を支えています。地図の調査員は高性能なGPS機器を車に搭載しておき、収集したログデータを他のデータと組み合わせて利用します。

観測用の **衛星・航空写真** からは、現在私たちが利用している様々なラスタデータが生成されます。様々な高度から撮影された写真を結合させることで、地表の写真が完成します。同じ仕組みを利用し、赤外線など'可視光以外のスペクトラム'を感知できるセンサーで撮影された写真は農業に関する情報のマッピングにとても有用となります。[LiDAR](http://en.wikipedia.org/wiki/Lidar)などのレーザーセンサーを追加することで、ラスタに標高データを追加することも可能です。

**企業、行政、コミュニティ**はそれぞれ異なった視点の地図を所有しています。例えばGoogleや[OpenStreetMap](http://www.openstreetmap.org/)は、世界中の道路やその関連情報をすべてマッピングすることにフォーカスしていますし、[CIA World Factbook](https://www.cia.gov/library/publications/the-world-factbook/) や [Natural Earth](http://www.naturalearthdata.com/)などの組織は行政や国家の境界線についての情報を発信しています。

### 情報の保存

地理データを格納・保存しておく方法はひとつではありません。例えば印刷物もデータ保存方法のひとつではありますが、現在ではデジタルで保存しておいて、閲覧や共有を行う方法が一般的です。

地理データをデジタルで保存する際のファイル形式や保存方法は様々で、利用するツールやデータの変換方法も多岐にわたります。データの保存方法は大きく分けて、データベースへ格納する方法と、独立したファイルに格納する方法があります。ただし、どちらの方法でも実際の用法について根本的な違いはありません。

# 追加情報

グラフィックの観点から見た地図

## 測地系

測地系とはすなわち、その場所が地球上でどの位置にあたるのか、ということをあらわす方法のひとつです。かつて、センチメートル単位で都市全体を計測するなど、測量士が一定の地域を調査する際にはとても高いレベルの正確さが要求されてきました。またさらに、単純に緯度や経度で場所を表すのではなく、"この地点から南北方向に数メートル"という記録方法も利用してきました。

ただし、地図作成をするだけであれば、測地系の内部的な仕組みについてこれ以上詳細な知識は必要になりません。なぜならば、そうした処理はほとんどがソフトウェア上で完結し、地理空間情報用のフォーマットでは大抵の場合、処理が自動的に行われるためです。世界的に標準として利用されるWGS84は一般的な利用目的の多くをカバーしており、データ格納の際に推奨される測地系とされています。

ただし、測地系の変換方法について詳しく知っている必要性があまり多くないとはいえ、様々な提供元から配布される地理データを扱う際には、どのデータがどの測地系に属しているか確認することは とても 重要になります。様々な測地系で作成された地図に掲載されたデータを扱う場合、特に0-200m程度の差分がわかるくらいまで拡大された大縮尺の領域では、致命的な結果をもたらすことがあります。

## 緯度と経度

特定地点の位置情報を格納するにあたって、緯度と経度による方法はもっとも広く利用されています。伝統的に、緯度と経度は`38° 32`のような60進法による度分秒表記で表記されています。しかし近年ではコンピュータによる可読性を高めて、`38.2`のように単純な数値情報として表記する方法が新しい標準となっています。

![latlon.png](https://qiita-image-store.s3.amazonaws.com/0/9928/4b649bcc-65e0-a235-ba14-a2f08ff2a4d4.png "latlon.png")

**緯度** は南北方向を示しています。南極点である -90 から、北極点である 90 までの値をとります。赤道上の緯度は常に0となります。

**経度** は東西方向を示しています。グリニッジやアフリカ大陸を通過する`本初子午線`を 0 としてスタートし、地球の反対側の子午線までを -180 から 180 までの値であらわします。

緯度と経度の組み合わせは一般的に座標 (coordinate) と呼ばれ、`緯度, 経度`あるいは `経度, 緯度`のように表記されます。前者のほうが標準的に利用されてきましたが、数学のユークリッド空間での座標表記方法である `X, Y`の順番を反映して`経度, 緯度`という表記も近年では一般的になりつつあります。

現在、緯度と経度のどちらを先に表記するか、若干の混乱が生じています。ウェブブラウザ上で行われる地図表記ではほとんどの場合`緯度, 経度`の順番で表記され、多くのワイヤフォーマットでは`経度, 緯度`の順番で指定が行われています。

状況によっては、単に緯度と経度だけを記録するだけではなく、高度・標高や記録が行われた日時など、その他の情報もデータに含まれる場合があります。高度情報がデータに含まれる場合、`緯度, 経度, 高度`のように座標の3番目の項目として表記が行われるのが一般的です。

## 投影法

投影法は、もともと球体である地球を印刷物やスクリーン上に平面図としてあらわす際、それら2つを数学的に同一化する処理のことを指します。このような変換を行うのは非常に手のかかるタスクです。球体であるはずの地球を平面として表現する際には、なにかしらの手法で歪みを発生させる以外にありません。どの情報を歪めるかは投影手法によりけりですが、地図上の向きや相対的な表示の大きさを変更する、あるいは特殊な表現方法を採用するなどの方法があります。

## シンボル化

地図の世界では、なにかしらの方法でデータを図としてあらわす方法をまとめて、シンボル化、という一風変わった呼び方で表現します。

根本的に言えば、データ自体にはどのような見た目もありません。地図上で表わされるデータは単なるピクセルの値ですし、道路を意味する線の情報もスプレッドシートやグラフで表現されるものでしかありません。そのため、データを使って私たちが行うことを正しく説明するにあたって、`変換`という言葉は正しくありません。最も基礎的な段階において、この方法は作成者によるなんらかの判断の結果を意味しています。

シンボル化の技術は、画像やあるいは3Dによる表現方法を含んでおり、注視しているひとはそれほど多くありません。

## 連続値と絶対値

シンボル化を行う過程では、連続値と絶対値という、データがもつ2つの側面が浮かび上がります。連続値、あるいは連続したデータは linear とも呼ばれます。例えば卒業者の率が 0から100 の値をとるように、値はしばしば特定の範囲の数字であらわされます。逆に絶対値、あるいは個別値のデータは、例えば`true`、`false`、`民主制`、`共和制`など、特定の内容の値ひとつをとります。

この観点でデータの形式を区分することは、シンボル化を行うにあたってとても重要です。連続値のデータは規模や程度をあらわす地図に利用できますし、絶対値のデータはそれぞれのデータをマーカーなどを使って表現することに向いています。

### コロプレス・統計区分

統計区分を利用した地図は、既存の境界線などの形状を利用し、色やテクスチャ、模様などを使ってそれぞれの領域のデータ内容をあらわす手法です。この地図表現は、選挙結果や人口統計をあらわすのに向いており、利用されるデータは、例えば特定地域における投票率をパーセンテージで表記した形式などが利用されます。

統計区分マップは、割合や密集度、パーセンテージといった内容のデータに対して高い親和性をもちます。この表現形式は、データの内容が絶対値の場合にはあまりお勧めできません。なぜならばこの表現形式では、表現対象となるエリアが変更されるわけではなく、大きな地物を強く表現しすぎる傾向があるためです。また、統計区分マップは色調の違いで情報の内容を表現するため、利用する色合いは、わかりやすく一貫性を持ち、さらに色盲の利用者にとっても使いやすいものが選ばれる必要があります。

##### 統計区分と色調

統計区分マップで使われる色合いは通常 `パレット`、あるいは、色合いが連続している場合は`カラーランプ`などと呼ばれます。[ColorBrewer](http://colorbrewer2.org/)では、わかりやすく明瞭な色調の例が公開されています。

### Point ポイントデータ

ポイントデータをもとにした地図は、データの値が絶対値の場合によく利用される方法です。この場合、1つの地物データに対して、1つのジオメトリが割り振られています。

この様式で利用される特定の点情報、あるいはマーカーの内容は千差万別です。データの種別や値の大小によって異なる色を使って表現されたり、あるいはデータが保持している値によって表現の大きさ自体を変えたりすることもあります。こうしたシンボルは、特定の形状や画像をつかって表現されます。円や四角形をはじめ、その対象を撮影した写真などが利用されることもあります。利用されるデータに複数の値が含まれている場合は、その合計が円グラフであらわされることもあり、データの内容が特に複雑な場合はそうした表現がとても有効に機能します。

この表現方式を行う場合、一度にあまりに多くのポイントが表示されすぎないように気をつける必要があります。あまりに多くのものが表示されると、かえって地図から情報を読み解くことが難しくなるからです。それでも多くの情報を表示する必要がある場合は、それぞれのポイントがもっている値を集計し、統計区分のように表示する方法もあります。また、別の方法として、複数のポイントを1つのポイントとして表示させ、特定のレベルまでズームインした場合のみそれぞれのポイントを表示させる、という方法もあります。


## データの公開

## データの分析

ラスタとベクタ分析におけるデータの集合と変形

### ベクタからラスタへの変換

ラスタとベクタは本質的に異なる地図データ形式です。ただし、2つの形式をお互いに変換することは可能ですし、変換自体はそれが直接的かどうかは別としてよく行われています。

一般的に、ベクタデータはラスタに変換可能です。そうしたデータを表示する際にとられる手法は、`ラスタライズ`あるいは`レンダリング`と呼ばれています。印刷物やコンピュータの画面では、ラインやシェイプ単位ではなく、ピクセル単位での処理が行われます。そして、変換を行う際にはすべての機能がそのまま維持されるわけではありません。例えば、ベクタデータはピクセル単位の形式ではないことを思い出してください。ラスタに変換してしまうことで、ズームインしてゆく過程において、ある一定以上のズームインができなくなります。さらに、たいていの場合、いったんベクタ形式からラスタ形式に変換を行うと、同じデータをラスタ形式から全く同じベクタ形式に戻すことはできなくなります。

ベクタ形式からラスタ形式への変換は比較的短時間で完了します。この変換ではピクセルから計算を行うよりも簡単な、いくつかの分析処理を実行すればよいだけだからです。

### ラスタからベクタへの変換

同様に、ラスタデータをベクタデータ化することも可能です。ラスタ形式の衛星画像を使って、道路のラインや家屋のポイント、建物の外形ポリゴンなどの図形を描いたり、`トレース`したりします。こうしてデータをベクタ形式にすることで、より多くの情報を扱うことができるようになります。例えば、道路をあらわすベクタデータを使った経路探索などもできるようになります。衛星画像に映された道路の画像そのままでは、こうした計算はできません。

### シミュレーション

地理データを使うことによって、ある特定の自然現象をシミュレーションすることができるようになります。また、このシミュレーションは地図作成者が行う作業の大部分を占めています。例えば、山麓の範囲に対して標高のデータが与えられていれば、山麓の日照や陰影を算出し、陰影図、と呼ばれるシミュレーションを行うことが可能になります。

データの量と質次第では、より複雑な工程も可能です。例えば、降雨があった後に水が流れる領域を測る`分水嶺`のシミュレーションや、山麓の頂上に立った時に周辺に見えるものをあらわす`可視域`のシミュレーションなどがあります。

### データの集約

データ集約のもっとも基本的な形は、足し算です。複数の数字を対象とし、それらを一度にまとめて利用することが可能です。例えば国家のGDPという数値は、単純にそれぞれの経済活動の結果を一覧化した情報よりも手軽に利用が可能でしょう。

地図における集約も同様です。各家庭の収入データが大量に存在するなど、個々のデータが複数ある場合に、特定地域ごとに対象を区切って、値の合計や平均を求めることができます。こうすることで、例えば特定の市町村ごとの収入平均を地図上に可視化することが可能になります。

集約の考え方は、**ビニング (binning)**と呼ばれる技術手法でも使われます。複数のポイントが個別に点在する状況で、地図の上に四角形や六角形の領域を区切ります。区切られた領域の中にすべてのポイントが収まるようにします。このような処理を行うことで、大量に存在する小さなポイント情報を個別に扱うのではなく、統計区分のような形式で地図のスタイルを変更することが可能になります。

### 補間

大量のデータを集め、抽出することによって分析や可視化を簡素化するという集約の考え方と違い、補間の処理では値の`空白を埋める`ことを行います。補間作業は標高データなどのデータセットでよく使われる手法です。例えば、山麓地域で、数センチ単位の高さデータをもったピクセル状のラスタデータがあり、なおかつ、そのなかのいくつかの場所でデータが欠落している(プログラマ用語で、値が`null`になっている)とします。

補間処理を行う場合、`空白`ピクセルの周囲にあるピクセルの値を確認し、空白になっている値が基本的に周辺の値と似通った値である、と仮定します。山麓の頂上付近のピクセルが欠落している場合、その地点の標高はそれなりに高いはずですし、逆に、渓谷になっている部分の標高の値は低くなっているはずです。

補間処理はベクタデータ形式に対しても行われます。ボロノイ図の生成アルゴリズムを使い、複数のポイント情報を元データとして、それらをつないだポリゴンにする処理などがあげられます。

## 追記予定

The unity of data / データの統合

Edges blending into math and art / 数学と芸術の融合

### ライセンス

[Creative Commons Attribution 3.0 Unported](http://creativecommons.org/licenses/by/3.0/deed.en_US)
(翻訳時のライセンスはCC BY。最新版ではCC0に変更されています)

#### [エラッタ送付-英語](https://tmcw.wufoo.com/forms/mapschool-feedback/), [日本語翻訳の指摘](nyampire@gmail.com)