Created by @_shimizu
誰ですか?
Geovisualization
ビジュアライゼーション(視覚化)とは、人間が直接見ることのできない現象・事象・関係性を、見ることのできるもの、画像・グラフ・図などにすること。
その中でも、位置情報や地理空間情報を含むデータを地図を用いて視覚化したものを「Geovisualization」と呼ぶ。
1850年代、イギリスの麻酔科医ジョン・スノーがそれまでの通説だったコレラ感染の原因「瘴気説」に疑問を抱き、独自の調査を行った。その際に作成されたのが下記の地図。地図にコレラ患者を記入していき、コレラの感染と飲料水との関係を明らかにした。
1861年、フランスの土木技術者 チャールズ・ジョセフ・マイナード(?)が作成したナポレオンのモスクワ遠征の視覚化。 軍の勢力がモスクワに向かうにつれ漸減する様子を地図上に帯状ラインで示し、遠征の失敗の要因となった4つの異なる変数の変化を一枚の2次元の図に表している。
統計情報の処理・伝達手段としての地図表現を開拓したフランスのジャック・ベルタンは1967年に出版された著書「図の記号学」の中で、多くのGeovisualization表現を発案している。
データビジュアライゼーションライブラリ
プロモーションビデオ
bodyタグ内にデータセットの数だけdiv要素を追加し、データセットの値をdivのwidth属性(幅)に適用する
var dataSet = [10, 20, 30]; //データセット
d3.select("body") //bodyタグを選択
.selectAll("div") //お約束*
.data(dataSet) //データを束縛
.enter() //データを基にした操作を開始する
.append("div") //div要素を追加
.attr("width", d => d ); //値を適用
先ほどのサンプルコードを実行した後のHTML
<body>
<div width="10"></div>
<div width="20"></div>
<div width="30"></div>
</body>
Mike Bostock
地理情報視覚化機能
D3は様々な投影法に対応
参考
Map Projection TransitionsD3を使って地図を表示するまでの流れ
参考
外部のJSONデータを読み込む
d3.json('hoge.geojson').then(geojson => {
console.log(geojson) //読み込んだデータの出力
});
投影法やサイズ、中心位置などを設定する
const projection = d3.geoMercator() //メルカトル図法を指定
.scale(3000) //地図のサイズ
.rotate([0,0,0]) //地図の回転 [x軸, y軸, z軸]
.center([0.0, 0.0]) //中心位置[lng, lat]
GeoJSONをSVGパスストリングに変換する関数
const path = d3.geoPath()
.projection(projection); //projection関数を渡す
path(geojson); //svg pathのパスストリングに変換
GeoJSONを読み込んで、SVGのPath要素として表示する
d3.json("japan.geojson").then(geojson => {
//投影法指定
var projection = d3.geoMercator() //投影法の指定
.scale(1500) //スケール(ズーム)の指定
.translate([300,350])
.center([139.0032936, 36.3219088]); //中心の座標を指定
//パスジェネレータ作成
var path = d3.ggeoPath().projection(projection);
//地図描画
var map = d3.select("svg")
.selectAll("path")
.data(geojson.features)
.enter()
.append("path")
.attr("fill", "green")
.attr("stroke", "black")
.attr("d", d => path(d))
});
作ってみた物
GeoJSONで読み込んだ世界地図(面)データを描画
地球儀として描画。元データは地形描画1と同じもの
各市区町村の隣接数で塗り分けを行った例
おまけ
D3の作者マイクボストック氏のサイト
D3コミッターの中でも地理情報可視化に関する中心人物