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

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

Well-known text

Геометрия WKT может представлять следующие геометрические объекты: Geometry Point, MultiPoint LineString, MultiLineString Polygon, MultiPolygon, Triangle CircularString Curve, MultiCurve, CompoundCurve CurvePolygon Surface, MultiSurface, PolyhedralSurface TIN (Triangulated irregular network) GeometryCollection

Координаты для геометрии могут быть 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 должны быть определены противоположным образом по сравнению с внешним кольцом, в данном случае по часовой стрелке.См. спецификацию реализации OGC для географической информации - Simple Feature Access, раздел 6.1.11.1. http://www.opengeospatial.org/standards/sfa

+Примитивные типы (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], AXIS["Longitude (lon)", east, ORDER], 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 и EWKB – Extended Well-Known Text/Binary Специфичный формат PostGIS, расширенный идентификатором пространственной системы координат (SRID) и до 4-х значений ординат (XYZM). Например: SRID=4326;POINT(-44.3 60.1) описывает долготу/широту в системе координат WGS 84.

AGF Text – Формат геометрии Autodesk Расширение стандарта OGC (актуальное на тот момент), включающий кривые. Наиболее заметно используется в MapGuide.

Поддержка Базами Данных PostgreSQL с модулем PostGIS 2.0 Oracle Spatial 9i, 10g, 11g OmniSci с версии 4.0 MySQL с версии 4.1Well-Known Text (WKT) Format , Документация MySQL MariaDB, все версии Neo4j IBM DB2 LUW 9, 10 с пространственным расширителем IBM DB2 for z/OS 9, 10 с пространственным расширителем IBM Netezza с расширением Netezza IBM Informix 9,10,11 с модулем пространственной базы данных Microsoft SQL Server 2008 R2, 2012, 2014, 2016 SpatiaLite Teradata 6.1, 6.2, 12, 13 (встроен в версию 13, в предыдущих версиях через плагин) Ingres GeoSpatial Altibase 5.x SQL Anywhere 12

API обеспечивающие поддержку Apache Spatial Information System: читает и форматирует WKT 1 и 2 для систем координат и операций с ними Boost C++ libraries (C++): см. Geometry io/wkt Esri geometry-api-java GEOS (C/C++) Shapely (Python): See Shapely Documentation and Shapely in PyPI GeoPHP (PHP) GDAL (C/C++ с привязками к Java, Python, и другим) GeoRust: rust-wkt (привязка к Rust) JTS Topology Suite (Java) Spatial4j (Java) NetTopologySuite (.NET) OpenLayers (JavaScript) OpenScales (ActionScript) rgeo (Ruby) sf (R) Terraformer (JavaScript) WkbDecoder (C# .Net) WKB Parser

Примечания

Категория:Форматы файлов Категория:Форматы файлов ГИС Категория:JSON