পোস্টজিআইএস-এর জন্য কমপক্ষে দুটি ভাল ক্লাস্টারিং পদ্ধতি রয়েছে: কে- মিনস ( kmeans-postgresql
এক্সটেনশনের মাধ্যমে ) বা ক্লাস্টারিং জ্যামিতিগুলি একটি প্রান্তিক দূরত্বে (পোস্টজিআইএস ২.২)
1) কে- মানেkmeans-postgresql
ইনস্টলেশন: আপনার পসিক্স হোস্ট সিস্টেমে পোস্টগ্রিজ এসকিউএল 8.4 বা তার বেশি হওয়া দরকার (এমএস উইন্ডোজটির জন্য কোথা থেকে শুরু করতে হবে তা আমি জানতাম না)। আপনার যদি এটি প্যাকেজগুলি থেকে ইনস্টল করা থাকে তবে নিশ্চিত করুন যে আপনার কাছেও বিকাশ প্যাকেজ রয়েছে (যেমন, postgresql-devel
সেন্টোসের জন্য)। ডাউনলোড এবং নিষ্কাশন:
wget http://api.pgxn.org/dist/kmeans/1.1.0/kmeans-1.1.0.zip
unzip kmeans-1.1.0.zip
cd kmeans-1.1.0/
বিল্ডিংয়ের আগে, আপনাকে USE_PGXS
পরিবেশের পরিবর্তনশীল সেট করতে হবে (আমার আগের পোস্টটি এই অংশটি মুছতে নির্দেশ দিয়েছে Makefile
, যা বিকল্পগুলির মধ্যে সেরা ছিল না)। এই দুটি কমান্ডগুলির মধ্যে একটিতে আপনার ইউনিক্স শেলের জন্য কাজ করা উচিত:
# bash
export USE_PGXS=1
# csh
setenv USE_PGXS 1
এখন এক্সটেনশনটি তৈরি করুন এবং ইনস্টল করুন:
make
make install
psql -f /usr/share/pgsql/contrib/kmeans.sql -U postgres -D postgis
(দ্রষ্টব্য: আমি এটি উবুন্টু ১০.১০ দিয়েও চেষ্টা করেছি, তবে ভাগ্য নেই, কারণ পথটি pg_config --pgxs
অস্তিত্বহীন! এটি সম্ভবত উবুন্টু প্যাকেজিং বাগ))
ব্যবহার / উদাহরণ: আপনার কোথাও পয়েন্টের একটি সারণী থাকা উচিত (আমি কিউজিআইএসে সিউডো র্যান্ডম পয়েন্টগুলির একটি গুচ্ছ আঁকছি)। আমি যা করেছি তার একটি উদাহরণ এখানে দেওয়া হয়েছে:
SELECT kmeans, count(*), ST_Centroid(ST_Collect(geom)) AS geom
FROM (
SELECT kmeans(ARRAY[ST_X(geom), ST_Y(geom)], 5) OVER (), geom
FROM rand_point
) AS ksub
GROUP BY kmeans
ORDER BY kmeans;
5
দ্বিতীয় যুক্তি দেওয়া আমি kmeans
জানালা ফাংশন কে পূর্ণসংখ্যা পাঁচটি ক্লাস্টার উত্পাদন করতে। আপনি যা চান পূর্ণসংখ্যায় এটি পরিবর্তন করতে পারেন।
নীচে রয়েছে ৩১ টি সিউডো এলোমেলো পয়েন্ট এবং আমি আঁকা লেবেলযুক্ত পাঁচটি সেন্ট্রয়েড যা প্রতিটি ক্লাস্টারে গণনা দেখায়। এটি উপরের এসকিউএল কোয়েরি ব্যবহার করে তৈরি করা হয়েছিল।
এই ক্লাস্টারগুলি ST_MinimumBoundingCકલ সহ কোথায় রয়েছে তা আপনিও চিত্রিত করার চেষ্টা করতে পারেন :
SELECT kmeans, ST_MinimumBoundingCircle(ST_Collect(geom)) AS circle
FROM (
SELECT kmeans(ARRAY[ST_X(geom), ST_Y(geom)], 5) OVER (), geom
FROM rand_point
) AS ksub
GROUP BY kmeans
ORDER BY kmeans;
2) সাথে একটি চৌম্বক দূরত্বে ক্লাস্টারিং ST_ClusterWithin
এই সামগ্রিক ফাংশনটি পোস্টজিআইএস ২.২ এর সাথে অন্তর্ভুক্ত রয়েছে এবং জ্যামিতি সংগ্রহের একটি অ্যারে প্রদান করে যেখানে সমস্ত উপাদান একে অপরের দূরত্বে থাকে।
এখানে একটি উদাহরণ ব্যবহার রয়েছে, যেখানে ১০০.০ এর একটি দূরত্ব হ'ল প্রান্তিকতা যার ফলস্বরূপ 5 টি বিভিন্ন ক্লাস্টার রয়েছে:
SELECT row_number() over () AS id,
ST_NumGeometries(gc),
gc AS geom_collection,
ST_Centroid(gc) AS centroid,
ST_MinimumBoundingCircle(gc) AS circle,
sqrt(ST_Area(ST_MinimumBoundingCircle(gc)) / pi()) AS radius
FROM (
SELECT unnest(ST_ClusterWithin(geom, 100)) gc
FROM rand_point
) f;
বৃহত্তম মাঝারি ক্লাস্টারে একটি ঘেরের বৃত্ত ব্যাসার্ধ রয়েছে 65.3 ইউনিট বা প্রায় 130, যা প্রান্তিকের চেয়ে বড়। এটি কারণ সদস্য জ্যামিতির মধ্যে পৃথক দূরত্ব প্রান্তিকের চেয়ে কম, সুতরাং এটি এটিকে বৃহত্তর ক্লাস্টার হিসাবে একত্রিত করে।