オープンソースカンファレンス2018香川(OSC2018-Kagawa)参画

香川県高松市で開催されたオープンソースカンファレンス2018香川(OSC2018-Kagawa)に行ってきました。
www.ospn.jp

f:id:sakaik:20181005172915j:plain

 今回も日本MySQLユーザ会としてブース出展とセミナーを開催して来ました。
OSC香川のセミナー枠は、通常のOSCでの45分枠とは異なり15分だけなのと、ワントラックでの開催=べつにMySQLに興味あるわけではない人も「なんとなく」聞きに来たりするのかなという想像から、思いっきり初心者向けにテーマを振ってみました。なぜデータベースを使うのか、どういう役割を持ったソフトウェアなのか、といった、普段「MySQLの話をしま~す」と言った時には絶対にしないようなレイヤからお話をしました。ターゲット層が広く多岐にわたっているため、誰にどう伝わったのか不安な思いもありますが、学生さんも多く聞きに来てくれて、まぁある程度はマッチしていたかなと思っています。

 香川入りをしてから家に帰るまで、なにかと充実していて、会場でもいろんな方とお話したり山崎さんにGISについて沢山教えていただいたりディスカッションしたり、いつもどおりお隣のJPUG(日本PostgreSQLユーザ会)の方々とも仲良くおしゃべりしたりと、会場の写真を撮るのを一切忘れていたくらいの充実度でした。
 ブースとしては最近、ぱっと見てもらってわかるものをあまり展示していない反省はあり、あっきぃさんにラズパイでの簡単なサイネージっぽいものとか相談に乗ってもらって、そういうのを今後展示に供していけたらなぁと思っておる次第であります。こちらも積極的に声をかけないし、強い興味がある人以外はなかなかブースに声をかけにくいと思うので、そういう会話のきっかけを、改めてもうちょっとやっていきたいところです。

 うどんは結局6杯いただきました。もう一杯チャンスがあったけど、帰りのバスを一本早めることにしたおかげで、食べ損ないまして。
OSC関連でお世話になった方も、OSCと全然関係なくお世話になった方も、どうもありがとうございました。

MySQLのSpatial型カラムにSRIDは必須ではなかった

 私自身が勘違いしたまま先日も発表してしまった事があるようなので、追確認を行いました。ことの発端は、id:dupont_kedama さんの
MySQL8.0でGIS機能を試す No.1 - Ingressのリンク可能判定 - untitled .engineer
を見て、「あれっ?DDLでSRID指定していないのに、通るの、これ?」と twitter で伺ったことから。

 先日の発表での私の勘違いは:

誤: 位置(度またはメートル)を格納するカラムには、必ず 使用したい SRID を指定する必要がある。そして、INSERTとかをする時にも、同じSRIDを指定しないとエラーになる

正: 位置(度またはメートル)を格納するカラムには、使用したい SRID を指定することができる。指定した場合は、INSERTとかをする時にも、同じSRIDを指定しないとエラーになる。指定しない場合は、あらゆるSRIDをそのカラムは受け入れることができる

改めて以下のスライドのページを見ると、必ずしも「誤」と取れる書き方はしていませんが、私が「誤」の内容で思い込んでいたので、そのように言葉では言ったかもしれません。訂正します。
https://www.slideshare.net/sakaik/mysql-gis-clubmysql-4/38


以下はおためしの記録。

1)SRIDを指定しない GEOMETRY 型に様々な値をつっこむ

mysql> CREATE TABLE g1 (id integer, g GEOMETRY);

mysql> INSERT INTO g1 VALUES (1, ST_GeomFromText('POINT(1 3)'));
mysql> INSERT INTO g1 VALUES (1, ST_GeomFromText('POINT(135 35)'));
mysql> INSERT INTO g1 VALUES (1, ST_GeomFromText('POINT(35 135)'));
mysql> INSERT INTO g1 VALUES (1, ST_GeomFromText('POINT(35 135)', 4326));

mysql> INSERT INTO g1 VALUES (1, ST_GeomFromText('POINT(135 35)', 4326));
ERROR 3617 (22S03): Latitude 135.000000 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

 SRID無指定の値のセットも、SRID 4326 の値のセットも受け入れられます。
SRID=4326 のときに、緯度経度を逆に指定してしまった場合には、「北緯135度なんてないよ」という(意訳)エラーがでます(正常動作)。

mysql> SELECT id, ST_AsText(g), HEX(g), ST_SRID(g) FROM g1;
+------+---------------+----------------------------------------------------+------------+
| id   | ST_AsText(g)  | HEX(g)                                             | ST_SRID(g) |
+------+---------------+----------------------------------------------------+------------+
|    1 | POINT(1 3)    | 000000000101000000000000000000F03F0000000000000840 |          0 |
|    1 | POINT(135 35) | 0000000001010000000000000000E060400000000000804140 |          0 |
|    1 | POINT(35 135) | 00000000010100000000000000008041400000000000E06040 |          0 |
|    1 | POINT(35 135) | E610000001010000000000000000E060400000000000804140 |       4326 |
+------+---------------+----------------------------------------------------+------------+

 登録された結果は、以上のとおり。ST_SRID() により、同じ (35 135)でも、SRIDが異なることが判断できます。


2)SRIDを指定しないPOINT型で試す
 GEOMETRY型は許容力が大きいのだ、POINT型ならSRIDが一致しないとエラーになるはずだ、と仮説を立ててPOINT型で同じ事を試してみた。結果は、GEOMETRY型と同じく問題なく格納される。

CREATE TABLE g2 (id integer, g POINT);
INSERT INTO g2 VALUES (1, ST_GeomFromText('POINT(1 3)'));
INSERT INTO g2 VALUES (1, ST_GeomFromText('POINT(135 35)'));
INSERT INTO g2 VALUES (1, ST_GeomFromText('POINT(35 135)'));
INSERT INTO g2 VALUES (1, ST_GeomFromText('POINT(35 135)', 4326));

mysql> INSERT INTO g2 VALUES (1, ST_GeomFromText('POINT(35 135)', 4326));

 結果:

mysql> select id, ST_AsText(g),HEX(g), ST_SRID(g) FROM g2;
+------+---------------+----------------------------------------------------+------------+
| id   | ST_AsText(g)  | HEX(g)                                             | ST_SRID(g) |
+------+---------------+----------------------------------------------------+------------+
|    1 | POINT(1 3)    | 000000000101000000000000000000F03F0000000000000840 |          0 |
|    1 | POINT(135 35) | 0000000001010000000000000000E060400000000000804140 |          0 |
|    1 | POINT(35 135) | 00000000010100000000000000008041400000000000E06040 |          0 |
|    1 | POINT(35 135) | E610000001010000000000000000E060400000000000804140 |       4326 |
+------+---------------+----------------------------------------------------+------------+

3)カラムにSRIDを明示したときだけ制約されるのか?と気づき試し

CREATE TABLE g3 (id integer, g POINT SRID 6668);

mysql> INSERT INTO g3 VALUES (1, ST_GeomFromText('POINT(1 3)'));
ERROR 3643 (HY000): The SRID of the geometry does not match the SRID of the column 'g'. The SRID of the geometry is 0, but the SRID of the column is 6668. Consider changing the SRID of the geometry or the SRID property of the column.

mysql> INSERT INTO g3 VALUES (1, ST_GeomFromText('POINT(135 35)'));
ERROR 3643 (HY000): The SRID of the geometry does not match the SRID of the column 'g'. The SRID of the geometry is 0, but the SRID of the column is 6668. Consider changing the SRID of the geometry or the SRID property of the column.

mysql> INSERT INTO g3 VALUES (1, ST_GeomFromText('POINT(35 135)'));
ERROR 3643 (HY000): The SRID of the geometry does not match the SRID of the column 'g'. The SRID of the geometry is 0, but the SRID of the column is 6668. Consider changing the SRID of the geometry or the SRID property of the column.

mysql> INSERT INTO g3 VALUES (1, ST_GeomFromText('POINT(35 135)', 4326));
ERROR 3643 (HY000): The SRID of the geometry does not match the SRID of the column 'g'. The SRID of the geometry is 4326, but the SRID of the column is 6668. Consider changing the SRID of the geometry or the SRID property of the column.

mysql> INSERT INTO g3 VALUES (1, ST_GeomFromText('POINT(35 135)', 6668));

 DDLで SRID=6668 を明示しているので、INSERT時の ST_GeomFromText の第2引数でSRIDを指定しない時(=SRID が ゼロと見なされる)は、SRIDが一致しないとのエラーとなる。一番最後の カラムと一致するSRID(6668)を指定したときのみ、正常に受け入れられることがわかる。
  
結果:

mysql> select id, ST_AsText(g),HEX(g), ST_SRID(g) FROM g3;                                                                       
+------+---------------+----------------------------------------------------+------------+
| id   | ST_AsText(g)  | HEX(g)                                             | ST_SRID(g) |
+------+---------------+----------------------------------------------------+------------+
|    1 | POINT(35 135) | 0C1A000001010000000000000000E060400000000000804140 |       6668 |
+------+---------------+----------------------------------------------------+------------+


ということで、私の勘違いは以下のように言い換えることもできるかも。

誤: CREATE TABLE で spatial型のカラムに対して SRID を指定しない場合は、SRID=0 が指定されたものとして動作する

正: CREATE TABLE で spatial型のカラムに対して SRID を指定しない場合は、INSERT文で都度都度与えられたSRIDを受け入れて動作する

 そもそも、MySQLの内部バイナリ(≠ WKB)は、WKBにSRIDを付加したものなので、色々なSRIDをそのまま受け入れることができるように作られているんですよね。
 なお、CREATE TABLE では「SRIDを指定しないときはゼロとされる」が誤り(勘違い)でしたが、ST_GeomFromText() 等では、「SRIDを指定しないときはゼロと見做される」で正しいので、お間違いなく。


 またひとつかしこくなった! kedama さんありがとうございます!




#なお、せっかく id 列を用意しているのに全部 1 なのはご愛敬(まちがえた。。)

MySQL Workbench で spatial view の例

すごく雑なエントリですが、とりあえずこんな感じで試せますという例。

SELECT ST_GeomFromText('POLYGON( (35.85873223 140.02100778,35.85869833 140.02062944,35.85888028 140.02060361,35.85897278 140.02051249,35.85900056 140.02043305,35.85901916 140.02028500,35.85899250 140.02019805,35.85874584 140.01964528,35.85866333 140.01933389,35.85865083 140.01920167,35.85872666 140.01879694,35.85872666 140.01870333,35.85866333 140.01850888,35.85866333 140.01840000,35.85872334 140.01805889,35.85872334 140.01784861,35.85869806 140.01738194,35.85873584 140.01717167,35.85877389 140.01707833,35.85878667 140.01698500,35.85878028 140.01672806,35.85878028 140.01661139,35.85885000 140.01648667,35.85887528 140.01641667,35.85890056 140.01635445,35.85890027 140.01628444,35.85887500 140.01610528,35.85887528 140.01596667,35.85885639 140.01572555,35.85879944 140.01557750,35.85871056 140.01548417,35.85860972 140.01543750,35.85854639 140.01537528,35.85856528 140.01520778,35.85869167 140.01516111,35.85878028 140.01497445,35.85884361 140.01478750,35.85885000 140.01428972,35.85917639 140.01234500,35.85939222 140.01112861,35.85944917 140.01098084,35.85950611 140.01091862,35.85958166 140.01089528,35.85969583 140.01092639,35.85990472 140.01102750,35.85993638 140.01101972,35.85997416 140.01094194,35.85996167 140.01054500,35.85992361 140.01045917,35.85980973 140.01042028,35.85974000 140.01035806,35.85964500 140.01026472,35.85958166 140.01026472,35.85937945 140.01031917,35.85930361 140.01030361,35.85925278 140.01024917,35.85921500 140.01014805,35.85915806 140.01004667,35.85914527 140.00996111,35.85915806 140.00987556,35.85918945 140.00978222,35.85920473 140.00948056,35.85918584 140.00920027,35.85910389 140.00902916,35.85897722 140.00885000,35.85897084 140.00878778,35.85904694 140.00871000,35.85909083 140.00863222,35.85910972 140.00857000,35.85910361 140.00849222,35.85904694 140.00832889,35.85893139 140.00823472,35.85877944 140.00818806,35.85853889 140.00674972,35.85844361 140.00589222,35.85895195 140.00532778,35.85901528 140.00531222,35.85916722 140.00538223,35.85921778 140.00533556,35.85945194 140.00493083,35.85946472 140.00486083,35.85928417 140.00410027,35.85937306 140.00402111,35.85947333 140.00393223,35.85959611 140.00402805,35.85972444 140.00407028,35.85977723 140.00408750,35.86001250 140.00413195,35.86006694 140.00410972,35.86009111 140.00408000,35.86016334 140.00383500,35.86022389 140.00382028,35.86032222 140.00401695,35.86046695 140.00443250,35.86072056 140.00454389,35.86076889 140.00453639,35.86080472 140.00449194,35.86090750 140.00427666,35.86098583 140.00413556,35.86101611 140.00406888,35.86102222 140.00400944,35.86097389 140.00395000,35.86092555 140.00374223,35.86096167 140.00364583,35.86101611 140.00362361,35.86107278 140.00363750,35.86110916 140.00361527,35.86113333 140.00355583,35.86114528 140.00333333,35.86127806 140.00299917,35.86130222 140.00287306,35.86133250 140.00278389,35.86138667 140.00273194,35.86148333 140.00266528,35.86161000 140.00252416,35.86183945 140.00243500,35.86206167 140.00223667,35.86223667 140.00216250,35.86235139 140.00202889,35.86250222 140.00182111,35.86255056 140.00159834,35.86258667 140.00156862,35.86267723 140.00162055,35.86275556 140.00159834,35.86287028 140.00150195,35.86303000 140.00128944,35.86307833 140.00106667,35.86310833 140.00100750,35.86323528 140.00104444,35.86336194 140.00094056,35.86349472 140.00082917,35.86361556 140.00068083,35.86368195 140.00054722,35.86374834 140.00036167,35.86379666 140.00030972,35.86392417 140.00022667,35.86404472 140.00010056,35.86414750 139.99992222,35.86428805 139.99962445,35.86454167 139.99925333,35.86459000 139.99910528,35.86460195 139.99841473,35.86505000 139.99741056,35.86524305 139.99687611,35.86529139 139.99673944,35.86538306 139.99639027,35.86540861 139.99634028,35.86543000 139.99632473,35.86556277 139.99627861,35.86559278 139.99626278,35.86561639 139.99622861,35.86562695 139.99618639,35.86574056 139.99552111,35.86575972 139.99533694,35.86575333 139.99528695,35.86574694 139.99523694,35.86566139 139.99507362,35.86545611 139.99469333,35.86541111 139.99456972,35.86541111 139.99436167,35.86541333 139.99411972,35.86542833 139.99391695,35.86570722 139.99297278,35.86576834 139.99317639,35.86579278 139.99325139,35.86582611 139.99330833,35.86590305 139.99342000,35.86591528 139.99344778,35.86591695 139.99347778,35.86590305 139.99353806,35.86578084 139.99375250,35.86570389 139.99399305,35.86568472 139.99410472,35.86568472 139.99426556,35.86573361 139.99447361,35.86576500 139.99461527,35.86581833 139.99472472,35.86587055 139.99478277,35.86593000 139.99483445,35.86599666 139.99486639,35.86607722 139.99485361,35.86633194 139.99480416,35.86642361 139.99477805,35.86647417 139.99476750,35.86656500 139.99472222,35.86663833 139.99463222,35.86669084 139.99455500,35.86670639 139.99450139,35.86671000 139.99437472,35.86670305 139.99431611,35.86668556 139.99425611,35.86667694 139.99420666,35.86667694 139.99414444,35.86669084 139.99410361,35.86677806 139.99379250,35.86681139 139.99363333,35.86682695 139.99356028,35.86685861 139.99350444,35.86688111 139.99344222,35.86689334 139.99337583,35.86689334 139.99334139,35.86686195 139.99319556,35.86682695 139.99313750,35.86675389 139.99304528,35.86666111 139.99297250,35.86660694 139.99293083,35.86654223 139.99288556,35.86651777 139.99284916,35.86650723 139.99281055,35.86651084 139.99274611,35.86653361 139.99263250,35.86657195 139.99250361,35.86660333 139.99243500,35.86666278 139.99235139,35.86668556 139.99234055,35.86673611 139.99234694,35.86680944 139.99237055,35.86684250 139.99237278,35.86689666 139.99235556,35.86694750 139.99231945,35.86705833 139.99225362,35.86712694 139.99222667,35.86722445 139.99222500,35.86742612 139.99225944,35.86752138 139.99228361,35.86761528 139.99232083,35.86772278 139.99237695,35.86779722 139.99242250,35.86786000 139.99243667,35.86791555 139.99243389,35.86806055 139.99252889,35.86818861 139.99261306,35.86819861 139.99265028,35.86822055 139.99269361,35.86825250 139.99273278,35.86852944 139.99282528,35.86863388 139.99286945,35.86867778 139.99288778,35.86887750 139.99296000,35.86890472 139.99297278,35.86896833 139.99306778,35.86900528 139.99315639,35.86901528 139.99324111,35.86899334 139.99358167,35.86896278 139.99390472,35.86890916 139.99420806,35.86889417 139.99433834,35.86881695 139.99466500,35.86880666 139.99480750,35.86880167 139.99519138,35.86878666 139.99534416,35.86876639 139.99545556,35.86870611 139.99565639,35.86860556 139.99601417,35.86859528 139.99609973,35.86847166 139.99656555,35.86842445 139.99673944,35.86837333 139.99706889,35.86831055 139.99741750,35.86819500 139.99762389,35.86809000 139.99798556,35.86780639 139.99847611,35.86764889 139.99890195,35.86748083 139.99965056,35.86719028 140.00052000,35.86682750 140.00176444,35.86670334 140.00196417,35.86670334 140.00205778,35.86676055 140.00239833,35.86675111 140.00265666,35.86669361 140.00282083,35.86662695 140.00296166,35.86658861 140.00325528,35.86642639 140.00395972,35.86630889 140.00443306,35.86623250 140.00452694,35.86619444 140.00462084,35.86621361 140.00485584,35.86587000 140.00613528,35.86586055 140.00640528,35.86583194 140.00655778,35.86570389 140.00711916,35.86547778 140.00811083,35.86542055 140.00822834,35.86537277 140.00851000,35.86532500 140.00863917,35.86528667 140.00868611,35.86520083 140.00872138,35.86509584 140.00874472,35.86498111 140.00899138,35.86503861 140.00916750,35.86503861 140.00930834,35.86500027 140.00950805,35.86501000 140.00959000,35.86505750 140.00964889,35.86504806 140.00978972,35.86489417 140.01075083,35.86487528 140.01152528,35.86493250 140.01293417,35.86520000 140.01293417,35.86529528 140.01357972,35.86516167 140.01360333,35.86525722 140.01386166,35.86535278 140.01461278,35.86429694 140.01462583,35.86427778 140.01486055,35.86426833 140.01501333,35.86425889 140.01525973,35.86416361 140.01555334,35.86406806 140.01587028,35.86385694 140.01623694,35.86380917 140.01628388,35.86373278 140.01631917,35.86353222 140.01667139,35.86340805 140.01682417,35.86322694 140.01693555,35.86316084 140.01700666,35.86314416 140.01708806,35.86315250 140.01755639,35.86322694 140.01782111,35.86322694 140.01799417,35.86318584 140.01833000,35.86319417 140.01861500,35.86330056 140.01896416,35.86323416 140.02067417,35.86321750 140.02111194,35.86319444 140.02131333,35.86309500 140.02160861,35.86308695 140.02191388,35.86297917 140.02212778,35.86289639 140.02222972,35.86286333 140.02235167,35.86280528 140.02265722,35.86276389 140.02275861,35.86266444 140.02290139,35.86254056 140.02313527,35.86232528 140.02336945,35.86221778 140.02355277,35.86207056 140.02369667,35.86184722 140.02385944,35.86170639 140.02409361,35.86164000 140.02433806,35.86162361 140.02453139,35.86162361 140.02465972,35.86162361 140.02477583,35.86158583 140.02497111,35.86151111 140.02519528,35.86142833 140.02569361,35.86128778 140.02596861,35.86130444 140.02613139,35.86139528 140.02627388,35.86148638 140.02637584,35.86194166 140.02654889,35.86196278 140.02658166,35.86183861 140.02672417,35.86177195 140.02697250,35.86161167 140.02713195,35.86127584 140.02745722,35.86108528 140.02768111,35.86075945 140.02824833,35.86041972 140.02889944,35.86018806 140.02939834,35.86007222 140.02954083,35.85991500 140.02986667,35.85979084 140.03027389,35.85974778 140.03043417,35.85966500 140.03052555,35.85957389 140.03056638,35.85936666 140.03061722,35.85924249 140.03073945,35.85915139 140.03095333,35.85914333 140.03120778,35.85918472 140.03143139,35.85923445 140.03159445,35.85940834 140.03173694,35.85942472 140.03179806,35.85939166 140.03197111,35.85936666 140.03232722,35.85932500 140.03262528,35.85917583 140.03312416,35.85914278 140.03343972,35.85914667 140.03358667,35.85915111 140.03375527,35.85911778 140.03422333,35.85915111 140.03449833,35.85920056 140.03467139,35.85928333 140.03486472,35.85927528 140.03500722,35.85922527 140.03520861,35.85921694 140.03540195,35.85918417 140.03547333,35.85908472 140.03554472,35.85901861 140.03565667,35.85898556 140.03580916,35.85900194 140.03597222,35.85909305 140.03612500,35.85934139 140.03650167,35.85954000 140.03637945,35.85974695 140.03656250,35.86010306 140.03667445,35.86048667 140.03682277,35.86070194 140.03730111,35.86078472 140.03735223,35.86090889 140.03739278,35.86101667 140.03757611,35.86116778 140.03784278,35.86128361 140.03799555,35.86134167 140.03826027,35.86143278 140.03844361,35.86163139 140.03882000,35.86168111 140.03905417,35.86167278 140.03924750,35.86163139 140.03936972,35.86149889 140.03951222,35.86145750 140.03959361,35.86145750 140.03973611,35.86149083 140.03987861,35.86172250 140.04018417,35.86176055 140.04069611,35.86177694 140.04113389,35.86171917 140.04166306,35.86166112 140.04185639,35.86161973 140.04190722,35.86145417 140.04197862,35.86134528 140.04217972,35.86133833 140.04219250,35.86126361 140.04233500,35.86121389 140.04239611,35.86111500 140.04244695,35.86098833 140.04287194,35.86093056 140.04305528,35.86094694 140.04315722,35.86111250 140.04334027,35.86110444 140.04339139,35.86103805 140.04365583,35.86104639 140.04386973,35.86095527 140.04403222,35.86074833 140.04424611,35.86044194 140.04486722,35.86005139 140.04585777,35.85985306 140.04636667,35.85976195 140.04652972,35.85960472 140.04669250,35.85948056 140.04687583,35.85939778 140.04707916,35.85925861 140.04728417,35.85907639 140.04745722,35.85861278 140.04810861,35.85838111 140.04830195,35.85826278 140.04842027,35.85812222 140.04857305,35.85769167 140.04896000,35.85743612 140.04913389,35.85666611 140.04977528,35.85661639 140.04987695,35.85657333 140.05002639,35.85629194 140.05033194,35.85618639 140.05048111,35.85606861 140.05064723,35.85592778 140.05099333,35.85577028 140.05150250,35.85560472 140.05210306,35.85556277 140.05240111,35.85557916 140.05265556,35.85562055 140.05298139,35.85561222 140.05403973,35.85552917 140.05665889,35.85547945 140.05915139,35.85544639 140.05939583,35.85540500 140.05948750,35.85534694 140.05951778,35.85527250 140.05950778,35.85520639 140.05943638,35.85508194 140.05916166,35.85501584 140.05903944,35.85497445 140.05902917,35.85475916 140.05916166,35.85475083 140.05920222,35.85476750 140.05929389,35.85502417 140.05964000,35.85533861 140.05981306,35.85538833 140.05987417,35.85541333 140.06010833,35.85539222 140.06056445,35.85537555 140.06074777,35.85539222 140.06103278,35.85537555 140.06128694,35.85529277 140.06157194,35.85529277 140.06166361,35.85536722 140.06179611,35.85523472 140.06211167,35.85374639 140.06315667,35.85307639 140.06361611,35.85297694 140.06354500,35.85261278 140.06374861,35.85258667 140.06375722,35.85221528 140.06388083,35.85204139 140.06401333,35.85194361 140.06414639,35.85181138 140.06437055,35.85175333 140.06444166,35.85115723 140.06495056,35.85104945 140.06510305,35.85097500 140.06530666,35.85081944 140.06536306,35.85067778 140.06539666,35.85035944 140.06547472,35.85020972 140.06542945,35.85012500 140.06531167,35.85009083 140.06506028,35.85006527 140.06467222,35.85003972 140.06449389,35.84990334 140.06428416,35.84988639 140.06413750,35.84992027 140.06381250,35.84990334 140.06369695,35.84983916 140.06362778,35.84971361 140.06359139,35.84966916 140.06353694,35.84961750 140.06335500,35.84955833 140.06324584,35.84946194 140.06310361,35.84944722 140.06302194,35.84967667 140.06282166,35.84970611 140.06274000,35.84971361 140.06260389,35.84969139 140.06246750,35.84966167 140.06234000,35.84958028 140.06224916,35.84925500 140.06199444,35.84917361 140.06188555,35.84909222 140.06164889,35.84888416 140.06129139,35.84874139 140.06107195,35.84853612 140.06095139,35.84851834 140.06089638,35.84851834 140.06080861,35.84853612 140.06067695,35.84854528 140.06064416,35.84852723 140.06056722,35.84842917 140.06044694,35.84821500 140.06019445,35.84807222 140.05997528,35.84794722 140.05982166,35.84769888 140.05929305,35.84742222 140.05882139,35.84727944 140.05850305,35.84710111 140.05816333,35.84708334 140.05807556,35.84710111 140.05792195,35.84709305 140.05783611,35.84705444 140.05775055,35.84693056 140.05766500,35.84677583 140.05719889,35.84665223 140.05676111,35.84660583 140.05647583,35.84660278 140.05646861,35.84649139 140.05619389,35.84647611 140.05611777,35.84649139 140.05596555,35.84650694 140.05586139,35.84666167 140.05566139,35.84670806 140.05553778,35.84670806 140.05543306,35.84668473 140.05532916,35.84664194 140.05529167,35.84653222 140.05529917,35.84651389 140.05527667,35.84652000 140.05520167,35.84653833 140.05512666,35.84661750 140.05507417,35.84662361 140.05503666,35.84658694 140.05497667,35.84637361 140.05497667,35.84617833 140.05490917,35.84617222 140.05486417,35.84620889 140.05477389,35.84664806 140.05448889,35.84673972 140.05439139,35.84775750 140.05363278,35.84781639 140.05351250,35.84787444 140.05343584,35.84793945 140.05333584,35.84814083 140.05316333,35.84829945 140.05300583,35.84836056 140.05297584,35.84842778 140.05301333,35.84850694 140.05305083,35.84857417 140.05302833,35.84861694 140.05297584,35.84867778 140.05282583,35.84873278 140.05275084,35.84907667 140.05243083,35.84897917 140.05237834,35.84895473 140.05231833,35.84898528 140.05223584,35.84905222 140.05215333,35.84946722 140.05171083,35.84961472 140.05172111,35.84974278 140.05165361,35.84980389 140.05157861,35.84985277 140.05150361,35.84991972 140.05145111,35.85001139 140.05142861,35.85011027 140.05134167,35.85029333 140.05108667,35.85034833 140.05096666,35.85036056 140.05087639,35.85037278 140.05074888,35.85040945 140.05065889,35.85048861 140.05057639,35.85075111 140.05028389,35.85133250 140.04972028,35.85160084 140.04942000,35.85173500 140.04933750,35.85202389 140.04922833,35.85209722 140.04918333,35.85215806 140.04907861,35.85231056 140.04880111,35.85249500 140.04856750,35.85256805 140.04849250,35.85272666 140.04841000,35.85287306 140.04821500,35.85291583 140.04811750,35.85294638 140.04803500,35.85302584 140.04795222,35.85328194 140.04767472,35.85363445 140.04727166,35.85396389 140.04700917,35.85416055 140.04680945,35.85417278 140.04675694,35.85416055 140.04665195,35.85416055 140.04659194,35.85418500 140.04653194,35.85424750 140.04644528,35.85452667 140.04605944,35.85476000 140.04577334,35.85509555 140.04539833,35.85513222 140.04529333,35.85512611 140.04518083,35.85516250 140.04511333,35.85529667 140.04505334,35.85535167 140.04498584,35.85545417 140.04475195,35.85557611 140.04455694,35.85574695 140.04433194,35.85606416 140.04404666,35.85633528 140.04382834,35.85675611 140.04335584,35.85691444 140.04301083,35.85701833 140.04286833,35.85707305 140.04271056,35.85725000 140.04242555,35.85725000 140.04238083,35.85724389 140.04211084,35.85730611 140.04183111,35.85734278 140.04156111,35.85737916 140.04139611,35.85742195 140.04128361,35.85755611 140.04105111,35.85757444 140.04099861,35.85757444 140.04096111,35.85754389 140.04087861,35.85753194 140.04081834,35.85755611 140.04060083,35.85734889 140.03961250,35.85725722 140.03925972,35.85718417 140.03904973,35.85705583 140.03885472,35.85695834 140.03874222,35.85683639 140.03856222,35.85678750 140.03838222,35.85671305 140.03797500,35.85665194 140.03784750,35.85658500 140.03775750,35.85655444 140.03761500,35.85655444 140.03751750,35.85659723 140.03734500,35.85659667 140.03733555,35.85659111 140.03724778,35.85656056 140.03717278,35.85649945 140.03714278,35.85631028 140.03714278,35.85626167 140.03712028,35.85613333 140.03685000,35.85597917 140.03664277,35.85575945 140.03635000,35.85566778 140.03614000,35.85553361 140.03581000,35.85541362 140.03547834,35.85526111 140.03523833,35.85498666 140.03499111,35.85406667 140.03345472,35.85374500 140.03243000,35.85377000 140.03232889,35.85376361 140.03219528,35.85365500 140.03172444,35.85363583 140.03152028,35.85365500 140.03108861,35.85366778 140.03101028,35.85375083 140.03083750,35.85379528 140.03070417,35.85387806 140.03029611,35.85391778 140.03004250,35.85395583 140.02996416,35.85437083 140.02959528,35.85464528 140.02929722,35.85478778 140.02920222,35.85499194 140.02921028,35.85517084 140.02920222,35.85537500 140.02913944,35.85583388 140.02891916,35.85600000 140.02878583,35.85617222 140.02861305,35.85625528 140.02845611,35.85638277 140.02822084,35.85645944 140.02814222,35.85656805 140.02805583,35.85678500 140.02797750,35.85694694 140.02784306,35.85717028 140.02765473,35.85747000 140.02748222,35.85765528 140.02728584,35.85782000 140.02702583,35.85795417 140.02682167,35.85805639 140.02671972,35.85822861 140.02658639,35.85829250 140.02650777,35.85841362 140.02620166,35.85863722 140.02599778,35.85875834 140.02579389,35.85893611 140.02528167,35.85910056 140.02485472,35.85911444 140.02481861,35.85910805 140.02463806,35.85898695 140.02447333,35.85874444 140.02421417,35.85870639 140.02415944,35.85875028 140.02389666,35.85878723 140.02370305,35.85884000 140.02330389,35.85887583 140.02295306,35.85893167 140.02260944,35.85894556 140.02244639,35.85892472 140.02230028,35.85893861 140.02219722,35.85902945 140.02183639,35.85905028 140.02171611,35.85904333 140.02162167,35.85900861 140.02149278,35.85893861 140.02141556,35.85884083 140.02138112,35.85877805 140.02138112,35.85876000 140.02121250,35.85873223 140.02100778))', 6668) tega;

結果:
f:id:sakaik:20180903001712p:plain



 「Zoom」機能が、これ以上広げられない(=小さく表示できない)とか、イマイチ使い勝手がよくわからない感じではありますが、とりあえず、千葉県の我孫子と柏の間にある「手賀沼」をご存じの方には、ちょっと南北方向にひしゃげていますがそれっぽい形だなーと思っていただけたかと思います。(本当はこのデータ、JGD2000なのですが、JGD2000とJGD2011はこの規模のものをあらわす上ではほとんど変わらないので、今回はうっかりw JGD2011でやりました)
 あ、はじめて見た方はびっくりされたかもしれませんが、地図の「形」って、直線の集合であらわすので、こういう分量のデータを扱うんです。

データ:国土数値情報ダウンロードサービス http://nlftp.mlit.go.jp/ksj/index.html より
手賀沼:(地図データ (c)2018, Google, ZENRIN)
f:id:sakaik:20180903004844p:plain

MySQLの ST_SRS の件数が環境によって異なる件

 MySQLGIS 機能で使用する INFORMATION_SCHEMA の ST_SPATIAL_REFERENCE_SYSTEMS テーブル(ビュー)の件数が、環境によって異なることがわかりました。
 先日の、ClubMySQL #4 の発表中に「ものすごくたくさんの定義があるんですよ」と話したことから、何人かの方が早速手元の MySQL 8.0 で 同テーブルの COUNT(*) を取ってくれたのですが、人によって、

mysql> select count(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| count(*) |
+----------+
|     5108 |
+----------+

だったり、

mysql> select count(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| count(*) |
+----------+
|     5152 |
+----------+

だったり。


当初は、
 MySQL 8.0.11: 5108件
 MySQL 8.0.12: 5152件 
なのだろう、と軽く考えていたのですが、家に帰ってから自分の環境で確認してみたところ、MySQL 8.0.12 なのに 5108件しかありませんでした。

 そんなわけで、OSやインストール方法などにより異なるのではないかとの仮説を立てて、いくつか試したところ、まぁたぶんこうかな、という仮結論に達したので、本エントリに。

 確認したのは、WindowsMySQL Installer / Linux のバイナリインストール/同 yum インストール。

結論として、各バージョンを素の状態でインストールした場合は、
 MySQL 8.0.11: 5108件
 MySQL 8.0.12: 5152件 
ということで、間違いなさそう。

MySQL 8.0.12 なのに 5152件しかない事象は、yum で 8.0.11 をインストールした環境で、 yum update により 8.012 に上げたケース。update後に手動で動かすべきスクリプトがあるのかな、とマニュアルを軽く探してみましたが、そういう記述も見つからず、もしかして bugs 報告相当の事象?とも思ったのですが、ちょっと自信がありません。
 他のパッケージ管理システムの場合だとどうなんですかね。aptとかsuseとか。どなたか試してみていただけませんか。8.0.11を入れてから update する、という流れで、前後の ST_SPATIAL_REFERENCE_SYSTEMS の件数を確認すれば良いです。
 ちなみに、手元のWindowsMySQL Installer で 8.0.11 を入れてあった環境を、同じく MySQL Installer で最新化して 8.0.12 にしたものだったと記憶しているので、こちらが 5152件だったというのは、WIndows版のアップデートでは ST_SRSテーブルの件数を最新化する仕組みがちゃんと入っているってことなんですよね。


 ちなみに、増えた44個は、こんな感じ。GEOGCSが4つと、あとは投影座標系(PROJCS)ですね。

| VN-2000 / TM-3 zone 481                   |   5896 |
| VN-2000 / TM-3 zone 482                   |   5897 |
| VN-2000 / TM-3 zone 491                   |   5898 |
| VN-2000 / TM-3 Da Nang zone               |   5899 |
| S-JTSK [JTSK03]                           |   8351 |(GEOGCS)
| S-JTSK [JTSK03] / Krovak                  |   8352 |
| S-JTSK [JTSK03] / Krovak East North       |   8353 |
| NAD83 / NCRS Las Vegas (m)                |   8379 |
| NAD83 / NCRS Las Vegas (ftUS)             |   8380 |
| NAD83 / NCRS Las Vegas high (m)           |   8381 |
| NAD83 / NCRS Las Vegas high (ftUS)        |   8382 |
| NAD83(2011) / NCRS Las Vegas (m)          |   8383 |
| NAD83(2011) / NCRS Las Vegas (ftUS)       |   8384 |
| NAD83(2011) / NCRS Las Vegas high (m)     |   8385 |
| NAD83(2011) / NCRS Las Vegas high (ftUS)  |   8387 |
| GDA94 / WEIPA94                           |   8391 |
| ETRS89 / Gauss-Kruger CM 9E               |   8395 |
| Hong Kong Geodetic CS                     |   8427 |(GEOGCS)
| Macao 1920                                |   8428 |(GEOGCS)
| Macao 2008                                |   8431 |(GEOGCS)
| Macao 1920 / Macao Grid                   |   8433 |
| Tananarive / Laborde Grid                 |   8441 |
| RGTAAF07 / UTM zone 53S                   |   8455 |
| RGTAAF07 / UTM zone 54S                   |   8456 |
| NAD83(2011) / KS RCS zone 1               |   8518 |
| NAD83(2011) / KS RCS zone 2               |   8519 |
| NAD83(2011) / KS RCS zone 3               |   8520 |
| NAD83(2011) / KS RCS zone 4               |   8521 |
| NAD83(2011) / KS RCS zone 5               |   8522 |
| NAD83(2011) / KS RCS zone 6               |   8523 |
| NAD83(2011) / KS RCS zone 7               |   8524 |
| NAD83(2011) / KS RCS zone 8               |   8525 |
| NAD83(2011) / KS RCS zone 9               |   8526 |
| NAD83(2011) / KS RCS zone 10              |   8527 |
| NAD83(2011) / KS RCS zone 11              |   8528 |
| NAD83(2011) / KS RCS zone 12              |   8529 |
| NAD83(2011) / KS RCS zone 13              |   8531 |
| NAD83(2011) / KS RCS zone 14              |   8533 |
| NAD83(2011) / KS RCS zone 15              |   8534 |
| NAD83(2011) / KS RCS zone 16              |   8535 |
| NAD83(2011) / KS RCS zone 17              |   8536 |
| NAD83(2011) / KS RCS zone 18              |   8538 |
| NAD83(2011) / KS RCS zone 19              |   8539 |
| NAD83(2011) / KS RCS zone 20              |   8540 |

インストールメモ:

# yum install wget -y
# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
# yum localinstall mysql80-community-release-el7-1.noarch.rpm -y
# yum install mysql-server -y

# systemctl start mysqld
# cat /var/log/mysqld.log | grep password
$ mysql -uroot -p
--
mysql> ALTER USER root@localhost IDENTIFIED BY 'MySQL8.0';
--
旧バージョンを入れるときは
# yum install mysql-community-server-8.0.11-1.el7
(以前に他のバージョンが入っていた場合はデータディレクトリを削除しておく)


追記
 @RKajiyama さんから、「mysql_upgrade を実行したらどうだ?」という情報をいただきました。

 試してみたところ、5152件と正しい件数になりました。
yumで 8.0.11 をインストール → 件数確認 → yum update で 8.0.12 に上げる → 件数確認 → mysql_upgrade を実行 → 件数確認)
あとは、これを手動でやるのが「正しい手順」なのか、本来ならこれが yum update 時に自動で実行されているべきなのか、という点ですね。

 以下参考までに実行記録:

MySQL 8.0.11のインストール@awsの t2.micro

sudo yum -y remove mariadb-libs
yum install wget -y
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum localinstall mysql80-community-release-el7-1.noarch.rpm -y
yum install mysql-community-server-8.0.11-1.el7 -y

systemctl start mysqld
cat /var/log/mysqld.log | grep password

mysql -uroot -p
--
mysql> ALTER USER root@localhost IDENTIFIED BY 'MySQL8.0';
mysql> use INFORMATION_SCHEMA
mysql> SELECT COUNT(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| COUNT(*) |
+----------+
|     5108 |
+----------+


yumでの 8.0.12へのアップデート:

yum update mysql-server
(略)
+----------+
| COUNT(*) |
+----------+
|     5108 |
+----------+

mysql_upgrade 実行

# /bin/mysql_upgrade -uroot -p
Enter password: 
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv                                 OK
mysql.component                                    OK
mysql.db                                           OK
mysql.default_roles                                OK
mysql.engine_cost                                  OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.global_grants                                OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.password_history                             OK
mysql.plugin                                       OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.role_edges                                   OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
The sys schema is already up to date (version 2.0.0).
Checking databases.
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.
(略)
+----------+
| count(*) |
+----------+
|     5152 |
+----------+


追記yum update で MySQL サーバが再起動された後、手動で mysql_upgrade を実行する必要があるようです。(8.0.12時点)


https://dev.mysql.com/doc/refman/8.0/en/updating-yum-repo.html

ClubMySQL #4 で『周辺知識から理解するMySQL の GIS機能』の話をしました

 第4回目となる ClubMySQL にて、『周辺知識から理解するMySQLGIS機能』と題したお話をさせていただきました。
ClubMySQLは、ひとりの話をじっくりと聞くというコンセプトで開催している、セミナー形式のイベントです。ひとり30分程度までの持ち時間で何人かの話を順に聞くスタイルの勉強会に参加/開催 してきた中で、「もっとたっぷり時間を使ってじっくりと聞かせてもらいたいなぁ」と思うことがあったことから、このスタイルでの開催をはじめたので、もともとは当然、自分以外のいろんな人にお話をしてもらうつもりでしたから、まさか自分で話す機会が来るとは思ってもいませんでした。まさに自作自演の回。

clubmysql.connpass.com


 この1年ほど、MySQL 8.0 で本気を出されたGIS機能について、大変興味を持ってきました。興味の方向がナナメ上のほうに行ってしまうクセのある私は、緯度・経度に関連して測量や三角点に興味を持ったり、地球の形に興味を持ったり、伊能忠敬の記念館に足を運んだり、何故か江戸の古地図を買ってしまったり等、全然MySQLのコマンドをたたくところに戻ってこられなくて困ってしまいましたが、まぁ基本的にDBMSの仕事としては究極的には「値を登録できます。取り出せます」というだけの話ですので、その値がどのような意味を持っているのか、どのような使われ方をするのか、という点を理解することは、よりよくDBMSを利用するために必要不可欠な知識であると思っています。

 という言い訳を用意して、興味全開でこの一年で得た理解、知識、体験を全部吐き出す機会がほしくなり、自分の主催イベントで、自分でしゃべらせていただくことにしました。今回話した内容は、今でこそ多くのMySQLユーザにとって目新しく新鮮なものですが、一年後には誰もが知っている「あたりまえ」の事になっていてほしい、今回はそんな思いで挑みました。

 うまく伝わった手応えを感じた部分、上手に説明できなくて申し訳なく思う部分、いろいろありましたが、「第一歩」としての情報提供という意味では、少しはお役に立てたかなという気はしています。色々な技術を習得されてきた皆さんならお気づきのことと思いますが、さらっと当然のように説明した部分にも、その理解に至るまでに相当の苦難(笑)を乗り越えて得たものもあります。皆さんには、その部分はさらっと乗り越えていただき、その先にあるもっと面白い部分をぜひ、試していただいて、わたしにも教えてください。なんたって、今回の講演のテーマが「詳しい人が増えて俺に教えてくれる」ですから!




 最近のこういったイベントでの私のセミナーは、資料を簡略化する向きなのですが、今回は資料そのものを残すことを大きな目的のひとつとして、結構頑張って作り込みました。当日発表したものに、少々の修正と、いくつかの説明や情報を加えたものを公開したので、ご覧ください。私の勘違いも多く含まれているかと思います。お気づきの点があれば、ご自身のブログやその他の方法でご指摘、ご説明賜れましたら幸いです。

www.slideshare.net


 話をしていて、とにもかくにも楽しかったです。お聞きくださった皆さん、どうもありがとうございました。伝えたいことが多すぎて、話題があちこち行きましたが、位置の情報を扱うことの楽しさが伝わったらいいなぁ。私自身もまだまだ「楽しそう」というところまでなので、「本当に使ってみて楽しい」のステージへ、はやく行きたいものです。
 会場を提供くださった Yahoo! Japan さま、どうもありがとうございました。ゆったりと素敵な空間でした。イベントでなくても、普通に LODGE も利用させていただきたいな、と感じました。
 ClubMySQL、次回開催は未定ですが、また(私以外のスピーカーで)開催を続けたいと考えています。開催案内が目にとまったとき、ご興味のあるテーマでしたらぜひまたご参加ください。


 講演の中で「みんなもどんどん試して、どんどん情報発信(交換)しましょう」と呼びかけたところ、当日会場から質問もあった内容について、@atsuizo さんが早速、MySQL Workbench での GIS 情報の動作(表示)について試して、ブログを書いてくださいました。嬉しい!ありがとうございます!私も試す!
atsuizo.hatenadiary.jp

id:next4us-ti さんも早速 Workbench 試してくださいました!
next4us-ti.hatenablog.com

id:hmatsu47 さんが、とぅぎゃってくださいました!
togetter.com

id:hmatsu47 さんによる今回のイベントのまとめ:
hmatsu47.hatenablog.com
→一点私の説明不足があってですね。「子午線」自体は、子と午を結ぶ線なので無限にあるんです。グリニッジとかパリとかボゴタとか話したのは「本初子午線」といって「ゼロ度をどこに定めますか」というお話でした。

id:dupont_kedama さんは、公開されている位置情報データをMySQLに取り込む方法について:
dupont.hatenablog.jp


 楽しんで開催して、楽しんでしゃべってきたつもりだったのですが、やはり何かと緊張したりドタバタしたりしていたようで、あろうことか、今回の会に関する写真を一切撮っていませんでした(^^; 代わりに手持ちの本(未読のものもあり)でも。
f:id:sakaik:20180902005449j:plain


 そうそう。紹介しようと思っていて忘れていた本をひとつ。剱岳という難所に三角点を設置せよ、と命じられた主人公が苦労を重ねてなんとかたどり着くというお話。三角点の選点、設置、そして測量に至るまで、どのような苦労があるのか。ぐいぐい引き込まれました。

新装版 劒岳 ―点の記 (文春文庫)

新装版 劒岳 ―点の記 (文春文庫)

伊能忠敬記念館@さわら に行ってきた

 8月のとある日*1、一日結構自由になる日ができたので、千葉県は さわら にあります「伊能忠敬記念館」へと足を運んでみました。

伊能忠敬記念館:香取市ウェブサイト:香取市観光サイト

 MySQL 8.0 でGIS機能に本気を出したように見えたことをきっかけとして、位置を特定する方法、そして位置の集合体である地図や測量が気になってしまい、今回の訪問と相成った次第。県内にあるので比較的行きやすいだろうと思いながらも、なかなか機会のなかった伊能忠敬記念館。行こうと思って調べたら、念頭にあったものよりも少し遠かったです。というのも、、えぇと佐原のみなさんすいません、佐倉のあたりだと思い込んでいたのです。なんとなく「さ○ら だったよなぁ」くらいの記憶で。でも今回ちゃんと覚えた!
 我孫子からは車で1時間強。まぁ1時間半見ておくとゆとりを持てます。

 駐車場に車を停めて記念館に向かうと、まず一等水準点がお出迎え。あっ、忠敬先生がお出迎えというべきところでしょうか。でも私の目には、こちらしか目に入りません。ほら、マチナカ歩いていて飲食店がたくさんあってもラーメン屋さんしか目に入らないじゃないですか。あれみたいなものだと思います。ちなみにこの水準点、平成14年に移設されてきたものなので、それほど歴史的なすごさがあるわけではないです。あと、一等三角点(約40kmごと)と異なり、一等水準点はたくさん(約2kmごと)ありますので、まぁそういうものです。
f:id:sakaik:20180829121142j:plain

 忠敬記念館入り口。500円を払って入館します。
f:id:sakaik:20180829121442j:plain

 展示場内は写真撮影禁止なのは残念でした。いろいろ思い出に撮って持ち帰りたい物があったのですが。
なのでここからしばらくは、言葉のみで。

 展示場は、大きめの空間がひとつと、小部屋がひとつ。天井は結構高くて、大きな地図が壁に掛けてあるのを見ることができました。どれがホンモノでどれがレプリカなのかがよくわからなかったので、「二分の一に縮尺しています」的な説明があるものを除いてぜんぶホンモノだと思って眺めてきましたが、とにかく素晴らしい。展示は「歴史・背景」「道具」「成果」の3つに大きく分けられると言ってよいかと思います。
 最初に私の目を惹いたのは、忠敬が家から職場までの距離を測った図。何度も角を曲がりながらそれぞれの距離を計測し、その直線距離を求めた、あれです。想像していた以上に細かく曲がりくねった道のりで、かつ、繊細に書き入れられた文字を眺めながら、思わずため息が漏れました。職場から離れた方角に向かってもうひとつのループを描いており、それが補正なのかなと妄想したりして。たぶん、この1枚の前で5分くらい滞在(笑)。

 実物を目にする利点は、その大きさや質感を感じられること。道具にしても成果地図にしても、かなり大きく、かなり繊細。何枚にも分かれた地図のつなぎ部分の工夫も面白い。割り印のようなコンパスローズ柄が合うようにつなげるのですが、必ずしも縦方向だけ、横方向だけ、ではなく、紙にスリットを入れることで少し重ね合わせて縦横で合致させられるように工夫してあるのです。
 半円方位盤やわんか羅針などは、方位磁石で北をとりながら、スリットを覗いて遠点の方角を読み取るものなのですが、このスリットの感覚などは、実物を見ることでようやくイメージが自分の中にしっかりできると言って良いでしょう。

 そんなこんなで、決して広い記念館ではないのですが、見学時間は通常20分~30分程度と言われている中で、たっぷり1時間以上かけて見学してきました。とにかく、興奮しっぱなしです。

 記念館を出て少しのところに、伊能忠敬が育った家があります。
f:id:sakaik:20180829132614j:plainf:id:sakaik:20180829132706j:plain

 敷地内の建物。これが以前は記念館だったらしく、少し前までまだ看板がかかっていたそうなのですが、さすがに2018年。もう看板は外されていました。
f:id:sakaik:20180829132635j:plain


 その後は、せっかく来たので、さわらの町歩きをしばらく。ゆったりしたとても良い雰囲気の町でした。こちらについては別日記のほうにまた書きたいと思います。
f:id:sakaik:20180829132429j:plain

*1:と言いつつ、この日記の便宜上の日付がその「とある日」だったりしますが

FOSS4G TOKAI 2018 に行ってきた話

 FOSS4G TOKAI 2018 に行ってきました。MySQL 8.0 でのGIS機能に興味を持ったことが高じて、週末にまったくアウェイの環境に行くなんて、どうかしている。
 地図を作っている人、地図の上にいろんな情報を乗っける人、そういう物を作っている人、そういう情報を使ってサービスをしている人。様々な立場でGISに関わっている人がたくさん参加されていて、たくさんの発表を聞かせていただきました。
foss4g-tokai.github.io


 今回の参加の目的は、「なんとなく~」という部分(約8割)を覗くと、残る部分としては第一に、この分野の雰囲気を感じてみたかったこと。どういう話題がみんなの関心なのか、トレンドなのか、それらを感じることでした。第2には、オンラインでちょっとだけコメントをやりとりさせていただいた方や、イベントや資料をリツイートしてくれた方と会ってみたいと思ったこと。
 今回、この両方ともがパーフェクトに満たされ、また、期待以上の情報も出会いもあって、日帰り弾丸参加をした甲斐がありました。よかった。こういう素敵な体験をしてしまうと、岡山にもうっかり行きそうで、怖いですw

 参加しての全体の印象としては、「レイヤが高いな」ということでした。データ自体をどこにどのような形で格納しておくのか、という話は「承前」として、その上のレイヤでどう活用するか、どう見せるかというのが関心の対象なのかなと感じました。
 一点、とても印象に残った発表があって、それは中部大学の高橋さんの消防業務に生かすGISをテーマとしたお話。緊張しているのが伝わってくるような固い感じの中に、自分はこれをやりたい、そして伝えたい、という強い思いがあり、応援したくなりました。やりたいことを持ってさえいれば、実現方法はなんとでもなるので、本当に強いものです。

 MySQLに直接関わる話はほとんどないなれども、どんなデータを扱いたいのかの実例にたくさん触れられたのは、お仕事に喩えるといわば「要件定義前の御用聞き」に相当するもので、単に言われた数字を登録するだけのDB屋にならないために、たいへん良い経験になりました。


 懇親会の際にもたくさんの人に、どのように数字を扱っているのかを教えていただきました。



 というあたりで品川に着きそうなので、何を言いたいのかまとまらない感想文になってしまいましたが、このへんで。 セミナーでお話を聞かせてくださった皆様、休憩時間や懇親会でお話をさせていただいた皆様、どうもありがとうございました。まだしばらくMySQLGISまわりで騒ぎ続けると思いますので、今後とも色々おしえてください! 今日は楽しかったです!



追記:Togetterにまとめてくださっていました:
togetter.com