Dieses Dokument stellt eine eigenständige Referenz dar, die die Well-Known Text Representation of Geometry beschreibt, die vollständig im Simple Features Access-Standard, Abschnitt 7 spezifiziert ist (TODO: Stellen Sie einen Link direkt zu diesem Abschnitt bereit, wenn eine HTML-Version online ist).
ACHTUNG: Dies ist noch in Arbeit und sollte noch nicht als endgültig angesehen werden. Wir hoffen aber, relativ bald eine fertige Version zu haben.
TODO: Beschreiben Sie, was WKT ist und wofür es verwendet wird.
Dieses Repository soll eine definitive Referenz für Well Known Text sein. Wenn Sie jemals frustriert waren, die offizielle Referenz zu finden, helfen Sie uns bitte! Pull-Requests werden empfohlen. Wir benötigen eine offizielle Überprüfung, bevor dies zu einer endgültigen Referenz wird, aber wir sollten es wiederholen, um es nützlicher zu machen. Im gesamten Text gibt es viele Aufgaben, und wir werden wahrscheinlich dazu übergehen, Github-Probleme zu verwenden. Aber wir hoffen auch, dass dies eine „Kleinigkeit“ und keine große Sache wird, sondern dass wir einfach zu einer iterativen Verbesserung kommen und sie „ausliefern“.
Well Known Text wird im Folgenden formal definiert, aber es ist einfacher, einen Eindruck davon zu bekommen, wenn man mit einigen Beispielen beginnt.
Geometrietyp | Textwörtliche Darstellung | Kommentar |
---|---|---|
Punkt | PUNKT (10 10) | ein Punkt |
LineString | LINIENSTRING (10 10, 20 20, 30 40) | ein LineString mit 3 Punkten |
Polygon | POLYGON ((10 10, 10 20, 20 20, 20 15, 10 10)) | ein Polygon mit 1 Außenring und 0 Innenringen |
Mehrpunkt | MEHRPUNKT ((10 10), (20 20)) | ein MultiPoint mit 2 Punkten |
MultiLineString | MULTILINESTRING ((10 10, 20 20), (15 15, 30 15)) | ein MultiLineString mit 2 Linienzügen |
MultiPolygon | MULTIPOLYGON ( ((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 70, 80 60, 60 60 )) ) | ein MultiPolygon mit 2 Polygonen |
GeomCollection | GeometryCollection ( POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20) ) | eine GeometryCollection bestehend aus 2 Point-Werten und einem LineString-Wert |
Polyeder | Polyeder Z ( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)) , ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), (( 0 0 1, 1 0 1, 1 1 1, 0 1 1. 0 0 1)) ) | Ein Polyederwürfel, Ecke im Ursprung und gegenüberliegende Ecke bei (1, 1, 1). |
Zinn | Zinn Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 0 0 1, 0 0 0)), ((1 0 0, 0 1 0, 0 0 1, 1 0 0)), ) | Ein Tetraeder (4 dreieckige Flächen), Ecke im Ursprung und jede Einheit eine Koordinatenziffer. |
Punkt | Punkt Z (10 10 5) | Ein 3D-Punkt |
Punkt | Punkt ZM (10 10 5 40) | derselbe 3D-Punkt mit einem M-Wert von 40 |
Punkt | Punkt M (10 10 40) | ein 2D-Punkt mit einem M-Wert von 40 |
TODO: Schauen Sie sich diese Beispiele noch einmal an. Sie stammen direkt aus der Spezifikation, aber es ist wahrscheinlich besser, mit dem Kern zu beginnen. Wikipedia macht es viel besser, vielleicht kopieren Sie einfach ihre, auch mit den schönen Bildern: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
Hinweis: Die Kernspezifikation enthält 4 BNF-Definitionen für jeweils 2D-, 3D- und „gemessene“ Versionen. Im Moment beziehen wir nur die zweite (nicht gemessene) ein.
Die bekannte Textdarstellung der Geometrie wird unten mithilfe von BNF definiert.
Die Textdarstellung der implementierten instanziierbaren Geometrietypen muss dieser Grammatik entsprechen. Bei bekannten Texten wird die Groß-/Kleinschreibung nicht beachtet.
Hinweis: Alle Produktionen sind nach Koordinatentyp getrennt. Dies bedeutet, dass zwei beliebige Unterelemente eines Elements immer denselben Koordinatentyp haben, der der Koordinatentyp des größeren enthaltenden Elements ist.
Die Grammatik in diesem und dem folgenden Abschnitt wurde entwickelt, um eine kompakte und lesbare Textdarstellung geometrischer Objekte zu unterstützen. Die Darstellung eines geometrischen Objekts, das aus einer Reihe homogener Komponenten besteht, enthält nicht die Tags für jede eingebettete Komponente. Dieser erste Satz von Produktionen dient der Definition eines Literals mit doppelter Genauigkeit.
<x> ::= <signed numeric literal>
<y> ::= <signed numeric literal>
<z> ::= <signed numeric literal>
<m> ::= <signed numeric literal>
<quoted name> ::= <double quote> <name> <double quote>
<name> ::= <letters>
<letters> ::= (<letter>)*
<letter> ::= <simple Latin letter>|<digit>|<special>
<simple Latin letter> ::= <simple Latin upper case letter>|<simple Latin lower case letter>
<signed numeric literal> ::= {<sign>}<unsigned numeric literal>
<unsigned numeric literal> ::= <exact numeric literal>|<approximate numeric literal>
<approximate numeric
literal> ::=
<mantissa>E<exponent>
<mantissa> ::= <exact numeric literal>
<exponent> ::= <signed integer>
<exact numeric literal> ::= <unsigned integer>{<decimal point>{<unsigned integer>}}|<decimal point><unsigned integer>
<signed integer> ::= {<sign>}<unsigned integer>
<unsigned integer> ::= (<digit>)*
<left delimiter> ::= <left paren>|<left bracket> // must match balancing right delimiter
<right delimiter> ::= <right paren>|<right bracket> // must match balancing left delimiter
<special> ::= <right paren>|<left paren>|<minus sign>|<underscore>|<period>|<quote>|<space>
<sign> ::= <plus sign> | <minus sign>
<decimal point> ::= <period> | <comma>
<empty set> ::= EMPTY
<minus sign> ::= -
<left paren> ::= (
<right paren> ::= )
<left bracket> ::= [
<right bracket> ::= ]
<period> ::= .
<plus sign> ::= +
<double quote> ::= "
<quote> ::= '
<comma> ,
<underscore> ::= _
<digit> ::= 0|1|2|3|4|5|6|7|8|9
<simple Latin lower caseletter> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
<simple Latin upper case letter> ::= A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
<space>= " "// unicode "U+0020" (space)
TODO: Holen Sie sich hier eine bessere Formatierung. Das CQL.bnf fühlt sich viel sauberer an, aber es scheint ein anderes BNF zu verwenden, also muss ich herausfinden, wie das alles funktioniert. Diese könnten wahrscheinlich in separaten Dokumenten untergebracht werden und das Hauptdokument übersichtlicher halten – erläutern Sie einfach, wie es funktioniert, und nennen Sie Beispiele
Die folgende BNF definiert zweidimensionale Geometrien in (x, y)-Koordinatenräumen. Mit Ausnahme der Hinzufügung von Polyederflächen sind diese Strukturen gegenüber früheren Ausgaben dieser Norm unverändert.
<point> ::= <x> <y>
<geometry tagged text> ::= <point tagged text> | <linestring tagged text> | <polygon tagged text> | <triangle tagged text> | <polyhedralsurface tagged text> | <tin tagged text> | <multipoint tagged text> | <multilinestring tagged text> | <multipolygon tagged text>| <geometrycollection tagged text>
<point tagged text> ::= point <point text>
<linestring tagged text> ::= linestring <linestring text>
<polygon tagged text> ::= polygon <polygon text>
<polyhedralsurface tagged text> ::= polyhedralsurface <polyhedralsurface text>
<triangle tagged text> ::= triangle <polygon text>
<tin tagged text> tin <polyhedralsurface text>
<multipoint tagged text> ::= multipoint <multipoint text>
<multilinestring tagged text> ::= multilinestring <multilinestring text>
<multipolygon tagged text> ::= multipolygon <multipolygon text>
<geometrycollection tagged text> ::= geometrycollection
<geometrycollection text>
<point text> ::= <empty set> | <left paren> <point> <right paren>
<linestring text> ::= <empty set> | <left paren> <point> {<comma> <point>}* <right paren>
<polygon text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
<polyhedralsurface text> ::= <empty set> | <left paren> <polygon text> {<comma> <polygon text>}* <right paren>
<multipoint text> ::= <empty set> | <left paren> <point text> {<comma> <point text>}* <right paren>
<multilinestring text> ::= <empty set> | <left paren> <linestring text> {<comma> <linestring text>}* <right paren>
<multipolygon text> ::= <empty set> | <left paren> <polygon text> {<comma> <polygon text>}* <right paren>
<geometrycollection text> ::= <empty set> | <left paren> <geometry tagged text> {<comma> <geometry tagged text>}* <right paren>