Well-known text

**Well-known text**（略称：WKT）は 、ベクタ形式幾何学オブジェクトを投影法 (地図)を基に変換し地図上に表現させるマークアップ言語である。
バイナリ形式で実装されているものはwell-known binary (WKB)であり、PostGISやMicrosoft SQL ServerやDB2等のデータベースでの保存に利用されている。
## ジオメトリオブジェクト
点 (数学)、線分、多角形、曲線、多面体、TINを含む計18種類が表現できる。

ジオメトリ上の座標は、2次元（x、y）・3次元（x、y、z）・4次元（x、y、z、m:m値は線形参照で用いる）・m値を含む2次元（x、y、m）
で示される。
座標が空のジオメトリはEMPTY表示になる。

ジオメトリの仕様はOpen Geospatial Consortium (OGC) により策定されており、PostGIS等のアプリケーションにてOGC仕様に則しジオメトリ変換関数が実装されている。

OGC標準定義においてポリゴン外部の各頂点は反時計周りであり、内部の各頂点は全て時計回りである。

以下にWKTのジオメトリ文字列を示す。

```
GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
POINT ZM (1 1 5 60)
POINT M (1 1 80)
POINT EMPTY
MULTIPOLYGON EMPTY
CIRCULARSTRING(1 5, 6 2, 7 3)
COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))
CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))
MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))
TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))
TIN (((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)))
POLYHEDRALSURFACE Z (
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1 1 1)),
    ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)),
    ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))
  )
```

### Well-known binary
WKBでは十六進法の文字列で表す。
始めのバイト_(情報)はデータのエンディアンを示す。
* `00` : ビッグエンディアン
* `01` : リトルエンディアン
続く4バイトはジオメトリ型を表す32ビットの符号なし整数であり, 具体的には以下の通り:

各データ型は、倍精度浮動小数点（double）の座標を持つ、ポイントか線状のリングの数などの固有データ構造を有する。

例えば、POINT(2.0 4.0)というジオメトリは次で表される：`<span style="background:yellow">00</span><span style="background:lightblue">00000001</span><span style="background:lightsalmon">4000000000000000</span><span style="background:lightgreen">4010000000000000</span>`

ここで, 
*1バイト整数：`<span style="background:yellow">00</span>`または0：ビッグエンディアン
*4バイト整数：`<span style="background:lightblue">00000001</span>`または1：ポイント（2D）
*8バイト浮動小数点：`<span style="background:lightsalmon">4000000000000000</span>`または2.0：x座標
*8バイト浮動小数点：`<span style="background:lightgreen">4010000000000000</span>`または4.0：y座標
である。

## 座標参照系
WKTは座標参照系を表すことができる。このWKTの書式は, そもそも1991年にOpen Geospatial Consortiumによって定義され, 2001年に拡張された。この書式は"WKT 1"としても知られる。後にm 座標参照系の概念の進化や, WKT 1への新たな要求や, ソフトウェアの間でのWKT 1の実装の違いなどのために, この書式の見直しがなされた。2015年のOpen Geospatial Consortiumにおいて, 更新されたその標準書式, すなわち, "WKT 2としても知られる"Well-known text representation of coordinate reference systems"が採択された。この標準は, 国際標準化機構によってISO 19162:2015としても公表された。

例えば, 次に示すWKTは2次元の地理座標参照系を示すものであり, 緯度軸が最初に記載され, 次に経度軸が記載され, 座標系はWGS84測地系によって地球と結び付けられている:


```text
GEODCRS["WGS 84",
  DATUM["World Geodetic System 1984",
    ELLIPSOID["WGS 84", 6378137, 298.257223563, LENGTHUNIT["metre", 1]]],
  CS[ellipsoidal, 2],
    AXIS["Latitude (lat)“, north, ORDER[1]],
    AXIS["Longitude (lon)“, east, ORDER[2]],
    ANGLEUNIT[”degree", 0.0174532925199433]]
```


WKT書式は、地理座標参照系だけでなく、地心座標系、投影座標系、鉛直座標系、時間的に変化する座標系, そして工学的座標系（例えば、ボートに取り付けられた座標参照系）を記述することができる。標準では、これらの座標参照系をどのように組み合わせるかについても記述している。

### 後方互換性
WKT2で表された座標参照系を読み込むことができるソフトウェアは, 多くの場合（全てとは限らないが）, WKT1で表された同様の地理座標系を読み込むことができる
Some caveats exist, notably the removal of the `TOWGS84` element  which is replaced by the `BOUNDCRS` element. Another caveat is about the units of measurement. Some of them were unspecified in oldest WKT 1 specifications (for example the `PRIMEM` unit), which has led to different interpretations by different software. Those units of measurement have been clarified in the 2001 update and the WKT 2 specification is consistent with that clarification. But not all software have followed the 2001 clarification.

## 変換
WKT形式は異なる空間参照システム間の座標変換に使用する変換手法及びパラメータの記述を明示している。
下記に変換記述例を示す。

```text
PARAM_MT["Mercator_2SP", 
    PARAMETER["semi_major",6370997.0], 
    PARAMETER["semi_minor",6370997.0], 
    PARAMETER["central_meridian",180.0], 
    PARAMETER["false_easting",-500000.0], 
    PARAMETER["false_northing",-1000000.0], 
    PARAMETER["standard parallel 1",60.0]]
PARAM_MT["Affine",
    PARAMETER["num_row",3],
    PARAMETER["num_col",3],
    PARAMETER["elt_0_1",1],
    PARAMETER["elt_0_2",2],
    PARAMETER["elt 1 2",3]]
```

## サポート提供RDBMSエンジン
*PostgreSQL:PostGISモジュール2.0
*Oracle Spatial9i, 10g, 11g
*MySQLVer4.1以降
*DB2 LUW 9, 10:Spatial Extender
*DB2 for z/OS 9, 10:Spatial Support
*IBM Netezza:Netezza Spatial
*Informix9,10,11:Spatial datablade module
*Microsoft SQL Server  2008 / 2008 R2 / 2012 'Denali'
*SpatiaLite
*Teradata6.1、6.2、12、13（13から標準搭載、以前はアドイン提供）
*Ingres:GeoSpatial
*altibase 5.x
*SQL Anywhere 12

## サポート提供API
*OpenLayers (JavaScript)
*GDAL (C/C++、Java,Python等)
*Boost (C++): Geometry io/wkt参照

## 関連項目
*Geography Markup Language
## 脚注

## 外部リンク
*座標変換サービス 仕様