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

ST_SquareGrid

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

الاسم

ST_SquareGrid — تُعيد مجموعة من مربعات الشبكة وفهارس الخلايا التي تغطي حدود الشكل الهندسي المُدخل تغطية كاملة.

المختصر

setof record ST_SquareGrid(float8 size, geometry bounds);

الوصف

تنطلق من مفهوم تبليط المستوى بالمربعات. لكل نظام مرجعي مكاني مستوٍ معيّن وطول حافة معيّن، وبدءًا من أصل النظام المرجعي، يوجد تبليط مربع وحيد للمستوى، Tiling(SRS, Size). تجيب هذه الدالة عن السؤال: ما خلايا الشبكة في تبليط Tiling(SRS, Size) معيّن التي تتداخل مع حدود معيّنة.

النظام المرجعي المكاني للمربعات الناتجة هو النظام الذي يحدده الشكل الهندسي للحدود.

تؤدي مضاعفة طول حافة المربع إلى توليد تبليط أب جديد يتوافق تمامًا مع التبليط الأصلي. وتبليطات خرائط الويب القياسية في إسقاط Mercator ليست إلا شبكات مربعة بقوى العدد اثنين في مستوى Mercator.

متاحة منذ: 3.1.0

مثال: توليد شبكة بدرجة واحدة لدولة

ستملأ الشبكة كامل حدود الدولة، فإذا أردت المربعات التي تلامس الدولة فقط فعليك تصفيتها بعد ذلك باستخدام ST_Intersects.

WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom,4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT ST_AsText(geom)
  FROM grid

مثال: عدّ النقاط داخل المربعات (باستخدام شبكة مقطّعة واحدة)

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

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom

مثال: عدّ النقاط داخل المربعات باستخدام مجموعة شبكات لكل نقطة

يعطي هذا النتيجة نفسها التي يعطيها المثال الأول لكنه سيكون أبطأ مع عدد كبير من النقاط

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
       pts.geom
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom