Dokumen ini memberikan referensi mandiri yang menjelaskan Representasi Teks Terkenal tentang Geometri, yang sepenuhnya ditentukan dalam standar Akses Fitur Sederhana, bagian 7 (TODO: berikan tautan langsung ke bagian tersebut ketika ada versi html online).
PERINGATAN: Hal ini masih dalam proses dan belum dapat dianggap definitif dalam hal apa pun. Namun kami berharap untuk memiliki versi yang selesai dalam waktu dekat.
TODO: Jelaskan apa itu WKT dan kegunaannya.
Repositori ini bertujuan untuk menjadi referensi definitif untuk Teks Terkenal. Jika Anda pernah merasa frustrasi saat mencari referensi resmi, mohon bantuannya! Permintaan Tarik dianjurkan. Kami memerlukan beberapa tinjauan resmi sebelum ini menjadi referensi yang pasti, namun kami harus mengulanginya agar lebih bermanfaat. Banyak tugas yang harus dilakukan di seluruh teks, dan kemungkinan besar kami akan berevolusi menggunakan masalah github. Namun kami juga berharap menjadikan hal ini sebagai hal yang 'kecil', bukan masalah besar, cukup lakukan perbaikan berulang dan 'kirimkan'.
Teks Terkenal didefinisikan secara formal di bawah ini, tetapi akan lebih mudah untuk memahaminya dengan memulai dengan beberapa contoh.
Tipe Geometri | Representasi Literal Teks | Komentar |
---|---|---|
Titik | TITIK (10 10) | sebuah Poin |
LineString | GARIS GARIS (10 10, 20 20, 30 40) | LineString dengan 3 poin |
Poligon | POLIGON ((10 10, 10 20, 20 20, 20 15, 10 10)) | sebuah Poligon dengan 1 Cincin luar dan 0 Cincin dalam |
Banyak titik | GANDA ((10 10), (20 20)) | MultiPoint dengan 2 poin |
MultiLineString | MULTILINESTRING ((10 10, 20 20), (15 15, 30 15)) | MultiLineString dengan 2 linestring |
MultiPoligon | MULTIPOLIGON ( ((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 70, 80 60, 60 60 )) ) | MultiPoligon dengan 2 poligon |
Koleksi Geom | Koleksi Geometri ( POINT (10 10), POINT (30 30), LINESTRING (15 15, 20 20) ) | sebuah GeometryCollection yang terdiri dari 2 nilai Titik dan satu nilai LineString |
Polihedron | Polihedron 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)) ) | Sebuah kubus polihedron, sudutnya berada di titik asal dan sudut berhadapan di (1, 1, 1). |
Timah | Timah 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)), ) | Sebuah tetrahedron (4 sisi segitiga), sudut di titik asal dan setiap digit koordinat satuan. |
Titik | Titik Z (10 10 5) | Titik 3D |
Titik | Titik ZM (10 10 5 40) | Titik 3D yang sama dengan nilai M 40 |
Titik | Poin M (10 10 40) | Titik 2D dengan nilai M 40 |
TODO: Lihat kembali contoh-contoh ini, ini langsung dari spesifikasinya, tetapi mungkin lebih baik memulai dengan intinya. Wikipedia melakukannya dengan lebih baik, mungkin cukup menyalin milik mereka, dengan gambar yang bagus juga: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
Catatan: Spesifikasi inti memiliki 4 definisi BNF, masing-masing untuk versi 2d, 3d, dan 'terukur'. Untuk saat ini kami hanya menyertakan yang 2d (tidak terukur)
Representasi Teks Geometri yang Terkenal didefinisikan di bawah ini menggunakan BNF.
Representasi teks dari Tipe Geometri yang dapat dipakai yang diterapkan harus sesuai dengan tata bahasa ini. Teks terkenal tidak peka huruf besar-kecil.
Catatan: Semua produksi dipisahkan berdasarkan jenis koordinat. Artinya, dua subelemen dari elemen apa pun akan selalu memiliki tipe koordinat yang sama, yang akan menjadi tipe koordinat dari elemen yang memuatnya lebih besar.
Tata bahasa dalam klausa ini dan klausa berikut telah dirancang untuk mendukung representasi tekstual objek geometris yang ringkas dan mudah dibaca. Representasi objek geometris yang terdiri dari sekumpulan komponen homogen tidak menyertakan tag untuk setiap komponen yang disematkan. Rangkaian produksi pertama ini adalah untuk mendefinisikan literal presisi ganda.
<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: Dapatkan format yang lebih baik di sini. CQL.bnf terasa jauh lebih bersih, tetapi sepertinya menggunakan BNF yang berbeda, jadi perlu mencari tahu cara kerjanya. Ini mungkin dapat ditempatkan dalam dokumen terpisah, dan menjaga dokumen utama tetap bersih - cukup bahas cara kerjanya dan berikan contoh
BNF berikut mendefinisikan geometri dua dimensi dalam ruang koordinat (x, y). Dengan pengecualian penambahan permukaan polihedral, struktur ini tidak berubah dari edisi sebelumnya standar ini.
<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>