実行環境

インポート時にgeomety_columnsとspatial_ref_sysテーブルも作られる

MySQL 5.7.8rcをポータブルに使う(1),(2),(3),(4)の続きです。トピックの中心がポータブルから空間データに移ったので記事タイトルを改めました。最初の一歩として ↓ のシェープファイルをogr2ogrでインポートしたところから再開。 まずmysql(クライアント)を起動し、シェープファイル投入先のデータベース(zcta)に接続してテーブル一覧を表示。投入前は空だったのが、テーブルが3つ ↓ できてました。
$mysql -u root -p zcta
Enter password: *******
Welcome to the MySQL monitor. (..)

mysql> show tables;
+--------------------+
| Tables_in_zcta     |
+--------------------+
| geometry_columns   |
| spatial_ref_sys    |
| tl_2013_us_zcta510 |
+--------------------+
3 rows in set (0.00 sec)
geometry_columnsとspatial_ref_sysの二つはPostGISにもあります。そこではPostGISをデータベースに入れた時に作られ、前者がデータベース内のどのテーブルにどんな空間データがあるかのビュー、後者は様々な空間参照系(測地系とか)のいわばカタログで、異なる系のデータを変換する要です。 MySQLでは、どちらもシェープファイルを投入して初めて作られる模様。geometry_columnsは分かりますが、空間参照系カタログのはずのspatial_ref_sysが事後的にできるというのは意外。とりあえず3テーブルの行数をクエリしてみます。↓ これはPostgreSQLより簡単でいいですね。
SELECT table_name, table_rows
FROM information_schema.TABLES
WHERE table_schema = 'zcta';

+--------------------+------------+
| table_name         | table_rows |
+--------------------+------------+
| geometry_columns   |          1 |
| spatial_ref_sys    |          1 |
| tl_2013_us_zcta510 |      31558 |
+--------------------+------------+
3 rows in set (0.00 sec)

空間参照系カタログのspatial_ref_sysが1行しかない

上のとおりspatial_ref_sysが行数1というのは変なので、中を見てみると
mysql> SELECT * FROM spatial_ref_sys;

+------+-----------+-----------+-----------------------+
| SRID | AUTH_NAME | AUTH_SRID | SRTEXT
+------+-----------+-----------+-----------------------+
|    1 | NULL      |      NULL | GEOGCS["GCS_North_Ameri
can_1983",DATUM["North_American_Datum_1983",SPHEROID["GR
S_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UN
IT["Degree",0.017453292519943295]] |
+------+-----------+-----------+-----------------------+
1 row in set (0.00 sec)
折り返しで見づらいですが確かに1行のみ、SRIDは一般的な空間参照系のコード(EPSG等)と関係なく最初の行として?1で、実際の空間参照系データはシェープファイルのPRJの中身 ↓ がそのまま入っている模様。 次に同じ空間参照系のデータをインポートしたら同じSRID = 1にしてくれそうで、これは便利。でも仮に「別の系のデータをインポートするとSRIDが1増える」なら、インポート順によってSRIDが変わるわけでちょっと困ります。またSRIDをEPSGコードに合わせたいと思ったら、空間データとspatial_ref_sysの両方を手動で更新する必要がありそう。 まだ不明な点が多く手探り状態。まとまって調べる時間がなく断片的な記事になってしまう…。いずれ複数の空間参照系データを続けてインポートするなどしてみます。