データサイエンティストのための空間データ分析: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
という名前のテーブルを作成し、id
とgeometry
という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などがあります。