Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

MySQL 8.0で強化されたGIS機能のご紹介と周辺ツールとの連携について

612 visualizaciones

Publicado el

2018年11月10日に開催された「FOSS4G 2018 Tokyo コアデイ」での発表資料です。

FOSS4G 2018 Tokyo コアデイ
https://www.osgeo.jp/events/foss4g-2018/foss4g-2018-tokyo/foss4g-2018-tokyo-coreday

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

MySQL 8.0で強化されたGIS機能のご紹介と周辺ツールとの連携について

  1. 1. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | MySQL 8.0で強化されたGIS機能のご紹介と 周辺ツールとの連携について Yoshiaki Yamasaki / 山﨑 由章 MySQL Global Business Unit MySQL Senior Sales Consultant updated: 2018/11/10
  2. 2. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。 また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはでき ません。以下の事項は、マテリアルやコード、機能を提供することをコミットメントするも のではない為、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリースおよび時期については、 弊社の裁量により決定されます。 2
  3. 3. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. はじめに 3
  4. 4. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 今日伝えたいこと • MySQLにもGIS機能があります!積極的に開発しています!! • ご意見下さい! – 本日は終日会場にいます – 懇親会も参加します • 試してみて気づいた点があれば、是非フィードバック下さい! – フィードバックできるページ • MySQL Bugs https://bugs.mysql.com/ – バグ報告だけでなく、機能追加リクエストも受け付けています 4
  5. 5. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 今日伝えたいこと • GDAL 2.3.2がリリースされ、ogr2ogrを使用してMySQL 8.0へ シェープファイルをインポートできるようになりました – ですが、まだ課題もあります • 周辺ツールに対するフィードバックも是非お願します! 5
  6. 6. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. MySQLのGIS機能の歴史 6
  7. 7. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 7 MySQLの歴史 4.0 全文検索 (MyISAM) 複数テーブルUPDATE/DELETE 組み込みライブラリ型サーバ OracleMySQL Sun 3.23 MyISAM InnoDB レプリケーション 5.1 プラグガブル・ ストレージエンジン・ アーキテクチャ パーティショニング タスクスケジューラ 5.6 全文検索(InnoDB) memcached API UNDO表領域 Global Transaction ID マルチスレッドスレーブ オンラインALTER TABLE トランスポータブル表領域 5.5 InnoDBがデフォルトに 準同期型レプリケーション PERFORMANCE_SCHEMA 1.0-3.22以前 ストレージエンジン (ISAM, HEAP) マルチスレッド Windows対応/64bit対応 日本語文字コード (SJIS/UJIS) 5.0 ストアドプロシージャ ストアドファンクション カーソル/トリガ/ビュー XAトランザクション INFORMATION_SCHEMA 4.1 GIS(MyISAM) Unicode対応 サブクエリ CSV, ARCHIVE ndbcluster 1995 2000 2005 2010 2015 5.7 2015年10月21日 GA 全文検索CJK対応/GIS (InnoDB) 新コストモデル オプティマイザ ロスレス レプリケーション マルチソース レプリケーション グループ レプリケーション セキュリティ強化 データディクショナリ NoSQLオプション ・ 1995年:スウェーデンにてMySQL AB設立 ・(2005年:オラクルがInnobase Oyを買収) ・ 2008年:Sun MicrosystemsがMySQL ABを買収 ・ 2010年:オラクルがSun Microsystemsを買収 8.0 2018年4月19日 GA トランザクショナルDD MySQLドキュメントストア Unicode 9.0サポート 国ごとの照合順序を追加 CTE、Window関数 GIS機能の拡張 (InnoDB)
  8. 8. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GIS機能の歴史 • MySQL 5.7 – Boost.GeometryというC++のオープンソースライブラリを採用して独自実装をやめ、 InnoDBでGIS関連機能を再実装した • geometryデータ型 • Spatialインデックス • Spatial関数(使える関数の種類も増加) • GeoHashサポート • GeoJSONサポート ※Boost.Geometryコミュニティとも活発に交流し、MySQLチームから Boost.Geometryへのコントリビュートも行っている 8
  9. 9. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GIS機能の歴史 • MySQL 8.0 – OpenGIS標準準拠 – 演算、データ変換に役立つ各種のSpatial関数の追加 • st_x(geom, x) • st_y(geom, y) • st_srid(geom, srid) – MySQL 5.7で非推奨になった関数の廃止 –Geography サポート • st_distance() 関数 –Spatial Data、Spatial Index、Spatial関数のSRIDサポート 9
  10. 10. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GIS機能の歴史 • MySQL 8.0 – OpenGIS標準準拠 – 演算、データ変換に役立つ各種のSpatial関数の追加 • st_x(geom, x) • st_y(geom, y) • st_srid(geom, srid) – MySQL 5.7で非推奨になった関数の廃止 –Geography サポート • st_distance() 関数 –Spatial Data、Spatial Index、Spatial関数のSRIDサポート 10
  11. 11. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. MySQLは積極的に GIS機能を開発しています!! 11
  12. 12. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GIS機能の紹介 12
  13. 13. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. geometryデータ型 • OpenGISジオメトリモデルに基づいた以下のデータが使用可能 – GEOMETRY、GEOMETRYCOLLECTION – 点:POINT、MULTIPOINT – 線:LINESTRING、MULTILINESTRING – 多角形:POLYGON、MULTIPOLYGON ※GEOMETRYには、POINT、LINESTRING、POLYGONを格納可能 ※GEOMETRYCOLLECTIONには、MULTIPOINT、MULTILINESTRING、MULTIPOLYGONを 格納可能 13
  14. 14. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Spatial関数 • ジオメトリデータを扱える各種の関数 • 例 – ST_Distance() • 2つのジオメトリを入力し、2地点間の距離を出力 – ST_Distance_Sphere() • 2つのジオメトリを入力し、2地点間の最小球面距離を出力 – ST_Contains() • あるジオメトリに別のジオメトリが含まれているかどうかを判定する • MySQL 8.0で使えるSpatial関数一覧 – MySQL 8.0 Reference Manual / ... / 12.15.1 Spatial Function Reference https://dev.mysql.com/doc/refman/8.0/en/spatial-function-reference.html 14
  15. 15. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GeoHash • 経緯度の情報を文字列化したもの – 例:青山OMセンター(経度:139.718490、緯度:35.671497)のGeoHash ⇒ xn76gmgcsc10hf7v664d8ebpbpbpbp<<後略>> • 特徴 – 文字列なので、データベースで扱いやすい (インデックスも活用可能) – GeoHashの情報は点ではなく範囲(矩形のエリア)を表す – 文字列の桁数で精度を変えることができる • 10桁を超えると矩形の一辺が1m以下になるので、経緯度の変わりとしても十分利用可能 • 近接エリアの判定等に利用可能 15
  16. 16. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GeoHash • MySQL 5.7以降では、GeoHashを扱うための関数が使用できる – ST_GeoHash():経度、緯度(POINT型のデータでも可)を入力し、GeoHashを出力 – ST_LatFromGeoHash():GeoHashを入力し、経度を出力 – ST_LongFromGeoHash():GeoHashを入力し、緯度を出力 – ST_PointFromGeoHash():GeoHashを入力し、POINT型のデータを出力 16 ※詳細を解説しているマニュアル MySQL 8.0 Reference Manual / ... / 12.15.10 Spatial Geohash Functions https://dev.mysql.com/doc/refman/8.0/en/spatial-geohash-functions.html
  17. 17. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GeoJSON • 空間データを扱うためのフォーマットの一つ • JSONによる表現で空間データを扱える – 例:青山OMセンター(経度:139.718490、緯度:35.671497)のGeoJSONによる表現 ⇒ {"type": "Point", "coordinates": [139.71849, 35.671497]} 17
  18. 18. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GeoJSON • MySQL 5.7以降では、GeoJSONを扱うための関数が使用できる – ST_AsGeoJSON():ジオメトリ型のデータを入力し、GeoJSONデータを出力 – ST_GeomFromGeoJSON():GeoJSONデータを入力し、ジオメトリ型のデータを出力 18 ※詳細を解説しているマニュアル MySQL 8.0 Reference Manual / ... / 12.15.11 Spatial GeoJSON Functions https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html
  19. 19. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. MySQL Workbenchの活用 19
  20. 20. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. MySQL Workbench • 管理ツール • SQLエディタ • Performance Dashboard • Visual Explain • GIS Viewer • ER図作成、フォワード/ リバースエンジニアリング、 など豊富な機能 20 データベースアーキテクト、開発者、DBA のための統合ビジュアルツール 商用版のみの機能: DBドキュメント出力、データモデルの検証、 MySQL Enterprise Backup GUI、MySQL Enterprise Audit GUI
  21. 21. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. "Spatial Viewer" and "Geometry Viewer" • ジオメトリ型のデータを図示可能 21
  22. 22. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 周辺ツールとの連携について 22
  23. 23. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 周辺ツールとの連携について • FOSS4G Hokkaido 2018で、おざきさんに以下の発表をして頂きました – MySQL8.0.11使ってみた SRIDが実装されたと聞いて https://foss4g.hokkaido.jp/2018/data/mysql8011tukattemita.pdf • シェープファイルの取り込み、POINTデータのインサートに以下4つの 方法を試して頂きましたが、いずれもエラーになっていました 1.MySQL Workbench 8.0.11 2.QGIS 2.18.20、3.0.1 3.SQL実行(MySQL Workbenchから 4.org2ogr 23
  24. 24. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 周辺ツールとの連携について • FOSS4G Hokkaido 2018で、おざきさんに以下の発表をして頂きました – MySQL8.0.11使ってみた SRIDが実装されたと聞いて https://foss4g.hokkaido.jp/2018/data/mysql8011tukattemita.pdf • シェープファイルの取り込み、POINTデータのインサートに以下4つの 方法を試して頂きましたが、いずれもエラーになっていました 1.MySQL Workbench 8.0.11 2.QGIS 2.18.20、3.0.1 3.SQL実行(MySQL Workbenchから 4.org2ogr ⇒2.~4.はGDALに依存した問題だったので、githubでissueを登録しました。 また、issueを登録してくれている方がいました。 24
  25. 25. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 関連するissue • ogr2ogr with MySQL 8 #782 https://github.com/OSGeo/gdal/issues/782 • Issue with Mysql import #899 https://github.com/OSGeo/gdal/issues/899 • ogr2ogr with MySQL 8 (Wrong SRID) #905 https://github.com/OSGeo/gdal/issues/905 • ogr2ogr with MySQL 8 (Wrong Axis Order) #906 https://github.com/OSGeo/gdal/issues/906 25
  26. 26. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 関連するissue • ogr2ogr with MySQL 8 #782 https://github.com/OSGeo/gdal/issues/782 • Issue with Mysql import #899 https://github.com/OSGeo/gdal/issues/899 • ogr2ogr with MySQL 8 (Wrong SRID) #905 https://github.com/OSGeo/gdal/issues/905 • ogr2ogr with MySQL 8 (Wrong Axis Order) #906 https://github.com/OSGeo/gdal/issues/906 ⇒これらはGDAL 2.3.2で修正されました!! 26
  27. 27. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. と言うことで、FOSS4G Hokkaidoの リベンジをします!! (おざきさんから提供頂いたシェープファイルのインポートをデモします) 27
  28. 28. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. デモ 28
  29. 29. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. デモ手順 1.MySQL 8.0に接続し、シェープファイルをインポートするための データベースを作成する(データベース名は任意の名前) 2.ogr2ogrを使ってシェープファイルをインポート 29 [実行例] mysql> create database geotest; Query OK, 1 row affected (0.02 sec) [実行例] C:¥>ogr2ogr.exe -f "MySQL" MySQL:"geotest,host=127.0.0.1,user=root, password=root,port=3306" C:¥work¥point_4326.shp ※以下環境での実行例 - ローカルのMySQLサーバーへ接続、3306ポートを使用(デフォルト) - MySQLのユーザー名:root、パスワード:root - シェープファイル:C:¥work¥point_4326.shp
  30. 30. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. デモ手順 3.MySQLでインポートされたデータを確認 30 [実行例] mysql> USE geotest; Database changed mysql> mysql> SHOW TABLES; +-------------------+ | Tables_in_geotest | +-------------------+ | geometry_columns | | point_4326 | +-------------------+ 2 rows in set (0.00 sec)
  31. 31. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 31 mysql> SELECT * FROM geometry_columns; +-----------------+----------------+--------------+-------------------+-----------------+------+-------+ | F_TABLE_CATALOG | F_TABLE_SCHEMA | F_TABLE_NAME | F_GEOMETRY_COLUMN | COORD_DIMENSION | SRID | TYPE | +-----------------+----------------+--------------+-------------------+-----------------+------+-------+ | NULL | NULL | point_4326 | SHAPE | 2 | 4326 | POINT | +-----------------+----------------+--------------+-------------------+-----------------+------+-------+ 1 row in set (0.00 sec) mysql> SELECT OGR_FID,ST_AsText(SHAPE),gid,point_name FROM point_4326; +---------+------------------------------------------+------+----------------+ | OGR_FID | ST_AsText(SHAPE) | gid | point_name | +---------+------------------------------------------+------+----------------+ | 1 | POINT(35.1707331634177 136.88149942349) | 1 | nagoya_station | | 2 | POINT(35.1857023272457 136.899114368707) | 2 | nagoya_castle | | 3 | POINT(35.1649809196272 136.899766774086) | 3 | science_museum | +---------+------------------------------------------+------+----------------+ 3 rows in set (0.00 sec) mysql> SELECT OGR_FID,HEX(SHAPE),gid,point_name FROM point_4326; +---------+----------------------------------------------------+------+----------------+ | OGR_FID | HEX(SHAPE) | gid | point_name | +---------+----------------------------------------------------+------+----------------+ | 1 | E61000000101000000A36A473E351C61405F9C9495DA954140 | 1 | nagoya_station | | 2 | E61000000101000000BA1E7F8BC51C6140DB270718C5974140 | 2 | nagoya_castle | | 3 | E610000001010000004297B0E3CA1C6140A42143181E954140 | 3 | science_museum | +---------+----------------------------------------------------+------+----------------+ 3 rows in set (0.00 sec) [実行例の続き]
  32. 32. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. とは言え、まだ課題もあります 32
  33. 33. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 課題 • ogr2ogrでシェープファイルのインポートを試した時に、文字化けにより エラーが発生したケースもあります – 発生したエラー • ERROR 1: MySQL error message:Data too long for column 'XXXXX' at row 1 Description: INSERT INTO<後略> – まだissue登録出来ていません 33
  34. 34. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 課題 • (必須要件ではありませんが) ogr2ogrでシェープファイルをインポートした際にMySQLに作成された テーブルのgeometry型の列にSRIDが明示的に定義されていません – SRIDが明示的に定義されていれば、異なるSRIDのデータの混入を防げます • INSERT時にエラーになります – issue登録済みです • ogr2ogr with MySQL 8: POINT column doesn't have SRID attribute #1015 https://github.com/OSGeo/gdal/issues/1015 34
  35. 35. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 課題 • (必須要件ではありませんが) MySQL 8.0でデフォルトの認証方式を使用している場合、ogr2ogrで 接続できません – 「MySQL8.0.11使ってみた」の8ページで 「AuthenticationMethodはLegacyを選択しておきましょう。」と言われている件です – MySQL 8.0の設定で「default-authentication-plugin=mysql_native_password」 としてからMySQLユーザーを作成することで回避できます – issue登録済みです • ogr2ogr with MySQL 8 (MySQL connect failed with caching_sha2_password plugin) #910 https://github.com/OSGeo/gdal/issues/910 • libmysql-client version is old for MySQL 8.0 #132 https://github.com/gisinternals/buildsystem/issues/132 35
  36. 36. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GDAL以外の話題 36
  37. 37. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GDAL以外の話題 • Ushahidiのissue – Runtime problems with MySQL 8.0 #3308 https://github.com/ushahidi/platform/issues/3308 ⇒GDALのissue #782、#899 と同じ原因です(※) ※私のFOSS4G Tokaiでの発表資料で原因を解説しています (次ページの「1.廃止された関数を使用していた」が原因です) 37
  38. 38. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GDALに依存した問題の整理 ※FOSS4G Tokaiでの発表資料より • GDALを利用して生成されたSQL文を修正すれば、SQLが実行できた – MySQL 8.0がエラーの原因ではなく、GDALがMySQL 8.0に合わせた SQLを正しく生成できていないことが原因 • 修正点は以下の3点 – 1.廃止された関数を使用していた ⇒MySQL 8.0で使用できる関数名に修正すれば解決 – 2.SRIDの指定が間違っていた ⇒SRIDを正しく指定すれば解決 – 3.経度、緯度の指定順番が逆になっていた ⇒MySQLの仕様に合わせた順番に修正すれば解決 38
  39. 39. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. GDALで発生した問題と同様の問題が 他のツールでも発生するかもしれません 39
  40. 40. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 周辺ツールに対するフィードバックも ご協力頂けると助かります m(_ _)m 40
  41. 41. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 参考情報 41
  42. 42. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 参考情報 • マニュアル – https://dev.mysql.com/doc/refman/8.0/en/ • コミュニティフォーラム – http://forums.mysql.com/list.php?23 • Boost.Geometry – http://www.boost.org/libs/geometry • バグ報告&機能追加リクエスト – http://bugs.mysql.com/ 42
  43. 43. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 参考情報 • MySQL開発チームのブログ記事(GIS機能開発者の投稿記事) https://mysqlserverteam.com/author/nryeng/ – 例) • Spatial Reference Systems in MySQL 8.0 • Geography in MySQL 8.0 • Axis Order in Spatial Reference Systems • Geographic Indexes in InnoDB • Geographic Spatial Reference Systems in MySQL 8.0 • Projected Spatial Reference Systems in MySQL 8.0 • Upgrading Spatial Indexes to MySQL 8.0 • Creating Your Own Spatial Reference Systems in MySQL 8.0 43
  44. 44. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 参考情報 • MySLQ 8.0 GIS Demos https://github.com/nryeng/mysql-8.0-gis-demos – OpenLayers、OpenStreetMap、ProxySimplePHPのタイルキャッシュを使用したデモ (MySQL 8.0がGA(製品版)になる前に作成されたデモ) 44

×