WKT

WKT (Well-known text) — текстовый формат представления векторной геометрии и описания систем координат. Для хранения этой же информации в базах данных используется двоичный эквивалентный формат- WKB (Well-Known Binary). Форматы являются частью технологии "Simple Feature Access", созданной для предоставления общего интерфейса для обмена пространственными данными между различными программами и сервисами.

WKT
Расширение ..wkt
MIME-тип application/wkt
Тип формата ГИС формат файла
Открытый формат? да
WKB
Расширение ..wkb
Тип формата ГИС формат файла
Открытый формат? да

История

править

Форматы были первоначально определены Open Geospatial Consortium (OGC) в документе OGC 99-049[1]. В настоящее время актуальная редакция — OGC 06-103r3 и проект новой редакции OGC 06-104r3.

Well-known text

править

Геометрия

править

WKT может представлять следующие геометрические объекты:

Координаты для геометрии могут быть 2D (x, y), 3D (x, y, z), 4D (x, y, z, m) со значением m которое является частью системы linear referencing system или 2D со значением m (x, y, m). Пустые геометрии, которые не содержат координат, могут быть указаны с помощью символа EMPTY после имени типа.

WKT используется во всех спецификациях OGC и поддерживается в приложениях, которые реализуют эти спецификации. Например, PostGIS содержит функции, которые могут преобразовывать геометрию в представление WKT и из него, делая их удобочитаемыми для человека.

Полезно отметить, что стандартное определение OGC требует, чтобы Polygon имел замкнутую топологию. В нем также говорится, что если LineRing в представлении Polygon определено в направлении против часовой стрелки, оно будет внешним. Любые внутренние (дырки) LineRing должны быть определены противоположным образом по сравнению с внешним кольцом, в данном случае по часовой стрелке.[2]

Примитивные типы (2D)
Тип Примеры
Point   POINT (30 10)
LineString   LINESTRING (30 10, 10 30, 40 40)
Polygon   POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
  POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))
Мультитипы (2D)
Тип Примеры
MultiPoint   MULTIPOINT ((10 40), (40 30), (20 20), (30 10))
MULTIPOINT (10 40, 40 30, 20 20, 30 10)
MultiLineString   MULTILINESTRING ((10 10, 20 20, 10 40),
(40 40, 30 30, 40 20, 30 10))
MultiPolygon   MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
((15 5, 40 10, 10 20, 5 10, 15 5)))
  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 ( PATCHES
    ((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))
  )

Системы координат

править

WKT может описывать системы координат. Этот формат WKT был первоначально определен OGC в 1999 году, а затем расширен в 2001 году. Этот формат иногда называют «WKT 1». С развитием модели системы координат и несовместимостью реализация в разном ПО формат подвергся пересмотру. Обновленный стандарт «Well-known text representation of coordinate reference systems», иногда называемый как «WKT 2», был принят OGC в 2015 году. Этот стандарт совместно публикуется Международной организацией по стандартизации как ISO 19162 : 2015.

В примере ниже, WKT описывает двумерную географическую систему координат начиная с оси широты, за которой описывает ось долготы. Это система координат Земли 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 может описывать не только географические системы координат, но также геоцентрические, проектные, вертикальные, временные и инженерные (например, систему координат, привязанную к лодке). Стандарт описывает, как объединить эти системы координат.

Well-known binary

править

WKB (Well-known binary) — двоичное представление формата WKT в шестнадцатеричных строках.

Первый байт указывает порядок байт данных:

  • 00 : big endian - (прямой) порядок от старшего к младшему
  • 01 : little endian - (обратный) порядок от младшего к старшему

Следующие 4 байта представляют собой 32-bit unsigned integer указывающее тип геометрии:

Типы геометрии и коды WKB
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

Каждый тип данных имеет уникальную структуру данных, например количество точек или линий контуров, за которыми следуют координаты в 64-bit double.

Например, геометрия POINT(2.0 4.0) представлена как: 000000000140000000000000004010000000000000, где:

  • 1-byte integer 00 или 0: big endian
  • 4-byte integer 00000001 или 1: POINT (2D)
  • 8-byte float 4000000000000000 или 2.0: x-координата
  • 8-byte float 4010000000000000 или 4.0: y-координата

Варианты формата

править

EWKT и EWKBExtended Well-Known Text/Binary

Специфичный формат PostGIS, расширенный идентификатором пространственной системы координат (SRID) и до 4-х значений ординат (XYZM)[3][4].
Например: SRID=4326;POINT(-44.3 60.1) описывает долготу/широту в системе координат WGS 84.

AGF TextФормат геометрии Autodesk

Расширение стандарта OGC (актуальное на тот момент), включающий кривые.
Наиболее заметно используется в MapGuide.[5]

Поддержка Базами Данных

править

API обеспечивающие поддержку

править

Примечания

править
  1. Simple Feature Access - Part 2. Дата обращения: 24 января 2019. Архивировано 24 января 2019 года.
  2. См. спецификацию реализации OGC для географической информации - Simple Feature Access, раздел 6.1.11.1. http://www.opengeospatial.org/standards/sfa Архивная копия от 29 января 2017 на Wayback Machine
  3. postgis/ZMSgeoms.txt at 2.1.0 · postgis/postgis · GitHub. Дата обращения: 4 февраля 2019. Архивировано 24 февраля 2021 года.
  4. ST_GeomFromEWKT. Дата обращения: 4 февраля 2019. Архивировано 24 февраля 2021 года.
  5. Архивированная копия. Дата обращения: 4 февраля 2019. Архивировано из оригинала 12 ноября 2017 года.
  6. Well-Known Text (WKT) Format Архивная копия от 25 января 2019 на Wayback Machine, Документация MySQL
  7. Neo4j Spatial. Дата обращения: 24 января 2019. Архивировано 30 января 2019 года.