أكثر

كيفية الحصول على النقطه الوسطى لمجموعة من النقاط في PostGIS؟

كيفية الحصول على النقطه الوسطى لمجموعة من النقاط في PostGIS؟


أستخدم PostgreSQL مع امتداد PostGIS.

لدي مجموعة من النقاط فيthe_geomعمود من جدولmyschema.myobjects. أريد إنشاء عبارة تحديد للحصول على النقطه الوسطى من هذه المجموعة ، لذلك من عبارة تحديد مثل هذا:

حدد the_geom من myschema.myobjects

أحتاج إلى العثور على الصيغة الصحيحة لبيان مثل:

حدد ST_AsText (ST_Centroid ((حدد the_geom من myshema.myobjects))) ؛

عليك استخدام وظيفة الاتحاد مثل هذا

حدد att1، st_centroid (st_union (geom)) مثل geom FROM schema.table GROUP BY att1؛

حتى تتمكن من الحصول على النقطه الوسطى من النقطة التي لها نفس السمة.


PostGIS له وظيفتان للجمع بين أشكال هندسية متعددة في هندسة واحدة يمكنك استخدامها كمدخلST_Centroid.

ST_Collect يجمع ببساطة مجموعة من الأشكال الهندسية دون تعديلها.

البديل،ST_Union، سوف "يحل" الأشكال الهندسية المتعددة ويزيل المكونات الزائدة عن الحاجة. ربما لا يكون هذا ما تريده لهذا التطبيق.

لمعرفة الفرق ، قارن:

حدد ST_AsText (ST_Centroid (ST_Union (geom))) من (القيم ('POINT (0 0)') ، ('POINT (2 2)') ، ('POINT (2 2)')) sq (geom) ؛ - نقطة (1 1)

و

حدد ST_AsText (ST_Centroid (ST_Collect (geom))) من (VALUES ('POINT (0 0)') ، ('POINT (2 2)') ، ('POINT (2 2)')) sq (geom) ؛ - POINT (1.33333333333333 1.33333333333333)

في هذه الحالة،ST_Unionأزال النقطة المكررة ، بينماST_Collectاحتفظت به.


إذا كنت تبحث عن أداء فاستخدم هذا الاستعلام:

حدد avg (ST_X (the_geom)) مثل lon ، متوسط ​​(ST_Y (the_geom)) مثل خط العرض من الجدول

يمنحك نفس الإخراج إلى حد ما مثل:

حدد ST_AsText (ST_Centroid (ST_Collect (the_geom))) من الجدول

كما هو الحال في إجابةdbaston ، ولكنه أسرع ولا يستخدم الكثير من الذاكرة.


شاهد الفيديو: حساب المتوسط الحسابي باستخدام اكسل