[+/-]
このグループに属する各関数は幾何値を引数に取り、幾何図形の何らかの定量的または定性的なプロパティーを返します。一部の関数では引数の型に制限があります。そのような関数は、不正な幾何型が引数に指定されると
NULL
を返します。たとえば、Area()
はオブジェクトの型が
Polygon
でも
MultiPolygon
でもない場合には
NULL
を返します。
この節に記載する関数の引数には制限がなく、任意の型の幾何値を指定できます。
幾何値 g
の固有の次元を返します。結果は
–1、0、1、2
のいずれかになります。これらの値の意味については、項7.13.2.2. 「クラス Geometry
」を参照してください。
mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));
+------------------------------------------------+
| Dimension(GeomFromText('LineString(1 1,2 2)')) | +------------------------------------------------+
| 1 | +------------------------------------------------+
幾何値 g
の最小外接矩形 (MBR) を返します。結果は
Polygon
値として返されます。
この多角形はバウンディングボックスの隅の点によって次のように定義されます。
POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
+-------------------------------------------------------+ | AsText(Envelope(GeomFromText('LineString(1
1,2 2)'))) | +-------------------------------------------------------+ | POLYGON((1
1,2 1,2 2,1 2,1 1)) | +-------------------------------------------------------+
幾何インスタンス g
がメンバーになっている幾何型の名前を文字列として返します。この名前は、インスタンス化可能な
Geometry
サブクラスのいずれかに対応しています。
mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));
+------------------------------------------+
| GeometryType(GeomFromText('POINT(1 1)')) | +------------------------------------------+
| POINT | +------------------------------------------+
幾何値 g
の空間参照システム ID
を示す整数を返します。
MySQL の SRID 値は、幾何値に関連付けられた単なる整数です。すべての計算はユークリッド (平面) 幾何学を前提にして実行されます。
mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
+-----------------------------------------------+
| SRID(GeomFromText('LineString(1 1,2 2)',101)) | +-----------------------------------------------+
| 101 | +-----------------------------------------------+
OpenGIS の仕様書では次の関数も定義されていますが、これらは MySQL では実装されていません。
幾何値 g
の組み合わせ境界の閉包となる幾何図形を返します。
幾何値 g
が空の幾何図形の場合は
1、空でない場合は 0、引数が
NULL
の場合は
–1、をそれぞれ返します。幾何図形が空の場合、それは空の点集合を表します。
この関数は現時点ではプレースホルダであり、使用すべきではありません。実装された場合の動作は、次の段落で記述した内容になります。
幾何値 g
に自己交差や自己接触などの変則的な幾何点が含まれていない場合は
1
を返します。IsSimple()
は引数が単純でない場合は
0、NULL
の場合は
–1 をそれぞれを返します。
この章の最初のほうにある各インスタンス化可能幾何クラスの説明には、そのクラスのインスタンスが「単純でない」として分類されるための具体的な条件が含まれています。詳細は、項7.13.2.1. 「幾何クラスの階層」 を参照してください。
Point
は X 座標と Y
座標から構成されますが、それらの座標を取得するには次の関数を使用します。
点 p
の X
座標値を倍精度数値として返します。
mysql>SET @pt = 'Point(56.7 53.34)';
mysql>SELECT X(GeomFromText(@pt));
+----------------------+ | X(GeomFromText(@pt)) | +----------------------+ | 56.7 | +----------------------+
点 p
の Y
座標値を倍精度数値として返します。
mysql>SET @pt = 'Point(56.7 53.34)';
mysql>SELECT Y(GeomFromText(@pt));
+----------------------+ | Y(GeomFromText(@pt)) | +----------------------+ | 53.34 | +----------------------+
LineString
はいくつかの Point
値から構成されます。LineString
の特定の点を取り出したり、そこに含まれている点の数をカウントしたり、その長さを取得したりできます。
LineString
値
ls
の 終点となる
Point
を返します。
mysql>SET @ls = 'LineString(1 1,2 2,3 3)';
mysql>SELECT AsText(EndPoint(GeomFromText(@ls)));
+-------------------------------------+ | AsText(EndPoint(GeomFromText(@ls))) | +-------------------------------------+ | POINT(3 3) | +-------------------------------------+
関連付けられた空間参照での
LineString
値
ls
の長さを、倍精度数値として返します。
mysql>SET @ls = 'LineString(1 1,2 2,3 3)';
mysql>SELECT GLength(GeomFromText(@ls));
+----------------------------+ | GLength(GeomFromText(@ls)) | +----------------------------+ | 2.8284271247462 | +----------------------------+
GLength()
は非標準名です。これは OpenGIS の
Length()
関数に対応しています。
LineString
値
ls
に含まれる
Point
オブジェクトの数を返します。
mysql>SET @ls = 'LineString(1 1,2 2,3 3)';
mysql>SELECT NumPoints(GeomFromText(@ls));
+------------------------------+ | NumPoints(GeomFromText(@ls)) | +------------------------------+ | 3 | +------------------------------+
LineString
値
ls
の
N
番目の
Point
を返します。点の番号は 1
から始まります。
mysql>SET @ls = 'LineString(1 1,2 2,3 3)';
mysql>SELECT AsText(PointN(GeomFromText(@ls),2));
+-------------------------------------+ | AsText(PointN(GeomFromText(@ls),2)) | +-------------------------------------+ | POINT(2 2) | +-------------------------------------+
LineString
値
ls
の 始点となる
Point
を返します。
mysql>SET @ls = 'LineString(1 1,2 2,3 3)';
mysql>SELECT AsText(StartPoint(GeomFromText(@ls)));
+---------------------------------------+ | AsText(StartPoint(GeomFromText(@ls))) | +---------------------------------------+ | POINT(1 1) | +---------------------------------------+
OpenGIS の仕様書では次の関数も定義されていますが、これらは MySQL では実装されていません。
これらの関数は、MultiLineString
値のプロパティーを返します。
MultiLineString
値
mls
の長さを倍精度数値として返します。mls
の長さは、その要素の長さの合計に等しくなります。
mysql>SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql>SELECT GLength(GeomFromText(@mls));
+-----------------------------+ | GLength(GeomFromText(@mls)) | +-----------------------------+ | 4.2426406871193 | +-----------------------------+
GLength()
は非標準名です。これは OpenGIS の
Length()
関数に対応しています。
MultiLineString
値
mls
が閉じている
(つまり、mls
のすべての
LineString
で
StartPoint()
と
EndPoint()
の値が同じである) 場合は 1
を返します。mls
が閉じていない場合は
0、NULL
の場合は
–1 をそれぞれ返します。
mysql>SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql>SELECT IsClosed(GeomFromText(@mls));
+------------------------------+ | IsClosed(GeomFromText(@mls)) | +------------------------------+ | 0 | +------------------------------+
これらの関数は、Polygon
値のプロパティーを返します。
Polygon
値
poly
のその空間参照システム内で測定された面積を、倍精度数値として返します。
mysql>SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
mysql>SELECT Area(GeomFromText(@poly));
+---------------------------+ | Area(GeomFromText(@poly)) | +---------------------------+ | 4 | +---------------------------+
Polygon
値
poly
の外側のリングを
LineString
として返します。
mysql>SET @poly =
->'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql>SELECT AsText(ExteriorRing(GeomFromText(@poly)));
+-------------------------------------------+ | AsText(ExteriorRing(GeomFromText(@poly))) | +-------------------------------------------+ | LINESTRING(0 0,0 3,3 3,3 0,0 0) | +-------------------------------------------+
Polygon
値
poly
の
N
番目の内側のリングを、LineString
として返します。リングの番号は 1
から始まります。
mysql>SET @poly =
->'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql>SELECT AsText(InteriorRingN(GeomFromText(@poly),1));
+----------------------------------------------+ | AsText(InteriorRingN(GeomFromText(@poly),1)) | +----------------------------------------------+ | LINESTRING(1 1,1 2,2 2,2 1,1 1) | +----------------------------------------------+
Polygon
値
poly
の内側のリングの数を返します。
mysql>SET @poly =
->'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql>SELECT NumInteriorRings(GeomFromText(@poly));
+---------------------------------------+ | NumInteriorRings(GeomFromText(@poly)) | +---------------------------------------+ | 1 | +---------------------------------------+
これらの関数は、MultiPolygon
値のプロパティーを返します。
MultiPolygon
値
mpoly
のその空間参照システム内で測定された面積を、倍精度数値として返します。
mysql>SET @mpoly =
->'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
mysql>SELECT Area(GeomFromText(@mpoly));
+----------------------------+ | Area(GeomFromText(@mpoly)) | +----------------------------+ | 8 | +----------------------------+
OpenGIS の仕様書では次の関数も定義されていますが、これらは MySQL では実装されていません。
これらの関数は、GeometryCollection
値のプロパティーを返します。
GeometryCollection
値 gc
内の
N
番目の幾何図形を返します。幾何図形の番号は
1 から始まります。
mysql>SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
mysql>SELECT AsText(GeometryN(GeomFromText(@gc),1));
+----------------------------------------+ | AsText(GeometryN(GeomFromText(@gc),1)) | +----------------------------------------+ | POINT(1 1) | +----------------------------------------+
GeometryCollection
値 gc
に含まれる幾何図形の数を返します。
mysql>SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
mysql>SELECT NumGeometries(GeomFromText(@gc));
+----------------------------------+ | NumGeometries(GeomFromText(@gc)) | +----------------------------------+ | 2 | +----------------------------------+