الاسم
ST_ClusterKMeans — دالة نافذة تُعيد معرّف عنقود لكل شكل هندسي مُدخل باستخدام خوارزمية K-means.
المختصر
integer ST_ClusterKMeans( geometry winset geom , integer k , float8 max_radius );
الوصف
تُعيد رقم عنقود K-means لكل شكل هندسي مُدخل. المسافة المستخدمة في العنقدة هي المسافة بين المراكز الهندسية للأشكال ثنائية الأبعاد، والمسافة بين مراكز المستطيلات المحيطة للأشكال ثلاثية الأبعاد. وبالنسبة إلى مُدخلات POINT، يُعامَل إحداثي M بوصفه وزنًا للمُدخل ويجب أن يكون أكبر من 0.
يؤدي ضبط max_radius إلى أن تُولّد ST_ClusterKMeans عناقيد أكثر من k، بما يضمن ألا يكون نصف قطر أي عنقود في المُخرجات أكبر من max_radius. وهذا مفيد في تحليل إمكانية الوصول.
حُسّنت في: 3.2.0 دعم max_radius
حُسّنت في: 3.1.0 دعم الأشكال الهندسية ثلاثية الأبعاد والأوزان
متاحة منذ: 2.3.0
أمثلة
توليد مجموعة وهمية من قطع الأراضي للأمثلة:
CREATE TABLE parcels AS
SELECT lpad((row_number() over())::text,3,'0') As parcel_id, geom,
('{residential, commercial}'::text[])[1 + mod(row_number()OVER(),2)] As type
FROM
ST_Subdivide(ST_Buffer('SRID=3857;LINESTRING(40 100, 98 100, 100 150, 60 90)'::geometry,
40, 'endcap=square'),12) As geom;
قطع الأراضي ملوّنة حسب رقم العنقود (cid)
SELECT ST_ClusterKMeans(geom, 3) OVER() AS cid, parcel_id, geom
FROM parcels;
cid | parcel_id | geom -----+-----------+--------------- 0 | 001 | 0103000000... 0 | 002 | 0103000000... 1 | 003 | 0103000000... 0 | 004 | 0103000000... 1 | 005 | 0103000000... 2 | 006 | 0103000000... 2 | 007 | 0103000000...
تقسيم عناقيد قطع الأراضي حسب النوع:
SELECT ST_ClusterKMeans(geom, 3) over (PARTITION BY type) AS cid, parcel_id, type
FROM parcels;
cid | parcel_id | type -----+-----------+------------- 1 | 005 | commercial 1 | 003 | commercial 2 | 007 | commercial 0 | 001 | commercial 1 | 004 | residential 0 | 002 | residential 2 | 006 | residential
مثال: عنقدة مجموعة بيانات سكانية مُجمّعة مسبقًا على نطاق الكوكب باستخدام العنقدة ثلاثية الأبعاد والأوزان. حدّد 20 منطقة على الأقل استنادًا إلى بيانات Kontur السكانية لا يتجاوز امتدادها 3000 كم من مركزها:
create table kontur_population_3000km_clusters as
select
geom,
ST_ClusterKMeans(
ST_Force4D(
ST_Transform(ST_Force3D(geom), 4978), -- cluster in 3D XYZ CRS
mvalue => population -- set clustering to be weighed by population
),
20, -- aim to generate at least 20 clusters
max_radius => 3000000 -- but generate more to make each under 3000 km radius
) over () as cid
from
kontur_population;
تُنتج عنقدة سكان العالم وفق المواصفات أعلاه 46 عنقودًا. تتمركز العناقيد في المناطق المكتظة بالسكان (نيويورك، موسكو). وغرينلاند عنقود واحد. وهناك عناقيد جزرية تمتد عبر خط الطول المقابل (180°). وتتبع حواف العناقيد انحناء الأرض.