Question

TopoJSON を利用した地図上での可視化分析 (500m メッシュ)

  • 8 October 2020
  • 2 replies
  • 811 views

Userlevel 2

Lookerで地図上にデータを可視化する方法として、一番手軽なのは、topoJSONファイルを用意して可視化をする方法になります。ただし、topoJSON形式で表示する地図データは粒度が細かくなるほど、ファイルサイズが大きくなってしまうため、市区町村単位や、250m、500mメッシュという細かい粒度で表現するには向いていません。上記の場合は、タイルを利用した大規模カスタム・マップ・レイヤー を参照ください。


とはいえ、一部の地域に限定する形でも構わないので、タイルを利用せずにメッシュ表示を行うための方法をご紹介します。(なお、当記事で記載しているリンク先は執筆現在の情報ですので、変更があった場合は、コメントなどで教えていただけますと幸いです。また、LookMLの書き方以外の部分については、弊社サポートチームではご対応致しかねますので、本記事に関してのご質問はコメントにてお願いいたします)


今回は、東京都の中央区・千代田区・港区・新宿区の事業所数を500mメッシュで表示してみようと思います。実現するためには、以下の手順が必要となります。



  1. 境界線データの準備

  2. データ表示用のサンプルデータの準備

  3. LookMLの作成


なお、今回は、メッシュコードを利用して表示しています。メッシュコード については、e-Statのホームページに定義が記載されています

1. 境界線データの準備


まずは、地図上に表示する際に必要となる境界線データは、こちらの e-Statのホームページから境界線データを取得します。
今回は500mメッシュでの表示を行いますので、4次メッシュから世界測地系緯度経度・Shapefileを選択します。ファイルが1次メッシュ単位で区切られているのですが、東京都が含まれているのは、M5339となります。
このままでは、Lookerで取り扱えないのでファイルを変換する必要があるのですが、そのまま変換してしまうとファイルサイズが大きくなってしまうので分割を行います。
分割を行うために、

  1. 先ほどダウンロードしたZIPファイルを解凍する

  2. 含まれているdbf, prj, shp, shxをドラッグ&ドロップしてmapshaperというサイトでインポートします。

  3. 画面でExplortをクリックし、geoJSON形式してダウンロードします



次に、ダウンロードしたファイルを分割するのですが、今回はnpmパッケージであるgeojsplitというツールを利用して分割を行います。(nodeがインストールされている前提となります)


以下のコマンドを実行して、geojsplitをインストールします


$ npm -g install geojsplit

次にgeoJsonファイルには、メッシュコード が記載されているのですが、2次メッシュ(MESH2_ID)をキーにファイルを分割します。-oパラメータで出力先フォルダを指定、-kパラメータで分割するキーワードを指定しています。


$ ./node_modules/geojsplit/bin/geojsplit -k MESH2_ID -o jsons path/to/geoJSON

jsonsフォルダ配下に分割されたファイルが格納されています。

こちらの統計局ホームページに、各都道府県の市区町村単位でのメッシュコード の一覧が配布されていますが、今回の対象となる区は2次メッシュコード が35, 36, 45, 46になるため、以下のファイルが対象となります。



  • 35_xaaaa.geojson

  • 36_xaaaa.geojson

  • 45_xaaaa.geojson

  • 46_xaaaa.geojson


上記ファイルを、mapshperを利用してマージして、topoJSON形式でダウンロードします。
画面右上から、`Console` ボタンをクリックしてConsoleを開き以下のコマンドを実行します。
$ merge-layers target=46_xaaaa,45_xaaaa,35_xaaaa,36_xaaaa name=merged

4つのgeoJsonがマージされて一つのlayerになりますので、 Export をクリックして、topoJSON形式を選択して、ダウンロードします。



2. データ表示用のサンプルデータの準備


今回は、おなじe-Statのホームページから2014の経済センサス - 基礎調査 を利用して地図上に表示を行ってみます。
地図データと同様に4次メッシュデータの地域コードがM5339になります。
カンマ区切りのテキストファイルがダウンロードされますので、ご利用になられているLookerから接続可能なデータベースへアップロードしてください。

3. LookMLの作成


まずは、Lookerのプロジェクトを開発モードで開きます。
mapshperからダウンロードしたtopoJsonファイルをドラッグ&ドロップします。

Screen Recording 2020-10-08 at 21.17.52


次にmodelファイルにて、map_layer の定義を行います。


map_layer: tokyo_mesh4 {
file: "/map/output.json"
property_key: "KEY_CODE"
format: topojson
}

次に取り込んだテーブルの view 定義を行います。


  dimension: key_code {
label: "4次メッシュコード"
type: number
sql: ${TABLE}.KEY_CODE ;;
map_layer_name: tokyo_mesh4
}
dimension: t000842001 {
label: "全産業事業所数"
type: number
hidden: yes
sql: ${TABLE}.T000842001 ;;
}

dimension: t000842002 {
label: "全産業従業者数"
type: number
hidden: yes
sql: ${TABLE}.T000842002 ;;
}

measure: total_office_count {
label: "全産業事業所数"
type: sum
sql: ${t000842001} ;;
}

measure: total_employee_count {
label: "全産業従業者数"
type: sum
sql: ${t000842002} ;;
}

作成したViewをExploreとして定義すると以下の様に4次メッシュで地図上に表示されているかと思います。


2 replies

Userlevel 4

@YW_pon 

大変失礼しました!上記「タイルを利用した大規模カスタム・マップ・レイヤー」のリンク修正しましたのでご参照ください。

地図表現として市区町村別でカスタムマップを登録したいのですが、

参考記事のリンクが切れているようです。

ファイル容量の大きいカスタムマップの登録手順について、

記事や資料などはありますでしょうか。

>市区町村単位や、250m、500mメッシュという細かい粒度で表現するには向いていません。

>上記の場合は、タイルを利用した大規模カスタム・マップ・レイヤー を参照ください。

Reply