【初心者向け】MariaDBでWKB形式の空間データを取り扱う:ST_AsBinary関数の使い方


ST_AsBinary 関数は、MariaDB の空間データ型である GEOMETRY または GEOGRAPHY の値を、Well-Known Binary (WKB) フォーマットに変換します。WKB は、空間データをバイナリ表現で表す標準的なフォーマットです。

構文

ST_AsBinary(geometry_value)

引数

  • geometry_value: GEOMETRY または GEOGRAPHY 型の値

戻り値

WKB フォーマットのバイナリデータ

SELECT ST_AsBinary(POINT(1, 2));

このクエリは、点 (1, 2) を WKB フォーマットに変換し、バイナリデータとして返します。

使い方

ST_AsBinary 関数は、空間データを他のシステムとやり取りしたり、空間データのサイズを調べたりする際に役立ちます。

  • ST_AsBinary 関数は、空間データの簡潔な表現を提供しますが、人間が読んだり理解したりするのは難しい場合があります。空間データの可視化や編集には、ST_AsText 関数などの他の関数を使用することをお勧めします。


SELECT ST_AsBinary(POINT(1, 2));

例 2: 線を WKB フォーマットに変換する

SELECT ST_AsBinary(LINESTRING(1, 2, 3, 4));

このクエリは、線分 (1, 2) から (3, 4) を WKB フォーマットに変換し、バイナリデータとして返します。

例 3: 多角形を WKB フォーマットに変換する

SELECT ST_AsBinary(POLYGON((1, 2), (3, 4), (5, 2), (1, 2)));

このクエリは、多角形 (1, 2), (3, 4), (5, 2), (1, 2) を WKB フォーマットに変換し、バイナリデータとして返します。

例 4: コレクションを WKB フォーマットに変換する

SELECT ST_AsBinary(GEOMETRYCOLLECTION(POINT(1, 2), LINESTRING(1, 2, 3, 4)));

このクエリは、点 (1, 2) と線分 (1, 2) から (3, 4) を含むコレクションを WKB フォーマットに変換し、バイナリデータとして返します。

例 5: SRID を指定して WKB フォーマットに変換する

SELECT ST_AsBinary(POINT(1, 2), 4326);

このクエリは、点 (1, 2) を WKB フォーマットに変換し、SRID 4326 (WGS84) を指定して返します。



代替方法

  • ST_AsText 関数
    ST_AsText 関数は、空間データを WKT (Well-Known Text) フォーマットに変換します。WKT フォーマットは、人間が読んだり理解したりしやすいテキスト表現のフォーマットです。
  • ST_AsEWKB 関数
    ST_AsEWKB 関数は、ST_AsBinary 関数と同様ですが、拡張 WKB フォーマットを使用します。拡張 WKB フォーマットは、Z 座標や M 座標などの追加情報を保存できます。

各方法の比較

方法フォーマット利点欠点
ST_AsBinaryWKBコンパクトなバイナリ表現人間が読んだり理解したりするのが難しい
ST_AsEWKB拡張 WKBZ 座標や M 座標などの追加情報を保存できるST_AsBinary よりもファイルサイズが大きくなる
ST_AsTextWKT人間が読んだり理解したりしやすいST_AsBinary や ST_AsEWKB よりも冗長な表現になる
ST_AsGeoJSONGeoJSONJavaScript やその他の Web 開発でよく使用される空間データの構造が複雑になる場合、冗長な表現になる可能性がある

どの方法を選択するか

どの方法を選択するかは、状況によって異なります。

  • 空間データを Web アプリケーションで使用したい場合は、ST_AsGeoJSON 関数が適しています。
  • 空間データを人間が読んだり理解したりする必要がある場合は、ST_AsText 関数が適しています。
  • Z 座標や M 座標などの追加情報を保存する必要がある場合は、ST_AsEWKB 関数が適しています。
  • 空間データを他のシステムとやり取りしたり、空間データのサイズを小さくしたい場合は、ST_AsBinary 関数が適しています。

以下の例は、ST_AsBinary 関数の代替方法を示しています。

-- ST_AsEWKB 関数を使用して拡張 WKB フォーマットに変換する
SELECT ST_AsEWKB(POINT(1, 2, 3));

-- ST_AsText 関数を使用して WKT フォーマットに変換する
SELECT ST_AsText(POINT(1, 2));

-- ST_AsGeoJSON 関数を使用して GeoJSON フォーマットに変換する
SELECT ST_AsGeoJSON(POINT(1, 2));