이 문서는 Simple Feature Access 표준 섹션 7에 완전히 지정된 기하학의 잘 알려진 텍스트 표현을 설명하는 독립형 참조를 제공합니다(해야할 일: 온라인에 HTML 버전이 있는 경우 해당 섹션으로 직접 연결되는 링크 제공).
경고: 이 작업은 진행 중인 작업이므로 아직 어떤 식으로든 최종적인 것으로 간주되어서는 안 됩니다. 하지만 우리는 비교적 빨리 완성된 버전을 갖기를 희망합니다.
TODO: WKT가 무엇이고 어떤 용도로 사용되는지 설명하세요.
이 저장소는 Well Known Text에 대한 최종 참조가 되는 것을 목표로 합니다. 공식 참조 자료를 찾는 데 어려움을 겪은 적이 있다면 도와주세요! Pull Request가 권장됩니다. 이것이 최종적인 참조가 되기 전에 공식적인 검토가 필요하지만 더 유용하게 만들기 위해 반복해야 합니다. 텍스트 전반에 걸쳐 할 일이 많으며 github 문제를 사용하는 방향으로 발전할 것입니다. 그러나 우리는 이것을 큰 문제가 아닌 '사소한' 일로 만들고 반복적인 개선을 통해 '출시'하기를 바라고 있습니다.
잘 알려진 텍스트는 아래에 공식적으로 정의되어 있지만 몇 가지 예를 통해 시작하면 이해하기가 더 쉽습니다.
기하학 유형 | 텍스트 리터럴 표현 | 논평 |
---|---|---|
가리키다 | 포인트 (10 10) | 포인트 |
유도선 | 라인스트링(10 10, 20 20, 30 40) | 3개의 점이 있는 유도선 |
다각형 | 다각형 ((10 10, 10 20, 20 20, 20 15, 10 10)) | 1개의 externalRing과 0개의 InteriorRing이 있는 다각형 |
다지점 | 다중점 ((10 10), (20 20)) | 2개의 점이 있는 MultiPoint |
다중선문자열 | 다중 문자열((10 10, 20 20), (15 15, 30 15)) | 2개의 라인스트링이 있는 MultiLineString |
다중 다각형 | 다중 다각형 ( ((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 70, 80 60, 60 60 )) ) | 2개의 다각형이 있는 MultiPolygon |
검컬렉션 | GeometryCollection ( POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20) ) | 2개의 Point 값과 LineString 값으로 구성된 GeometryCollection |
다면체 | 다면체 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)) ) | 원점의 모서리와 (1, 1, 1)의 반대 모서리인 다면체 정육면체입니다. |
주석 | 주석 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)), ) | 사면체(4개의 삼각형 면), 원점의 모서리 및 각 단위 좌표 숫자. |
가리키다 | 점 Z(10 10 5) | 3D 포인트 |
가리키다 | 포인트 ZM (10 10 5 40) | M 값이 40인 동일한 3D 점 |
가리키다 | M점 (10 10 40) | M 값이 40인 2D 점 |
TODO: 이 예제를 다시 살펴보세요. 이는 사양에서 바로 나온 것이지만 코어부터 시작하는 것이 더 나을 것입니다. Wikipedia는 훨씬 더 나은 기능을 제공합니다. 아마도 멋진 그림과 함께 Wikipedia의 것을 복사하면 됩니다: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
참고: 핵심 사양에는 각각 2D, 3D 및 '측정된' 버전에 대한 4개의 BNF 정의가 있습니다. 지금은 2D 항목(측정되지 않음)만 포함하겠습니다.
기하학의 잘 알려진 텍스트 표현은 BNF를 사용하여 아래에 정의됩니다.
구현된 인스턴스화 가능한 도형 유형의 텍스트 표현은 이 문법을 준수해야 합니다. 잘 알려진 텍스트는 대소문자를 구분하지 않습니다.
참고: 모든 제작은 좌표 유형별로 구분됩니다. 즉, 모든 요소의 두 하위 요소는 항상 동일한 좌표 유형을 가지며, 이는 더 큰 포함 요소의 좌표 유형이 됩니다.
이 절과 다음 절의 문법은 기하학적 객체의 간결하고 읽기 쉬운 텍스트 표현을 지원하도록 설계되었습니다. 동종 구성요소 세트로 구성된 기하학적 개체의 표현에는 포함된 각 구성요소에 대한 태그가 포함되지 않습니다. 이 첫 번째 프로덕션 세트는 배정밀도 리터럴을 정의하는 것입니다.
<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: 여기에서 더 나은 형식을 얻으세요. CQL.bnf는 훨씬 깔끔한 느낌이지만 다른 BNF를 사용하는 것 같으므로 이 모든 것이 어떻게 작동하는지 파악해야 합니다. 이것들은 아마도 별도의 문서에 들어갈 수 있고 기본 문서를 더욱 깔끔하게 유지할 수 있습니다. 작동 방식을 설명하고 예를 들어보세요.
다음 BNF는 (x, y) 좌표 공간에서 2차원 기하학을 정의합니다. 다면체 표면의 추가를 제외하고 이러한 구조는 이 표준의 이전 버전에서 변경되지 않았습니다.
<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>