MySQL 5.6 リファレンスマニュアル  /  ...  /  幾何値を作成する MySQL 固有の関数

12.15.5 幾何値を作成する MySQL 固有の関数

MySQL には、幾何値を作成するために役立つ一連の非標準関数が用意されています。このセクションで説明されている関数は、OpenGIS 仕様への MySQL 拡張です。

これらの関数は、引数としての WKB 値または幾何オブジェクトから幾何オブジェクトを生成します。いずれかの引数が適切な WKB でも、適切なオブジェクト型の幾何表現でもない場合、戻り値は NULL になります。

たとえば、Point() からの幾何図形の戻り値を POINT カラムに直接挿入できます。

INSERT INTO t1 (pt_col) VALUES(Point(1,2));
  • GeometryCollection(g1,g2,...)

    GeometryCollection を構築します。

    引数にサポートされていない幾何図形が含まれている場合、戻り値は NULL になります。

  • LineString(pt1,pt2,...)

    複数の Point または WKB Point 引数から LineString 値を構築します。引数の数が 2 未満の場合、戻り値は NULL になります。

  • MultiLineString(ls1,ls2,...)

    LineString または WKB LineString 引数を使用して MultiLineString 値を構築します。

  • MultiPoint(pt1,pt2,...)

    Point または WKB Point 引数を使用して MultiPoint 値を構築します。

  • MultiPolygon(poly1,poly2,...)

    一連の Polygon または WKB Polygon 引数から MultiPolygon 値を構築します。

  • Point(x,y)

    座標を使用して Point を構築します。

  • Polygon(ls1,ls2,...)

    複数の LineString または WKB LineString 引数から Polygon 値を構築します。いずれかの引数が LinearRing を表していない (つまり、閉じた単純な LineString でない) 場合、戻り値は NULL になります。

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by on November 12, 2006
you can use these special mySQL functions to create new geometries from geometric values returned from performing validations or so on existing geometries, like so:

1. get 2 separate polygons' centroids (return type POINT)
2. create a line connecting the two centroids using the mySQL function

... create a polygon
select @ctrP1 := Centroid(polygonfromtext( @poly));
| astext( @ctrP1) |
| POINT(474265.80876111 5525475.9707162) |

... set @poly to a different polygon ...

select @ctrP2 := Centroid(polygonfromtext( @poly));
| astext( @ctrP2) |
| POINT(475065.80876111 5524675.9707161) |

select @line2 := GeomFromWKB( LineString( asWKB( @ctrP1), asWKB( @ctrP2)));

select astext(@line2);

| astext(@line2) |
| LINESTRING(474265.80876111 5525475.9707162,475065.80876111 5524675.9707161) |
1 row in set (0.00 sec)

  Posted by J Jorgenson on April 11, 2007
Using a raw Geometry column is not very clear, everyone seems to be creating session variables that are TEXT strings used for the GeomFromText( 'slow text string' ) func.

To use actual geometry columns instead of re-constructing text strings for everything (which is hopefully more efficient internally) you need to utilize the function
AsBinary( geom_col );

To create a LineString from two GEOMETRY points:
SET @myLineWKB = LineString( AsBinary(geom_col), AsBinary(geom_col) );

However, the resulting LineString is not actually a Geometry value that could be stuffed into a Geometry data column, but a WKB description of the LineString. To be able to use that LineString, say for Geometry fuctions, you'll need to convert it using LineFromWKB() or GeomFromWKB().
SET @myLine = LineFromWKB(@myLineWKB);
SET @myLine = GeomFromWKB(@myLineWKB);

Performance Thought: One would think that using specific LineFromWKB() is faster than the generic GeomFromWKB(), but it is just a guess.

Now you can obtain the Distance/Length between the two original points using a Geometry function:
SELECT GLength( @myLine );
or more a complex version as a single SQL statement:
SELECT GLength( LineFromWKB( LineString(AsBinary(geom_col), AsBinary(geom_col)) ) );

Sign Up Login You must be logged in to post a comment.