※本記事はRDBMS-GIS Advent Calendar 2019の1日目の記事です。
はじめに
現時点(2019/12/1)では、MySQLにシェープファイルをインポートするにはogr2ogrというGDALというライブラリに含まれるコマンドラインツールを利用するのが一般的です。
ただ、GDALをインストールする方法がいくつか存在するため、慣れていないと「どれを使うのが良いの?」と戸惑います。本記事は「これからogr2ogrを使ってMySQLにシェープファイルをインポートしたい」という人用におすすめの方法をまとめておきます。
PostGIS使いもシェープファイル以外のファイルをシェープファイルに変換する際等にogr2ogrを使えるので有用かもしれません。
GDALインストール方法の選基準は下記です。
- MySQLドライバが有効な状態でビルドされていること。
- MySQLのインポートに必要であるため。
- 最新(に近い)ソースでビルドされていること。
- MySQLドライバの開発スピードが早いため。(古いと致命的なバグもある)
ogr2ogrを使ったシェープファイルのインポートについては本記事ではあまり説明しません。本記事ではあくまでGDALのインストール方法について解説します。
ogr2ogrを使ったMySQLへのシェープファイルのインポート方法については下記記事を参照して下さい。
結論
公式で配布されてるDockerイメージ使うのが最も手っ取り早いです。
ただ、ogr2ogrのためだけににDockerを使うのはオーバーヘッドが大きすぎるのも事実です。
ので、各プラットフォーム毎でいえば下記もおすすめです。
- Windows
- OSGeo4W
- GISInternals
- Linux
- ソースからコンパイル
以降はそれぞれの方法についての解説です。
Dockerイメージを使う(Windows/Mac/Linux共通)
Dockerエンジンのインストールや使い方については省略します。
GDALのDockerイメージは下記で配布されています。
まずはイメージを準備しましょう。いくつかイメージが用意されていますが、使うのはosgeo/gdal:ubuntu-full-latest
である点に注意して下さい。(MySQLドライバが含まれるため)
$ docker pull osgeo/gdal:ubuntu-full-latest
コンテナを起動します。ここではホストの/home/ディレクトリをマウントしています。
$ docker run -v /home:/home -it --rm osgeo/gdal:ubuntu-full-latest
コンテナに入ったら、こんな感じでシェープファイルの文字コードを変換したり、MySQLにインポートしたりできます。
root@43dd82bfeb90:/# cd [シェープファイルが格納されたディレクトリ]
root@43dd82bfeb90:/# ogr2ogr -f "ESRI Shapefile" -lco ENCODING=UTF-8 -oo ENCODING=CP932 [変換後のシェープファイル名] [変換前のシェープファイル名]
root@43dd82bfeb90:/# ogr2ogr -f "MySQL" "MySQL:[MySQLのデータベース名],host=[MySQLのホスト名],user=[MySQLのユーザ名],password=[MySQLのパスワード]" [変換後のシェープファイル名]
Windows
Windowsの場合はOSGeo4WやGISInternalsで配布されているインストーラを使うのがお手軽です。
OSGeo4Wを使う場合は、インストールするGDALのバージョンが選択できるので、最新版を選ぶと良いでしょう。
どちらもMySQLドライバが有効な状態でビルドされているようです。
- OSGeo4W
- GISInternals
Linux
ソースからのコンパイルについてはこちらの記事で紹介しています。MySQLを有効にするのを忘れないようにしましょう。
OSのパッケージリポジトリに登録されているGDALを使うと、本記事執筆時点ではバージョンが古かったりMySQLドライバが有効でなかったりするのでおすすめしません。
Mac
未調査です。私はDockerを使っています。
まとめ
shp2mysqlみたいなコマンドが早くできたら、わざわざこんな面倒な作業しなくて済むんですけどね。
という機能追加リクエストも出ているので「Affects me」すると優先順位が上がるかもしれないのでおすすめです。