WKT (WKT)
WKT | |
---|---|
Расширение |
. |
MIME-тип | application/wkt |
Тип формата | ГИС формат файла |
Открытый формат? | да |
WKB | |
---|---|
Расширение |
. |
Тип формата | ГИС формат файла |
Открытый формат? | да |
WKT (Well-known text) — текстовый формат представления векторной геометрии и описания систем координат. Для хранения этой же информации в базах данных используется двоичный эквивалентный формат- WKB (Well-Known Binary). Форматы являются частью технологии "Simple Feature Access", созданной для предоставления общего интерфейса для обмена пространственными данными между различными программами и сервисами.
История
[править | править код]Форматы были первоначально определены Open Geospatial Consortium (OGC) в документе OGC 99-049[1]. В настоящее время актуальная редакция — 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 должны быть определены противоположным образом по сравнению с внешним кольцом, в данном случае по часовой стрелке.[2]
Тип | Примеры | |
---|---|---|
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),
|
Тип | Примеры | |
---|---|---|
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),
| |
MultiPolygon | MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
| |
MULTIPOLYGON (((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
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 указывающее тип геометрии:
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)[3][4].
- Например:
SRID=4326;POINT(-44.3 60.1)
описывает долготу/широту в системе координат WGS 84.
AGF Text – Формат геометрии Autodesk
- Расширение стандарта OGC (актуальное на тот момент), включающий кривые.
- Наиболее заметно используется в MapGuide.[5]
Поддержка Базами Данных
[править | править код]- PostgreSQL с модулем PostGIS 2.0
- Oracle Spatial 9i, 10g, 11g
- OmniSci с версии 4.0
- MySQL с версии 4.1[6]
- MariaDB, все версии
- Neo4j[7]
- 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
Примечания
[править | править код]- ↑ Simple Feature Access - Part 2 . Дата обращения: 24 января 2019. Архивировано 24 января 2019 года.
- ↑ См. спецификацию реализации OGC для географической информации - Simple Feature Access, раздел 6.1.11.1. http://www.opengeospatial.org/standards/sfa Архивная копия от 29 января 2017 на Wayback Machine
- ↑ postgis/ZMSgeoms.txt at 2.1.0 · postgis/postgis · GitHub . Дата обращения: 4 февраля 2019. Архивировано 24 февраля 2021 года.
- ↑ ST_GeomFromEWKT . Дата обращения: 4 февраля 2019. Архивировано 24 февраля 2021 года.
- ↑ Архивированная копия . Дата обращения: 4 февраля 2019. Архивировано из оригинала 12 ноября 2017 года.
- ↑ Well-Known Text (WKT) Format Архивная копия от 25 января 2019 на Wayback Machine, Документация MySQL
- ↑ Neo4j Spatial . Дата обращения: 24 января 2019. Архивировано 30 января 2019 года.