GISarabia.org
PostGIS › الدليل الرسمي › 9. الطوبولوجيا › 9.8. معالجة الطوبولوجيا
PostGIS 3.6 · Official Manual · ترجمة عربية

AddFace

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

الاسم

AddFace — تسجّل عنصرًا أوليًا من نوع وجه في طوبولوجيا وتحصل على معرّفه.

المختصر

bigint AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

الوصف

تسجّل عنصرًا أوليًا من نوع وجه في طوبولوجيا وتحصل على معرّفه.

بالنسبة إلى الوجه المضاف حديثًا، تُحدَّث الحواف المكوّنة لحدوده والحواف الواقعة داخله لتحمل قيمًا صحيحة في الحقلين left_face وright_face. كما تُحدَّث العقد المعزولة الواقعة داخل الوجه لتحمل قيمة صحيحة في الحقل containing_face.

[ملاحظة]

لا تستخدم هذه الدالة الحقلين next_left_edge وnext_right_edge في جدول الحواف ولا تضبطهما.

يُفترض أن تكون الطوبولوجيا الهدف صالحة (لا تحتوي حوافًا متقاطعة ذاتيًا). ويُطلق استثناء في الحالات التالية: إذا لم تكن حدود المضلع معرّفة بالكامل بواسطة حواف موجودة، أو إذا كان المضلع يتداخل مع وجه موجود.

إذا كان الشكل الهندسي apolygon موجودًا بالفعل بوصفه وجهًا، فعندئذٍ: إذا كانت قيمة force_new خطأ (false، وهي الافتراضية) يُعاد معرّف الوجه الموجود؛ وإذا كانت قيمة force_new صحيحة (true) فسيُسند معرّف جديد إلى الوجه المسجَّل حديثًا.

[ملاحظة]

عند إجراء تسجيل جديد لوجه موجود (force_new=true)، لن يُتخذ أي إجراء لمعالجة المراجع المعلّقة إلى الوجه الموجود في جداول الحواف والعقد والعلاقات، ولن يُحدَّث حقل MBR في سجل الوجه الموجود. ويقع على عاتق المستدعي التعامل مع ذلك.

[ملاحظة]

يجب أن يكون للشكل الهندسي apolygon قيمة srid نفسها المعرّفة للطوبولوجيا، وإلا فسيُطلق خطأ يفيد بأن النظام المرجعي المكاني غير صالح.

متاحة منذ: 2.0.0

أمثلة


-- first add the edges we use generate_series as an iterator (the below
-- will only work for polygons with < 10000 points because of our max in gs)
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
    FROM (SELECT  ST_NPoints(geom) AS npt, geom
            FROM
                (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
            )  As geoms) As facen CROSS JOIN generate_series(1,10000) As i
         WHERE i < npt;
-- result --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- then add the face -

SELECT topology.AddFace('ma_topo',
    ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid;
-- result --
faceid
--------
 1