空間カラムを作成し終わったら、空間データを移入できます。
値は内部ジオメトリ形式で格納する必要がありますが、WKT (Well-Known Text)、WKB (Well-Known Binary) のいずれの形式からでも、その形式に値を変換できます。 次の例は、WKT 値を内部ジオメトリ形式に変換することによって、ジオメトリ値をテーブルに挿入する方法を示しています。
-
次のように
INSERT
ステートメント内で直接変換を実行します。INSERT INTO geom VALUES (ST_GeomFromText('POINT(1 1)')); SET @g = 'POINT(1 1)'; INSERT INTO geom VALUES (ST_GeomFromText(@g));
-
次のように
INSERT
の前に変換を実行します。SET @g = ST_GeomFromText('POINT(1 1)'); INSERT INTO geom VALUES (@g);
次の例では、より複雑なジオメトリをテーブルに挿入しています。
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (ST_GeomFromText(@g));
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (ST_GeomFromText(@g));
SET @g =
'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (ST_GeomFromText(@g));
前述の例では、ST_GeomFromText()
を使用してジオメトリ値を作成しています。 次のように型に固有の関数を使用することもできます。
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (ST_PointFromText(@g));
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (ST_LineStringFromText(@g));
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (ST_PolygonFromText(@g));
SET @g =
'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (ST_GeomCollFromText(@g));
ジオメトリ値の WKB 表現を使用するクライアントアプリケーションプログラムが、クエリーで正しく作成された WKB のサーバーへの送信を担います。 この要件を満たす方法は複数あります。 例:
-
次のように、16 進リテラル構文を使用して、
POINT(1 1)
値を挿入します。INSERT INTO geom VALUES (ST_GeomFromWKB(X'0101000000000000000000F03F000000000000F03F'));
-
ODBC アプリケーションは、
BLOB
型の引数を使用して WKB 表現をプレースホルダにバインドし、WKB 表現を送信できます。INSERT INTO geom VALUES (ST_GeomFromWKB(?))
ほかのプログラミングインタフェースも似たようなプレースホルダメカニズムをサポートしている可能性があります。
C プログラムでは、
mysql_real_escape_string_quote()
を使用してバイナリ値をエスケープし、サーバーに送信されるクエリー文字列に結果を含めることができます。 mysql_real_escape_string_quote()を参照してください。