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)というジオメトリは次で表される：000000000140000000000000004010000000000000

ここで, 
1バイト整数：00または0：ビッグエンディアン
4バイト整数：00000001または1：ポイント（2D）
8バイト浮動小数点：4000000000000000または2.0：x座標
8バイト浮動小数点：4010000000000000または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測地系によって地球と結び付けられている:

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

脚注

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

地図の図法
マークアップ言語
GISファイルフォーマット