GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.9.3. صيغ أخرى
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_AsX3D

الصفحة الأصلية بالإنجليزية postgis.net ↗

الاسم

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"'. وإذا كنت تفضّل الإعداد الافتراضي لـ X3D GeoCoordinate 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>