توفر هذه الوثيقة مرجعًا مستقلاً يصف تمثيل النص المعروف للهندسة، والذي تم تحديده بالكامل في معيار الوصول إلى الميزات البسيطة، القسم 7 (المهام المطلوبة: قم بتوفير رابط مباشر لذلك القسم عندما يكون هناك إصدار html عبر الإنترنت).
تحذير: هذا العمل قيد التقدم، ولا ينبغي اعتباره نهائيًا بأي شكل من الأشكال. لكننا نأمل أن نحصل على نسخة نهائية قريبًا نسبيًا.
المهام: وصف ما هو WKT وما يُستخدم من أجله.
يهدف هذا المستودع إلى أن يكون مرجعًا نهائيًا للنص المعروف. إذا شعرت بالإحباط من قبل أثناء محاولتك العثور على المرجع الرسمي، فيرجى المساعدة! يتم تشجيع طلبات السحب. سنحتاج إلى بعض المراجعة الرسمية قبل أن يصبح هذا مرجعًا نهائيًا، ولكن يجب علينا التكرار لجعله أكثر فائدة. هناك الكثير من المهام في جميع أنحاء النص، ومن المحتمل أن نتطور لاستخدام مشكلات جيثب. لكننا نأمل أيضًا أن نجعل هذا أمرًا "صغيرًا"، وليس أمرًا كبيرًا، ما عليك سوى الوصول إلى تحسين متكرر و"شحنه".
يتم تعريف النص المعروف بشكل رسمي أدناه، ولكن من الأسهل التعرف عليه من خلال البدء ببعض الأمثلة.
نوع الهندسة | التمثيل الحرفي للنص | تعليق |
---|---|---|
نقطة | نقطة (10 10) | نقطة |
سلسلة الخط | الخطوط (10 10، 20 20، 30 40) | LineString مع 3 نقاط |
مضلع | المضلع ((10 10، 10 20، 20 20، 20 15، 10 10)) | مضلع به حلقة خارجية واحدة و0 حلقات داخلية |
متعدد النقاط | نقاط متعددة ((10 10)، (20 20)) | نقطة متعددة بنقطتين |
سلسلة متعددة الخطوط | خطوط متعددة ((10 10، 20 20)، (15 15، 30 15)) | MultiLineString مع سلسلتين |
متعدد المضلعات | متعدد المضلعات ((((10 10, 10 20, 20 20, 20 15, 10 10))), ((60 60, 70 70, 80 60, 60 60))) | MultiPolygon مع مضلعين |
GeomCollection | مجموعة الهندسة ( POINT (10 10)، POINT (30 30)، LINESTRING (15 15، 20 20)) | مجموعة GeometryCollection تتكون من قيمتين نقطيتين وقيمة 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) | نفس النقطة ثلاثية الأبعاد بقيمة M 40 |
نقطة | النقطة م (10 10 40) | نقطة ثنائية الأبعاد بقيمة M تبلغ 40 |
المهام المطلوبة: قم بإعادة النظر في هذه الأمثلة، فهي مستوحاة مباشرة من المواصفات، ولكن من الأفضل أن تبدأ بالنواة. تقوم ويكيبيديا بذلك بشكل أفضل بكثير، وربما تنسخ صورها فقط، مع الصور الجميلة أيضًا: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
ملاحظة: تحتوي المواصفات الأساسية على 4 تعريفات BNF، للإصدارات ثنائية وثلاثية الأبعاد و"المُقاسة" لكل منها. في الوقت الحالي، سنقوم فقط بتضمين العنصر الثاني (غير المُقاس)
يتم تعريف تمثيل النص المعروف للهندسة أدناه باستخدام 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>