Googleマップに世帯数を表示してみた

1
4307
views
デフォルトの背景地図

Pokémon GOでポケモンたちの出現場所を地図にマッピングするサービス「POKÉVISON」。ここで使われているのが「GIS 地理情報システム(Geographic Information System)」と呼ばれる仕組みです。地図をベースとして、その上にさまざまな情報を重ねて表示閲覧します。
最近、地域の世帯数マップを作る必要があったので、Googleマップのレイヤ(階層・画層)に重ねて自分専用GISにしてみました(とはいえ、そもそもGoogleマップ自体がGISですが)。少し手間は掛かりますが、かなり高機能な地図ができたのでご紹介します。


POKÉVISON
https://pokevision.com/

地理情報システム- Wikipedia
https://ja.wikipedia.org/wiki/%E5%9C%B0%E7%90%86%E6%83%85%E5%A0%B1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0

今回作ったマップは、ここで共有しています。iPhoneやiPadでも表示OK。
https://drive.google.com/open?id=1DH4S7o3wTYR9Odr0HI1PWgjrNHM&usp=sharing

実はここ数年ほど、GIS専用システムのインストラクション業務で、九州各地の自治体で開催される操作研修に関わっています。自分のGoogleマップにGISレイヤを重ねてカスタマイズすることで、基礎からのおさらいにもなりました。

手順は大きく3つに分かれます。

  1. 地図の上に重ねられるデータを探して、ダウンロードする
  2. 最小限のデータに編集し、フォーマットを変換する
  3. Googleマップに読み込んで、データや表示を編集する

1.地図の上に重ねられるデータを探して、ダウンロードする

今回、必要なのは、九州内のいくつかの市区町村の世帯数で、GISとして利用できるフォーマットのデータです。総務省統計局で公開されているデータが見つかったので、それを利用することにしました。最新のデータでも6年前とやや古いですが、「平成22年国勢調査集計単位別(人口)- 市区町村集計(男女別人口総数及び世帯総数)」を使います。
自治体が持つデータを公開する「オープンデータ」という動きもあって、各市区町村のWebサイトへ行けば、より新しいデータがあることは分かっていますが、今回の目的では、大まかな傾向が分かれば十分でした。また、それぞれの自治体で公開フォーマットが違うはずで、GISで使うには整理が必要だと思ったので、この総務省のデータを使いました。

地図で見る統計(統計GIS)-総務省統計局
https://www.e-stat.go.jp/SG1/estat/toukeiChiri.do?method=init

まず、「地図に表す統計データ」リンクをクリックすると、ブラウザでそのまま見られる「ArcGIS」というシステムが開きます(ArcGISを販売するのは、前述の「POKÉVISON」で使われているサービスも提供するESRI社)。機能も充実していて、まさに欲しい情報が表示されるので最初はこれでいいかと思いましたが、実は、致命的な点が3つあります。

  1. 統計データを表示しながら、例えばコンビニを探して重ねたり、地図上に描かれている情報(地物 ちぶつ)を探しながら同時に使えない。
  2.  Flashベースなので、iOSデバイスで表示できない。
  3. 動作が遅くて、ちょっとした操作でも描画を待たされる。ArcGISの遅い動作

そこでこの方法は諦めて、Shapeファイルをダウンロードして自分のGoogleマップに重ねることにしました。


  1. 総務省統計局のサイトで「データダウンロード」をクリックします。総務省統計局のWebサイト
  2. 「Step1」のプルダウンメニューで「国勢調査」を選び、一番上の「平成22年国勢調査(小地域)」をクリックします。
    国勢調査-男女別人口総数及び世帯総数
  3. 「Step2」で、一番上の「男女別人口総数及び世帯総数」をチェックし、右下の[統計表各種データダウンロードへ]ボタンをクリックします。
    福岡市西区の統計データと境界データ
  4. 「Step3」で、プルダウンメニューで都道府県を選び、市区町村の行を選択します。Conctol-クリックで複数の行を選べます。
  5. [検索]ボタンをクリックすると、「Step4」に「統計データ」「境界データ」がそれぞれ表示されるので、「データ」のリンクをクリックしてダウンロードします。「統計データ」は、csvファイルです。「境界データ」は、上から2番目の「世界測地系平面直角座標系・Shape形式」を使うことにしました。必要に応じて、データの仕様を書いた「定義書」もダウンロードします。
  6. ダウンロードしたzipファイルを展開し、分かりやすく1つのフォルダに整理しておきます。
    私は、ダウンロードしたファイルの拡張子の直前の5つの数字(KEY CODE キーコードと呼ばれる、地図の照合番号)と、各市町村名をフォルダに付けました。郵便番号でもいいような気もしますが、混乱するのでお勧めしません。
    ダウンロードされたファイル
    また、ダウンロードしたShapeファイルは、別の階層に移動させたりファイル名を変えたりせず、そのままの状態にしておきます。4つのファイルのうち主に使うのはshpファイルだけですが、「必須」ファイルは相互関係があります。私は最初、shpファイル以外を捨ててしまって、次のステップでエラーに悩まされました。
    .shp 図形の座標を格納するファイル(必須)
    .shx shpの図形とdbfの属性の対応関係を格納するファイル(必須)
    .dbf : 図形の属性情報を格納するテーブル(必須)
    .prj : 図形の持つ座標系の定義情報を格納するファイル(任意)
    認識できないデータソースエラー

2.最小限のデータに編集し、フォーマットを変換する

ダウンロードしたShapeファイルには、今回不要なデータがあるので削除します。また、Googleマップに読み込めるkmlファイルに変換します。データ編集とファイル変換には、オープンソースのGISアプリケーションQGISを使います。オープンソースGISのQGIS

QGIS
http://www.qgis.org/ja/

  1. QGISのサイトへアクセスして、[ダウンロードする]ボタンをクリックします。
  2. OSに応じたリンクをクリックします。
    QGISダウンロード-macOS
  3. KyngChaos QGISのサイトへ遷移するので、Downloadのリンクをクリックします。QGISのダウンロードページ
  4. macOSの場合、dmgファイルをマウントし、1-4まであるパッケージファイルを順番にインストールしていきます(環境によっては、「システム環境設定」>「セキュリティとプライバシー」>「一般」で、「ダウンロードしたアプリケーションの実行許可」の設定を確認)。
    QGISの複数パッケージ
    セキュリティーアラート
  5. QGISアプリケーションを起動し、ダウンロードしておいた市区町村のデータの.shpファイルを開くと、地図が表示されます(ここでエラーになる場合は、前述の複数ファイルを確認)。
    QGISアプリケーションQGISのウインドウ
  6. 「Preferences…」を開き、「データソース」の「シェープファイルのエンコーディング宣言を無視する」のチェックをオフにします。これは、Shapeファイルに格納されている日本語の改行コードがS-JISなので、そのまま書き出してGoogleマップに読み込むと文字化けしてしまうためです。[OK]ボタンで閉じます。
    QGIS環境設定-データソース
  7. 次に、「レイヤパネル」で、対象のレイヤを右クリックし、メニューから「編集モード切替」を選択します。地図の境界線がハイライトされます。
    「編集モード切替」
    QGISでの編集
  8. もう一度、対象のレイヤを右クリックし、メニューから「属性テーブルを開く」を選択します。
    「属性テーブルを開く」
  9. 属性テーブルが開きます。各属性の詳細は、ダウンロードしておいた「定義書」PDFを参照します。ほとんどの属性は、今回の目的には不要なので削除します。デフォルトの属性テーブル
    Shapeファイルのフィールド詳細
  10. [フィールド削除]ボタンをクリックします。開いたリストの項目名を上から下までドラッグしてすべて選択し、Command-クリックで「MOJI」「SETAI」「X_CODE」「Y_CODE」「KEY_CODE」の5つだけ除外し、[OK]ボタンをクリックします。[フィールド削除]ボタン
    削除フィールドの選択
  11. 必要最小限の属性テーブルになりました。この段階で世帯数「SETAI」のタイプは「int(数値)」ですが、Googleマップに読み込むとなぜか文字列として認識されてしまうので、後でコピー変換します。
    最小限に編集した属性テーブル
  12. 「レイヤパネル」で、対象のレイヤを右クリックし、メニューから「名前をつけて保存する…」を選択します。
    「形式:Keyhole Markup Language [KML]」にし、[ブラウズ]ボタンをクリックして、保存するフォルダとファイル名を決めます。ここでは、KEY CODE(5つの数字)にしました。[OK]ボタンで保存します。
    「名前をつけて保存する」kmlファイルKMLファイルとして保存

3.Googleマップに読み込んで、データや表示を編集する

ようやく最後のステップです。

  1. Googleマップを開いて、ウインドウ左上の「メニュー」を開きます。「マイプレイス」をクリックし、さらに「マイマップ」をクリックして、ウインドウ一番下の[地図を作成]をクリックします。
    Googleマップの「マイプレイス」デフォルトのGoogleマップ
  2. 「無題の地図」が開くので、メニュー右側の縦になった[…]で、適当に名前を編集します。
    新規マップの「無題のレイヤ」
  3. レイヤの[インポート]をクリックし、新しく前面に開いたウインドウに、書き出したkmlファイルをドラッグします。アップロードされると、図形を中心に描き変わります。インポートファイルの選択読み込み直後のレイヤ
  4. 「無題のレイヤ」だったレイヤ名が、kmlファイルの名前に変わります。レイヤ名の右の縦になった[…]をクリックし、「このレイヤの名前を変更」で、適度に編集します。
  5. 不要なデータがあるのと、世帯数「SETAI」が数値として認識されていないのを編集します。もう一度[…]をクリックし、「データビューを開く」をクリックします。「データビューを開く」
  6.  「MOJI」列のラベルを右クリックし、「タイトル列に設定」します。「MOJI」のタイトル列設定
  7. 「SETAI」列を「コピー」し、ラベルを「HOUSEHOLDS」に、タイプを「数字」に設定して、[追加]ボタンをクリックします。
    「SETAI」列のコピー列を「タイプ:数字」でコピー
  8. 「名前」「説明」「SETAI」列を削除して、データビューを閉じます。(スムーズに再読み込みされないことが何度かありましたが、キャッシュを消去したり操作を繰り返して解決できました)
    データ編集済みリロードエラー
  9. 次に、世帯数ごとに5段階に自動色分けして、丁目や町村名をラベルとして表示します。「個別スタイル」リンクをクリックし、以下のように変更します。
    * 場所のグループ化方法:HOUSEHOLDS
    * 「範囲」オプション:5 任意のグラデーション
    * ラベルを設定:MOJI
    「個別スタイル」レイヤのデフォルト設定「スタイル」のグラデーションをカスタマイズ
  10. グラデーションは、暗い色だと見づらいので変更しました。数値が小から大になるに従って、白から黄色、赤になって、半透明で重なるようにしました。5つに分かれた数値それぞれの右端のアイコンをクリックし、開いたパレットでカラーを変更します。色の「範囲別の色を使う」チェックボックスをオフにし、「ポリゴンの透明度」スライダーを中央に設定します。ポリゴンの透明度は1つのレイヤーで共通なので、指標が5つに分かれていても、1回設定すればOKです。
    スタイルのカラー設定「世帯数マップ」のメニュー
  11. 福岡市西区の地図の場合、博多湾上を覆う無意味な図形があったので、クリックして削除しました。右クリックでも削除できます。
    不要な「対象物を削除」
  12. 重なる背景の地図がデフォルトだと道路や鉄道、文字がうるさいので、「基本地図」から「モノクロ都市」を選択します。
    デフォルトの背景地図背景地図を「モノクロ都市」に
  13. 図形をクリックすると、属性がバルーンで表示されます(なぜか面積まで!)。
    マップの吹き出し情報マップのドラッグ移動
    この図形は、削除したりドラッグで位置が変えられてしまうので、ロックしたいところですが、残念ながらその機能がありません。もし、共有するなら、せめて共有先の編集を制限しておきます。「メニュー」中央の[共有]をクリックし、「共有設定」の「オーナーの設定」で「編集者によるアクセス権の変更や新しいユーザーの追加を禁止します」をチェックしておきます。ただし、オーナーである自分自身は、引き続き削除や移動ができてしまうので要注意。共有リンク
  14. 最後に、地図の仕上がりを「プレビュー」で確認します。完成したGISのプレビュー

iPhoneで表示

これで、Googleマップを使った世帯数表示の完成です!ズームやスクロールもスムーズ、文字情報もスケーラブルです。図形をクリックすると、左側にデータが表示されます。もちろん、iPhoneのChromeやGoogleマップでも表示できます。
GISで使えるさまざまなデータは、国内外で広く公開されているので、ぜひチャレンジしてみてください。

1コメント

返事を書く

Please enter your comment!
Please enter your name here