1
Help us understand the problem. What are the problem?

posted at

updated at

MySQLのGIS機能を手軽に試せるように、市町村の境界データを全国分まとめて簡単にロードできるようにしました

はじめに

本記事は RDBMS-GIS(MySQL,PostgreSQLなど) Advent Calendar 2021 の25日目です。

MySQLでは5.7でGIS機能をBoost.GeometryというC++のオープンソースライブラリを採用して再実装し、MySQL 8.0でも引き続き機能強化しています。本記事をきっかけにMySQLのGIS機能に興味を持ってもらえると嬉しいです。

この記事で伝えたいこと

MySQLのGIS機能を手軽に試せるように、MySQLのダンプファイルの形式で以下データを配布しています。

 ・e-Statで配布されている境界データのシェープファイルをogr2ogrを使ってMySQLに取り込んで、Spatialインデックスを追加したもの (都道府県別にダンプファイルを提供)

 ※配布先はこちら

このデータは2019年12月から配布していましたが、今回はこのデータをMySQL Shellのロードダンプユーティリティを使って全国分のデータをまとめて簡単に取り込めるようにしました。

背景

MySQLのGIS機能を使う時に、シェープファイル(GIS系のデータフォーマットの一つ)を取り込めると出来ることが広がります。そこで、シェープファイルを取り込む方法について以下の資料やQiitaの記事で解説していますが、事前にGDALをインストールしないといけない、など一般のMySQLユーザーには少し敷居が高くなっています。

 ・MySQL 8.0で強化されたGIS機能と使用事例のご紹介+α
 ・MySQL 8.0にシェープファイルを取り込んで、MySQL Workbenchでポリゴンの形を確認する

※GDALを使わずにシャープファイルをMySQLにインポートできるshp2mysqlもあります。こちらを使うと、シェープファイルをインポートするためのSQL文が生成できるため、MySQLユーザーの方にはこちらの方が使い易いかもしれません。

 MySQLにシェープファイルをインポートするツール(shp2mysql)を作った

そこで、まずは手軽にMySQLのGIS機能を試してもらうために、MySQLに取り込んだ状態のデータを配布しています。

本文

今日はクリスマスですね。MySQLのGIS機能に興味があるみなさんにクリスマスプレゼントを用意しました。以下の手順を実行するだけで、全国の市町村の境界データ(e-Statで配布されている境界データ)をMySQLに取り込むことが出来ます。

 1.MySQL Shellをインストール
 2.ダンプファイルの取得
 3.ダンプファイルの解凍
 4.geotestデータベースの作成
 5.ダンプファイルのロード

1.MySQL Shellをインストール
こちらからMySQL Shellをダウンロードしてインストールして下さい。

2.ダンプファイルの取得

wget https://objectstorage.ap-osaka-1.oraclecloud.com/p/S8m5HhnWYunAWsk7ep5AyU-R5rXI6eU0ihFki_bnXDqHl8YK6Ils0DcbiA0q1JYT/n/axqeeh9mtohj/b/geotest/o/geotest.tar.gz

※2031年12月31日までは、上記URLからファイルを取得できる予定です。(免責事項:予告なく上記URLが無効になる可能性があります)

3.ダンプファイルの解凍

$ tar -zxvf geotest.tar.gz

4.geotestデータベースの作成

mysql> create database geotest;

5.ダンプファイルのロード ※MySQL Shellから実行

MySQL  JS > util.loadDump("/home/opc/geotest", {dryRun: false, ignoreVersion: true})

※上記コマンドは/home/opc/ 配下でダンプファイルを解凍した場合の例

備考

データを取り込んだ後は、以下の記事の手順で境界データの形などを確認できます。

 MySQL 8.0にシェープファイルを取り込んで、MySQL Workbenchでポリゴンの形を確認する

配布データの出典

政府統計の総合窓口e-Stat

※この手順でロードできるデータは、こちらで案内している手順でe-Statからダウンロードしたシェープファイルを加工したもの。

免責事項

本データを用いて行う一切の行為について、いかなる責任も負いません。本データを使用したことによって被った損害、損失に対して一切の責任を負いません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?