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標準定義においてポリゴン外部の各頂点は反時計周りであり、内部の各頂点は全て時計回りである。See the OGC Implementation Specification for geographic information - Simple Feature Access, section 6.1.11.1. https://www.opengeospatial.org/standards/sfa

+Geometry primitives (2D) Type 凡例 Point File:SFA Point.svg POINT (30 10) LineString File:SFA LineString.svg LINESTRING (30 10, 10 30, 40 40) Polygon File:SFA Polygon.svg POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)) File:SFA Polygon with hole.svg POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),  (20 30, 35 35, 30 20, 20 30))

+Multipart geometries (2D) Type 凡例 MultiPoint File:SFA MultiPoint.svg MULTIPOINT ((10 40), (40 30), (20 20), (30 10)) MULTIPOINT (10 40, 40 30, 20 20, 30 10) MultiLineString File:SFA MultiLineString.svg MULTILINESTRING ((10 10, 20 20, 10 40),   (40 40, 30 30, 40 20, 30 10)) MultiPolygon File:SFA MultiPolygon.svg MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),   ((15 5, 40 10, 10 20, 5 10, 15 5))) File:SFA MultiPolygon with hole.svg MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),   ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),     (30 20, 20 15, 20 25, 30 20)))
以下に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ビットの符号なし整数であり, 具体的には以下の通り:
+ Geometry types, and WKB integer codes Type  2D  Z  M  ZM Geometry 0000  1000  2000  3000 Point 0001  1001  2001  3001 LineString 0002  1002  2002  3002 Polygon 0003  1003  2003  3003 MultiPoint 0004  1004  2004  3004 MultiLineString 0005  1005  2005  3005 MultiPolygon 0006  1006  2006  3006 GeometryCollection 0007  1007  2007  3007 CircularString 0008  1008  2008  3008 CompoundCurve 0009  1009  2009  3009 CurvePolygon 0010  1010  2010  3010 MultiCurve 0011  1011  2011  3011 MultiSurface 0012  1012  2012  3012 Curve 0013  1013  2013  3013 Surface 0014  1014  2014  3014 PolyhedralSurface 0015  1015  2015  3015 TIN 0016  1016  2016  3016 Triangle 0017  1017  2017  3017 Circle 0018  1018  2018  3018 GeodesicString 0019  1019  2019  3019 EllipticalCurve 0020  1020  2020  3020 NurbsCurve 0021  1021  2021  3021 Clothoid 0022  1022  2022  3022 SpiralCurve 0023  1023  2023  3023 CompoundSurface 0024  1024  2024  3024 BrepSolid   1025     AffinePlacement 102  1102    

各データ型は、倍精度浮動小数点（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以降GIS and Spatial Extensions with MySQL
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
脚注

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

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