MySQL8.0のaxis orderについて

投稿日: 2018年10月28月

FOSS4G Hokkaidoでの、おざきさんの発表で話題になったPostGISとMySQL8.0でaxis order※が逆である件。

※座標系の緯度経度、XYの指定順のこと。

今度FOSS4G TOKYOでMySQLのハンズオンをやることになったのできちんと調べてみた。

WKTフォーマットのaxis orderが逆である

より正確には「ST_GeomFromText等で指定するWKT※フォーマットのaxis orderがPostGISとMySQLでは逆」である。 (もしかしたらWKBも逆であるかもしれないけど個人的にはそれはあんまり問題じゃない)

※Well-known Text

よって、PostGISとMySQLで「全ての関数において緯度経度の取扱が逆になってる」というわけではない。 つまりそれさえ意識していれば実用上はそんなに問題ではないように思う。

具体的にはST_GeomFromTextやST_AsTextなどの関数の引数、返り値が逆になる。

 PostGIS: ST_GeomFromText('POINT(140 40)', 4326);
 MySQL: ST_GeomFromText('POINT(40 140)', 4326);

でも、MySQLではオプションを指定することでaxis orderを指定することができる。

MySQL: ST_GeomFromText('POINT(140 40)', 4326, 'axis-order=long-lat');

上記のようにすることで、PostGISと同じaxis orderを指定することが可能である。

WKTフォーマットのaxis orderが逆である理由

WKTの仕様はOGCが標準化しているものの、axis orderについては定義していない(ように思います。まだちゃんと読んでないけど。)

むしろ、各投影法ごとのaxis orderについては別仕様であるEPSGに依っており、それによれば、今回話題となった投影法であるWGS84のaxis orderはlat-lonの順番であるようです。

http://www.epsg-registry.org/

そうなるとむしろ標準に準拠しているのはMySQLなのでは?という気もします。

また、WKTがaxis orderを定義していないのであれば、axis orderを指定できるMySQLのほうが理にかなった実装であるように思える。

その他のフォーマットについてはどうなのか?

例えば、GeoJSONでは仕様としてlongitude、latitudeの順に記述することを定めている。

よって、ST_GeomFromGeoJSONやST_AsGeoJSONなどの引数/返り値が異なるということは無い。

例えば、MySQLでのST_AsGeoJSONの実行結果は下記である。GeoJSONの仕様どおり、longitude、latitudeになっている。

mysql> SELECT ST_AsGeoJSON(geom) FROM mcdnald LIMIT 1;
+------------------------------------------------------------------+
| ST_AsGeoJSON(geom)                                               |
+------------------------------------------------------------------+
| {"type": "Point", "coordinates": [141.292480489, 43.0772826618]} |
+------------------------------------------------------------------+

PostgreSQLの場合ももちろん、longitude、latitudeの順番になっている。

=# SELECT ST_AsGeoJSON(geom) FROM mcdnald2 LIMIT 1;
                         st_asgeojson
--------------------------------------------------------------
 {"type":"Point","coordinates":[144.286384394,43.9978094904]}

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ