クエリーで幾何オブジェクトを表現するために、次の 2 つの標準空間データ形式が使用されます。
WKT (Well-Known Text) 形式
WKB (Well-Known Binary) 形式
MySQL の内部では、WKT、WKB のどちらの形式とも異なる形式で幾何値が格納されます。
異なるデータ形式間の変換に使用できる関数があります。セクション12.15.6「幾何形式変換関数」を参照してください。
幾何値の WKT (Well-Known Text) 表現は、ASCII 形式の幾何データを交換するために設計されています。OpenGIS 仕様書には、WKT 値を書き込むための公式の運用ルールを指定するバッカス-ナウア記法が用意されています (セクション11.5「空間データの拡張」を参照してください)。
幾何オブジェクトの WKT 表現の例:
-
Point
:POINT(15 20)
点の座標は、区切り用のカンマなしに指定されます。これは、座標間にカンマを必要とする SQL
Point()
関数の構文とは異なります。特定の空間演算のコンテキストに適した構文を慎重に使用してください。たとえば、次のステートメントはどちらも、Point
オブジェクトから X 座標を抽出します。最初の場合は、Point()
関数を直接使用してオブジェクトを生成します。2 番目の場合は、GeomFromText()
でPoint
に変換された WKT 表現を使用します。mysql> SELECT X(POINT(15, 20)); +------------------+ | X(POINT(15, 20)) | +------------------+ | 15 | +------------------+ mysql> SELECT X(GeomFromText('POINT(15 20)')); +---------------------------------+ | X(GeomFromText('POINT(15 20)')) | +---------------------------------+ | 15 | +---------------------------------+
-
4 つの点を含む
LineString
:LINESTRING(0 0, 10 10, 20 25, 50 60)
点の座標のペアはカンマで区切られます。
-
外側のリングと内側のリングを 1 つずつ含む
Polygon
:POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
-
3 つの
Point
値を含むMultiPoint
:MULTIPOINT(0 0, 20 20, 60 60)
-
2 つの
LineString
値を含むMultiLineString
:MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
-
2 つの
Polygon
値を含むMultiPolygon
:MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
-
2 つの
Point
値と 1 つのLineString
から構成されたGeometryCollection
:GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
幾何値の WKB (Well-Known Binary) 表現は、幾何 WKB 情報を含む BLOB
値によって表現されたバイナリストリームとして幾何データを交換するために使用されます。この形式は、OpenGIS 仕様によって定義されています (セクション11.5「空間データの拡張」を参照してください)。これはまた、ISO の SQL/MM Part 3: Spatial 標準でも定義されています。
WKB は、1 バイトの符号なしの整数、4 バイトの符号なしの整数、および 8 バイトの倍精度数 (IEEE 754 形式) を使用します。1 バイトは 8 ビットです。
たとえば、POINT(1 1)
に対応する WKB 値は、それぞれ 2 つの 16 進数で表された次の 21 バイトのシーケンスから構成されます。
0101000000000000000000F03F000000000000F03F
このシーケンスは次のコンポーネントから構成されます。
Byte order: 01
WKB type: 01000000
X coordinate: 000000000000F03F
Y coordinate: 000000000000F03F
各コンポーネントが表す内容は次のとおりです。
バイト順序は 1 または 0 のどちらかで、リトルエンディアンまたはビッグエンディアンストレージを示します。リトルエンディアンバイト順序、ビッグエンディアンバイト順序はそれぞれ NDR (Network Data Representation)、XDR (External Data Representation) とも呼ばれます。
WKB 型は幾何型を示すコードです。1 から 7 の値は
Point
、LineString
、Polygon
、MultiPoint
、MultiLineString
、MultiPolygon
、およびGeometryCollection
を示します。Point
値には X 座標と Y 座標が含まれますが、それぞれ倍精度値として表現されます。
さらに複雑な幾何値の WKB 値は、OpenGIS 仕様書に詳しく記されているように、より複雑なデータ構造になります。