เอกสารนี้มีการอ้างอิงแบบสแตนด์อโลนที่อธิบายการแสดงข้อความที่รู้จักกันดีของเรขาคณิต ซึ่งได้รับการระบุไว้โดยสมบูรณ์ในมาตรฐานการเข้าถึงคุณสมบัติอย่างง่าย ส่วนที่ 7 (สิ่งที่ต้องทำ: ให้ลิงก์ไปยังส่วนนั้นโดยตรงเมื่อมีเวอร์ชัน html ออนไลน์)
คำเตือน: นี่เป็นงานที่อยู่ในระหว่างดำเนินการ และยังไม่ควรได้รับการพิจารณาขั้นสุดท้ายแต่อย่างใด แต่เราหวังว่าจะมีเวอร์ชันที่เสร็จสมบูรณ์ในเร็วๆ นี้
สิ่งที่ต้องทำ: อธิบายว่า WKT คืออะไร และใช้เพื่ออะไร
พื้นที่เก็บข้อมูลนี้มีจุดมุ่งหมายเพื่อเป็นข้อมูลอ้างอิงขั้นสุดท้ายสำหรับ Well Known Text หากคุณเคยหงุดหงิดกับการพยายามค้นหาข้อมูลอ้างอิงอย่างเป็นทางการ โปรดช่วยด้วย! คำขอดึงได้รับการสนับสนุน เราจำเป็นต้องมีการตรวจสอบอย่างเป็นทางการก่อนที่จะกลายเป็นข้อมูลอ้างอิงที่ชัดเจน แต่เราควรทำซ้ำเพื่อให้มีประโยชน์มากขึ้น มีสิ่งที่ต้องทำมากมายตลอดทั้งข้อความ และเราอาจพัฒนาไปใช้ปัญหา GitHub แต่เรายังหวังที่จะทำให้สิ่งนี้เป็นเรื่อง 'เล็กน้อย' ไม่ใช่เรื่องใหญ่ เพียงแค่ทำการปรับปรุงซ้ำ ๆ และ 'จัดส่ง'
Well Known Text มีการกำหนดไว้อย่างเป็นทางการด้านล่าง แต่จะเข้าใจได้ง่ายขึ้นโดยเริ่มจากตัวอย่างบางส่วน
ประเภทเรขาคณิต | ข้อความเป็นตัวแทนตามตัวอักษร | ความคิดเห็น |
---|---|---|
จุด | คะแนน (10 10) | จุด |
LineString | ไลน์สตริง (10 10, 20 20, 30 40) | LineString มี 3 คะแนน |
รูปหลายเหลี่ยม | รูปหลายเหลี่ยม ((10 10, 10 20, 20 20, 20 15, 10 10)) | รูปหลายเหลี่ยมที่มีวงแหวนภายนอก 1 วงและวงแหวนภายใน 0 วง |
มัลติพอยต์ | หลายจุด ((10 10), (20 20)) | MultiPoint ที่มี 2 จุด |
MultiLineString | มัลติไลน์สตริง ((10 10, 20 20), (15 15, 30 15)) | MultiLineString ที่มี 2 เส้น |
มัลติโพลิกอน | มัลติโพลีกอน ( ((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 70, 80 60, 60 60 )) ) | MultiPolygon ที่มี 2 รูปหลายเหลี่ยม |
GeomCollection | GeometryCollection ( จุด (10 10), จุด (30 30), LINESTRING (15 15, 20 20) ) | GeometryCollection ประกอบด้วยค่า 2 จุดและค่า LineString |
รูปทรงหลายเหลี่ยม | รูปทรงหลายเหลี่ยม 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) | จุดสามมิติ |
จุด | จุด ZM (10 10 5 40) | จุด 3D เดียวกันกับค่า M เท่ากับ 40 |
จุด | จุดเอ็ม (10 10 40) | จุด 2D ที่มีค่า M เท่ากับ 40 |
สิ่งที่ต้องทำ: กลับมาดูตัวอย่างเหล่านี้อีกครั้ง ซึ่งมาจากข้อมูลจำเพาะโดยตรง แต่น่าจะดีกว่าถ้าเริ่มต้นด้วยแกนกลาง Wikipedia ทำได้ดีกว่ามากบางทีแค่คัดลอกของพวกเขาด้วยรูปภาพสวย ๆ เช่นกัน: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
หมายเหตุ: ข้อมูลจำเพาะหลักมีคำจำกัดความ BNF 4 แบบ สำหรับเวอร์ชัน 2d, 3d และ 'ที่วัด' ของแต่ละเวอร์ชัน สำหรับตอนนี้ เราจะรวมอันที่ 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)
สิ่งที่ต้องทำ: รับการจัดรูปแบบที่ดีขึ้นที่นี่ CQL.bnf ให้ความรู้สึกสะอาดกว่ามาก แต่ดูเหมือนว่าจะใช้ BNF ที่แตกต่างกัน ดังนั้น จึงต้องพิจารณาว่าทั้งหมดทำงานอย่างไร สิ่งเหล่านี้อาจอยู่ในเอกสารแยกกัน และช่วยให้เอกสารหลักสะอาดขึ้น - เพียงแค่พูดคุยถึงวิธีการทำงานและยกตัวอย่าง
BNF ต่อไปนี้จะกำหนดรูปทรงสองมิติในช่องว่างพิกัด (x, y) โครงสร้างเหล่านี้ไม่มีการเปลี่ยนแปลงจากมาตรฐานนี้ฉบับก่อนหน้านี้ ยกเว้นการเพิ่มพื้นผิวหลายเหลี่ยม
<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>