الاسم
ST_AsX3D — تُعيد شكلًا هندسيًا بصيغة عنصر عقدة X3D xml: ISO-IEC-19776-1.2-X3DEncodings-XML
المختصر
text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);
الوصف
تُعيد شكلًا هندسيًا كعنصر عقدة بتنسيق X3D xml http://www.web3d.org/standards/number/19776-1. إذا لم تُحدَّد maxdecimaldigits (الدقة) فالقيمة الافتراضية 15.
|
|
|
توجد خيارات متعددة لتحويل أشكال PostGIS الهندسية إلى X3D، لأن أنواع الأشكال الهندسية في X3D لا تقابل أنواع PostGIS مباشرة، وقد تجنّبنا بعض أنواع X3D الأحدث التي قد تكون مقابلات أفضل لأن معظم أدوات العرض لا تدعمها حاليًا. وهذه هي المقابلات التي استقر عليها اختيارنا. لا تتردد في نشر بلاغ خطأ إن كانت لديك أفكار حول ذلك أو حول طرق نتيح بها للناس تحديد المقابلات التي يفضّلونها. فيما يلي كيفية مقابلة أنواع PostGIS ثنائية/ثلاثية الأبعاد حاليًا بأنواع X3D |
الوسيط 'options' حقل بتّات (bitfield). في PostGIS 2.2+، يُستخدم لتحديد ما إذا كانت الإحداثيات تُمثَّل بعقدة X3D GeoCoordinates الجيومكانية، وكذلك ما إذا كان يجب قلب المحورين x/y. افتراضيًا، تُخرج ST_AsX3D بصيغة قاعدة البيانات (long,lat أو X,Y)، لكن قد يُفضَّل ترتيب X3D الافتراضي lat/lon، y/x.
-
0: X/Y بترتيب قاعدة البيانات (مثلًا long/lat = X,Y هو الترتيب القياسي في قاعدة البيانات)، القيمة الافتراضية، وإحداثيات غير مكانية (مجرد وسم Coordinate العادي).
-
1: قلب X وY. إذا استُخدم مع مفتاح خيار GeoCoordinate، فسيكون الإخراج افتراضيًا "latitude_first" وستُقلب الإحداثيات أيضًا.
-
2: إخراج الإحداثيات بصيغة GeoSpatial GeoCoordinates. يُطلق هذا الخيار خطأً إذا لم تكن الأشكال الهندسية بنظام WGS 84 long lat (srid: 4326). وهذا حاليًا النوع الوحيد المدعوم من GeoCoordinate. راجع مواصفات X3D الخاصة بتحديد النظام المرجعي المكاني.. سيكون الإخراج الافتراضي
GeoCoordinate geoSystem='"GD" "WE" "longitude_first"'. وإذا كنت تفضّل الإعداد الافتراضي لـ X3DGeoCoordinate geoSystem='"GD" "WE" "latitude_first"'فاستخدم(2 + 1)=3
| نوع PostGIS | نوع X3D ثنائي الأبعاد | نوع X3D ثلاثي الأبعاد |
|---|---|---|
| LINESTRING | لم يُنفَّذ بعد - سيكون PolyLine2D | LineSet |
| MULTILINESTRING | لم يُنفَّذ بعد - سيكون PolyLine2D | IndexedLineSet |
| MULTIPOINT | Polypoint2D | PointSet |
| POINT | يُخرج الإحداثيات مفصولة بمسافات | يُخرج الإحداثيات مفصولة بمسافات |
| (MULTI) POLYGON, POLYHEDRALSURFACE | ترميز X3D غير صالح | IndexedFaceSet (تُخرَج الحلقات الداخلية حاليًا كمجموعة وجوه أخرى) |
| TIN | TriangleSet2D (لم يُنفَّذ بعد) | IndexedTriangleSet |
|
|
|
دعم الأشكال الهندسية ثنائية الأبعاد لم يكتمل بعد. تُرسم الحلقات الداخلية حاليًا كمضلعات منفصلة فقط. ونحن نعمل على ذلك. |
تحدث تطورات كثيرة في الفضاء ثلاثي الأبعاد، لا سيما مع تكامل X3D مع HTML5
يوجد أيضًا عارض X3D مفتوح المصدر جيد يمكنك استخدامه لعرض الأشكال الهندسية المرسومة. Free Wrl http://freewrl.sourceforge.net/ ملفاته التنفيذية متاحة لأنظمة Mac وLinux وWindows. استخدم FreeWRL_Launcher المرفق لعرض الأشكال الهندسية.
اطّلع أيضًا على عارض X3D المبسَّط لـ PostGIS الذي يستخدم هذه الدالة ومجموعة أدوات x3dDom مفتوحة المصدر لـ html/js.
متاحة منذ: 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML
حُسّنت في: 2.2.0: دعم GeoCoordinates وقلب المحاور (x/y، long/lat). راجع الخيارات للتفاصيل.
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.
تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).
تدعم هذه الدالة المثلثات وأسطح الشبكات المثلثية غير المنتظمة (TIN).
مثال: إنشاء مستند X3D كامل الوظائف - سيولّد هذا مكعبًا يمكن عرضه في FreeWrl وعارضات X3D الأخرى.
SELECT '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
<Scene>
<Transform>
<Shape>
<Appearance>
<Material emissiveColor=''0 0 1''/>
</Appearance
> ' ||
ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((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)) )')) ||
'</Shape>
</Transform>
</Scene>
</X3D
>' As x3ddoc;
x3ddoc
--------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
<Scene>
<Transform>
<Shape>
<Appearance>
<Material emissiveColor='0 0 1'/>
</Appearance>
<IndexedFaceSet coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'>
<Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' />
</IndexedFaceSet>
</Shape>
</Transform>
</Scene>
</X3D>
مباني PostGIS
انسخ إخراج هذا الاستعلام والصقه في عارض مشاهد x3d ثم انقر Show
SELECT string_agg('<Shape
>' || ST_AsX3D(ST_Extrude(geom, 0,0, i*0.5)) ||
'<Appearance>
<Material diffuseColor="' || (0.01*i)::text || ' 0.8 0.2" specularColor="' || (0.05*i)::text || ' 0 0.5"/>
</Appearance>
</Shape
>', '')
FROM ST_Subdivide(ST_Letters('PostGIS'),20) WITH ORDINALITY AS f(geom,i);
مبانٍ مُشكَّلة بتقسيم PostGIS والبثق (extrusion)
مثال: مثمَّن مرفوع 3 وحدات وبدقة عشرية 6
SELECT ST_AsX3D(
ST_Translate(
ST_Force_3d(
ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
3)
,6) As x3dfrag;
x3dfrag
--------
<IndexedFaceSet coordIndex="0 1 2 3 4 5 6 7">
<Coordinate point="15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 " />
</IndexedFaceSet>
مثال: TIN
SELECT ST_AsX3D(ST_GeomFromEWKT('TIN (((
0 0 0,
0 0 1,
0 1 0,
0 0 0
)), ((
0 0 0,
0 1 0,
1 1 0,
0 0 0
))
)')) As x3dfrag;
x3dfrag
--------
<IndexedTriangleSet index='0 1 2 3 4 5'
><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>
مثال: خطوط متعددة مغلقة (حدود مضلع ذي ثقوب)
SELECT ST_AsX3D(
ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10),
(12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))')
) As x3dfrag;
x3dfrag
--------
<IndexedLineSet coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'>
<Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' />
</IndexedLineSet>