Перейти до вмісту

WKT

Матеріал з Вікіпедії — вільної енциклопедії.

Well-known text (WKT) — це текстова мова розмітки для представлення об'єктів векторної геометрії. Існує бінарний еквівалент, відомий як well-known binary (WKB), який використовується для передачі та зберігання тієї ж інформації у більш компактній формі, зручній для комп'ютерної обробки, але нечитабельній для людини. Формати були спочатку визначені Open Geospatial Consortium (OGC) і описані в їхньому Simple Feature Access.[1] Поточне стандартне визначення знаходиться в стандарті ISO/IEC 13249-3:2016.[2]

Геометричні об'єкти

[ред. | ред. код]

WKT може представляти наступні різні геометричні об'єкти:

Координати для геометрій можуть бути 2D (x, y), 3D (x, y, z), 4D (x, y, z, m) зі значенням m, яке є частиною лінійної системи відліку, або 2D зі значенням m (x, y, m). Тривимірні геометрії позначаються літерою «Z» після типу геометрії, а геометрії з лінійною системою відліку мають літеру «M» після типу геометрії. Порожні геометрії, які не містять координат, можуть бути вказані за допомогою символу EMPTY після назви типу.

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

Стандартне визначення OGC вимагає, щоб полігон був топологічно замкнутим. Також зазначається, що якщо зовнішнє кільце полігону визначено в проти годинникової стрілки, то воно буде видно з «зовні». Будь-які внутрішні кільця повинні бути визначені в протилежному напрямку порівняно із зовнішнім кільцем, у цьому випадку за годинниковою стрілкою.[3]

Геометричні примітиви (2D)
Тип Приклади
Точка POINT (30 10)
Лінія LINESTRING (30 10, 10 30, 40 40)
Полігон 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)))
GeometryCollection GEOMETRYCOLLECTION (POINT (40 10),
LINESTRING (10 10, 20 20, 10 40),
POLYGON ((40 40, 20 45, 45 30, 40 40)))

Нижче наведено деякі інші приклади рядків 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
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))
  )

Well-known binary

[ред. | ред. код]

Well-known binary (WKB) представлення зазвичай показуються у вигляді шістнадцяткових рядків.

Перший байт вказує на порядок байтів для даних:

  • 0x00 : big endian
  • 0x01 : little endian

Наступні 4 байти є 32-бітним беззнаковим цілим числом для типу геометрії, як описано нижче:

Типи геометрії та коди WKB (вказані нижче в десятковому форматі)
Тип 2D Z M ZM
Geometry 0 1000 2000 3000
Point 1 1001 2001 3001
LineString 2 1002 2002 3002
Polygon 3 1003 2003 3003
MultiPoint 4 1004 2004 3004
MultiLineString 5 1005 2005 3005
MultiPolygon 6 1006 2006 3006
GeometryCollection 7 1007 2007 3007
CircularString 8 1008 2008 3008
CompoundCurve 9 1009 2009 3009
CurvePolygon 10 1010 2010 3010
MultiCurve 11 1011 2011 3011
MultiSurface 12 1012 2012 3012
Curve 13 1013 2013 3013
Surface 14 1014 2014 3014
PolyhedralSurface 15 1015 2015 3015
TIN 16 1016 2016 3016
Triangle 17 1017 2017 3017
Circle 18 1018 2018 3018
GeodesicString 19 1019 2019 3019
EllipticalCurve 20 1020 2020 3020
NurbsCurve 21 1021 2021 3021
Clothoid 22 1022 2022 3022
SpiralCurve 23 1023 2023 3023
CompoundSurface 24 1024 2024 3024
BrepSolid 1025
AffinePlacement 102 1102

Кожен тип даних має унікальну структуру даних, таку як кількість точок або лінійних кілець, за якими слідують координати у форматі 64-бітних чисел з рухомою комою.

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

  • 1-байтове ціле число 00 або 0: big endian
  • 4-байтове ціле число 00000001 або 1: POINT (2D)
  • 8-байтове число з рухомою комою 4000000000000000 або 2.0: x-координата
  • 8-байтове число з рухомою комою 4010000000000000 або 4.0: y-координата

Варіації формату

[ред. | ред. код]
EWKT та EWKB — Extended Well-Known Text/Binary
Специфічний формат PostGIS, який включає ідентифікатор системи просторових координат (SRID) та до 4 ординатних значень (XYZM).[4][5] Наприклад: SRID=4326;POINT(-44.3 60.1) для визначення координати довготи/широти з використанням WGS 84 системи координат. Він також підтримує кругові криві, слідуючи елементам, названим (але не повністю визначеним) у початковому WKT: CircularString, CompoundCurve, CurvePolygon та CompoundSurface.[6]
AGF Text — Autodesk Geometry Format
Розширення до OGC's Standard (на той час), щоб включити криволінійні елементи; найбільш помітно використовується в MapGuide.[7]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Herring, John R., ред. (28 травня 2011), OpenGIS® Implementation Standard for Geographic information – Simple feature access – Part 1: Common architecture, № OGC 06-103r4, Open Geospatial Consortium, процитовано 28 січня 2019
  2. Information technology – Database languages – SQL multimedia and application packages – Part 3: Spatial, № ISO/IEC 13249-3:2016 (вид. 5th), ISO, 15 січня 2016, процитовано 28 січня 2019
  3. Див. OGC Implementation Specification for geographic information — Simple Feature Access, section 6.1.11.1. http://www.opengeospatial.org/standards/sfa
  4. Postgis/Postgis. GitHub. 6 жовтня 2021.
  5. ST_GeomFromEWKT. Процитовано 25 листопада 2022.
  6. Chapter 4: Using PostGIS: Data Management and Queries. postgis.net. Процитовано 30 липня 2021.
  7. MapGuide API Reference: AGF Text. Процитовано 14 вересня 2023.

Посилання

[ред. | ред. код]