データサイエンティストのための空間データ分析:MariaDBとPolygon Propertiesの活用


このチュートリアルでは、MariaDBでポリゴンデータを管理するために使用できるSQLステートメントと構造について説明します。

空間データ型

MariaDBは、ポリゴンを含む空間データを格納するためにいくつかの空間データ型をサポートしています。最も一般的に使用されるものは次のとおりです。

  • MULTIPOLYGON
    1つ以上のポリゴンで構成されるコレクションを表します。
  • POLYGON
    閉じたループと内部空間で構成される平面図形を表します。
  • GEOMETRY
    2Dおよび3D空間における幾何オブジェクトを表現するために使用されます。これには、点、線、ポリゴン、および円弧などがあります。

空間データの挿入

ポリゴンデータをMariaDBに挿入するには、次のINSERTステートメントを使用できます。

INSERT INTO `spatial_table` (`column_name`)
VALUES (ST_GeomFromText('POLYGON((x1 y1),(x2 y2),...)'));

ここで、

  • (x1 y1),(x2 y2),... は、ポリゴンの頂点の座標のリストです。
  • ST_GeomFromText は、テキスト表現からポリゴンオブジェクトを作成する関数です。
  • column_name はポリゴンデータが格納される列名です。
  • spatial_table はポリゴンデータを格納するテーブル名です。

空間データの選択

空間データを選択するには、次のSELECTステートメントを使用できます。

SELECT * FROM `spatial_table` WHERE ST_Intersects(`column_name`, ST_GeomFromText('POLYGON((x1 y1),(x2 y2),...)'));
  • (x1 y1),(x2 y2),... は、選択対象となるポリゴンの頂点の座標のリストです。
  • ST_Intersects は、2つの空間オブジェクトが交差しているかどうかを判断する関数です。
  • column_name はポリゴンデータが格納される列名です。
  • spatial_table はポリゴンデータを格納するテーブル名です。

空間データの更新

空間データを更新するには、次のUPDATEステートメントを使用できます。

UPDATE `spatial_table`
SET `column_name` = ST_SetGeometryColumn('POLYGON((x1 y1),(x2 y2),...)')
WHERE `id` = 1;
  • id は、更新対象となるレコードのIDです。
  • (x1 y1),(x2 y2),... は、更新対象となるポリゴンの頂点の座標のリストです。
  • ST_SetGeometryColumn は、列に新しいポリゴンオブジェクトを設定する関数です。
  • column_name はポリゴンデータが格納される列名です。
  • spatial_table はポリゴンデータを格納するテーブル名です。

空間データを削除するには、次のDELETEステートメントを使用できます。

DELETE FROM `spatial_table`
WHERE ST_Intersects(`column_name`, ST_GeomFromText('POLYGON((x1 y1),(x2 y2),...)'));
  • (x1 y1),(x2 y2),... は、削除対象となるポリゴンの頂点の座標のリストです。
  • ST_Intersects は、2つの空間オブジェクトが交差しているかどうかを判断する関数です。
  • column_name はポリゴンデータが格納される列名です。
  • spatial_table はポリゴンデータを格納するテーブル名です。


ポリゴンデータの挿入

CREATE TABLE `spatial_data` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `geometry` POLYGON NOT NULL
);

INSERT INTO `spatial_data` (`geometry`)
VALUES (ST_GeomFromText('POLYGON((1 2),(3 4),(5 6))'));

INSERT INTO `spatial_data` (`geometry`)
VALUES (ST_GeomFromText('POLYGON((7 8),(9 10),(11 12))'));

このコードは、spatial_dataという名前のテーブルを作成し、idgeometryという2つの列を定義します。geometry列は、ポリゴンデータを格納するために空間データ型POLYGONを使用します。

次に、2つのポリゴンデータをテーブルに挿入します。

SELECT * FROM `spatial_data` WHERE ST_Intersects(`geometry`, ST_GeomFromText('POLYGON((4 5),(6 7),(8 9))'));

このコードは、spatial_dataテーブルから、POLYGON((4 5),(6 7),(8 9))というポリゴンと交差するすべてのポリゴンを選択します。

UPDATE `spatial_data`
SET `geometry` = ST_SetGeometryColumn('POLYGON((13 14),(15 16),(17 18))')
WHERE `id` = 1;

このコードは、spatial_dataテーブルのidが1であるレコードのgeometry列を、POLYGON((13 14),(15 16),(17 18))という新しいポリゴンに更新します。

DELETE FROM `spatial_data`
WHERE ST_Intersects(`geometry`, ST_GeomFromText('POLYGON((19 20),(21 22),(23 24))'));

このコードは、spatial_dataテーブルから、POLYGON((19 20),(21 22),(23 24))というポリゴンと交差するすべてのレコードを削除します。



しかしながら、一般的な代替案として以下のものが挙げられます。

幾何学的な特性

  • 外角の合計
  • 内角の合計
  • 重心
  • 高さ
  • 対角線の長さ
  • 周囲長
  • 面積
  • 辺の数
  • 頂点の数

空間的な関係

  • 緩衝帯
  • 境界線
  • 他のポリゴンとの包含関係
  • 他のポリゴンとの交差

属性情報

  • 区分
  • 用途
  • 所有者
  • 高さ
  • 土地利用
  • どのようなデータを持っていますか?
  • "Polygon Properties" を使用して何を実現しようとしていますか?
  • "Polygon Properties" を使用しているのはどのようなコンテキストですか?

これらの情報が分かれば、より適切な代替案を提案することができます。

  • 空間データの可視化には、QGIS、Mapbox、Google Mapsなどのツールが利用できます。
  • 空間データの分析には、様々なツールやライブラリが用意されています。例えば、PostGIS、Geospatial Data Abstraction Library (GDAL)、Shapelyなどがあります。