GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.3. دوال إنشاء الأشكال الهندسية
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_MakeLine

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

الاسم

ST_MakeLine — تُنشئ خطًا (LineString) من أشكال هندسية من نوع Point أو MultiPoint أو LineString.

المختصر

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

الوصف

تُنشئ خطًا (LineString) يحتوي على نقاط الأشكال الهندسية من نوع Point أو MultiPoint أو LineString. تتسبب أنواع الأشكال الهندسية الأخرى في حدوث خطأ.

الصيغة 1: تقبل شكلين هندسيين مُدخلين

الصيغة 2: تقبل مصفوفة من الأشكال الهندسية

الصيغة 3: دالة تجميعية تقبل مجموعة صفوف من الأشكال الهندسية. لضمان ترتيب الأشكال المُدخلة استخدم ORDER BY في استدعاء الدالة، أو استعلامًا فرعيًا يتضمن عبارة ORDER BY.

تُدمج العقد المتكررة في بداية الخطوط المُدخلة في نقطة واحدة. أما النقاط المتكررة في مُدخلات Point وMultiPoint فلا تُدمج. يمكن استخدام ST_RemoveRepeatedPoints لدمج النقاط المتكررة في الخط الناتج.

تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.

متاحة منذ: 2.3.0 - أُضيف دعم عناصر الإدخال من نوع MultiPoint

متاحة منذ: 2.0.0 - أُضيف دعم عناصر الإدخال من نوع LineString

متاحة منذ: 1.4.0 - أُضيفت ST_MakeLine(geomarray). حُسّنت الدوال التجميعية ST_MakeLine لمعالجة عدد أكبر من النقاط بسرعة أكبر.

أمثلة: صيغة المُدخلين

إنشاء خط مكوّن من نقطتين.

SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );

          st_astext
---------------------
 LINESTRING(1 2,3 4)

إنشاء خط ثلاثي الأبعاد من نقطتين ثلاثيتي الأبعاد.

SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) ));

                st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)

إنشاء خط من خطين منفصلين.

select ST_AsText( ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)' ) );

          st_astext
-----------------------------
 LINESTRING(0 0,1 1,2 2,3 3)

أمثلة: صيغة المصفوفة

إنشاء خط من مصفوفة مكوّنة من استعلام فرعي مع ترتيب.

SELECT ST_MakeLine( ARRAY( SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time) );

إنشاء خط ثلاثي الأبعاد من مصفوفة نقاط ثلاثية الأبعاد

SELECT ST_AsEWKT( ST_MakeLine(
          ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]  ));

                st_asewkt
-------------------------
LINESTRING(1 2 3,3 4 5,6 6 6)

أمثلة: الصيغة التجميعية

يستعلم هذا المثال عن تسلسلات زمنية من نقاط GPS من مجموعة مسارات، ويُنشئ سجلًا واحدًا لكل مسار. الأشكال الناتجة خطوط (LineString) مكوّنة من نقاط مسار GPS بترتيب الحركة.

يؤدي استخدام ORDER BY في الدالة التجميعية إلى خط (LineString) مرتب ترتيبًا صحيحًا.

SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
        FROM gps_points As gps
        GROUP BY track_id;

قبل PostgreSQL 9 يمكن استخدام الترتيب في استعلام فرعي. لكن خطة الاستعلام قد لا تحترم أحيانًا ترتيب الاستعلام الفرعي.

SELECT gps.track_id, ST_MakeLine(gps.geom) As geom
        FROM ( SELECT track_id, gps_time, geom
                        FROM gps_points ORDER BY track_id, gps_time ) As gps
        GROUP BY track_id;