الاسم
ST_Area — تُعيد مساحة شكل هندسي مضلعي.
المختصر
float ST_Area(geometry g1);
float ST_Area(geography geog, boolean use_spheroid = true);
الوصف
تُعيد مساحة شكل هندسي مضلعي. بالنسبة لأنواع geometry تُحسب المساحة الديكارتية (المستوية) ثنائية الأبعاد، بوحدات يحددها SRID. وبالنسبة لأنواع geography تُحدَّد المساحة افتراضيًا على شكل إهليلجي (spheroid) بوحدة المتر المربع. ولحساب المساحة باستخدام النموذج الكروي الأسرع والأقل دقة، استخدم ST_Area(geog,false).
حُسّنت في: 2.0.0 - أُضيف دعم الأسطح متعددة الأوجه ثنائية الأبعاد.
حُسّنت في: 2.2.0 - يُجرى القياس على الشكل الإهليلجي باستخدام GeographicLib لتحسين الدقة والمتانة. يتطلب PROJ >= 4.9.0 للاستفادة من الميزة الجديدة.
تغيّرت في: 3.0.0 - لم تعد تعتمد على SFCGAL.
تطبّق هذه الدالة مواصفة OGC Simple Features Implementation Specification for SQL 1.1.
تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 8.1.2, 9.5.3
تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).
|
|
|
بالنسبة للأسطح متعددة الأوجه، لا تدعم سوى الأسطح ثنائية الأبعاد (وليس 2.5D). أما مع 2.5D فقد تُعطي إجابة غير صفرية، لكن فقط للأوجه الواقعة كليًا في المستوى XY. |
أمثلة
إعادة المساحة بالقدم المربع لقطعة أرض في ماساتشوستس وضربها في معامل التحويل للحصول على المتر المربع. لاحظ أن الوحدة هنا القدم المربع لأن EPSG:2249 هو Massachusetts State Plane Feet
select ST_Area(geom) sqft,
ST_Area(geom) * 0.3048 ^ 2 sqm
from (
select 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
) subquery;
┌─────────┬─────────────┐
│ sqft │ sqm │
├─────────┼─────────────┤
│ 928.625 │ 86.27208552 │
└─────────┴─────────────┘
إعادة المساحة بالقدم المربع والتحويل إلى Massachusetts State Plane بالمتر (EPSG:26986) للحصول على المتر المربع. لاحظ أن الوحدة القدم المربع لأن 2249 هو Massachusetts State Plane Feet، والمساحة بعد التحويل بالمتر المربع لأن EPSG:26986 هو Massachusetts State Plane بالمتر
select ST_Area(geom) sqft,
ST_Area(ST_Transform(geom, 26986)) As sqm
from (
select
'SRID=2249;POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
) subquery;
┌─────────┬─────────────────┐
│ sqft │ sqm │
├─────────┼─────────────────┤
│ 928.625 │ 86.272430607008 │
└─────────┴─────────────────┘
إعادة المساحة بالقدم المربع والمتر المربع باستخدام نوع البيانات geography. لاحظ أننا نحوّل geometry إلى geography (قبل ذلك تأكد من أن الشكل الهندسي في WGS 84 خط الطول وخط العرض 4326). تقيس geography دائمًا بالمتر. هذا للتوضيح والمقارنة فقط. عادةً سيكون جدولك مخزّنًا بنوع البيانات geography أصلًا.
select ST_Area(geog) / 0.3048 ^ 2 sqft_spheroid,
ST_Area(geog, false) / 0.3048 ^ 2 sqft_sphere,
ST_Area(geog) sqm_spheroid
from (
select ST_Transform(
'SRID=2249;POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
4326
) :: geography geog
) as subquery;
┌──────────────────┬──────────────────┬──────────────────┐
│ sqft_spheroid │ sqft_sphere │ sqm_spheroid │
├──────────────────┼──────────────────┼──────────────────┤
│ 928.684405784452 │ 927.049336105925 │ 86.2776044979692 │
└──────────────────┴──────────────────┴──────────────────┘
إذا كانت بياناتك بنوع geography أصلًا:
select ST_Area(geog) / 0.3048 ^ 2 sqft,
ST_Area(the_geog) sqm
from somegeogtable;
انظر أيضًا
ST_3DArea, ST_GeomFromText, ST_GeographyFromText, ST_SetSRID, ST_Transform