Contents


実行環境



インポート時にgeomety_columnsspatial_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_columnsspatial_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_sys1行しかない

上のとおり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にしてくれそうで、これは便利。でも仮に「別の系のデータをインポートするとSRID1増える」なら、インポート順によってSRIDが変わるわけでちょっと困ります。またSRIDEPSGコードに合わせたいと思ったら、空間データとspatial_ref_sysの両方を手動で更新する必要がありそう。

まだ不明な点が多く手探り状態。まとまって調べる時間がなく断片的な記事になってしまう…。いずれ複数の空間参照系データを続けてインポートするなどしてみます。