পোস্টজিআইএস-এ পয়েন্টগুলির একটি সেটের সেন্ট্রয়েড কীভাবে পাবেন?


16

আমি PostGIS এক্সটেনশান সহ PostgreSQL ব্যবহার করি।

আমার the_geomএকটি টেবিল থেকে কলামে পয়েন্টগুলির একটি সেট রয়েছে myschema.myobjects। আমি এই ক্লাস্টারের সেন্ট্রয়েড পেতে একটি নির্বাচিত বিবৃতি তৈরি করতে চাই, সুতরাং এর মতো একটি নির্বাচিত বিবৃতি থেকে:

SELECT the_geom FROM myschema.myobjects

আমাকে এই জাতীয় বিবৃতি দেওয়ার জন্য সঠিক বাক্য গঠন খুঁজে পাওয়া দরকার:

SELECT ST_AsText(ST_Centroid( (SELECT the_geom FROM myshema.myobjects) ));

উত্তর:


21

আপনাকে ইউনিয়ন ফাংশনটি এভাবে ব্যবহার করতে হবে

SELECT att1, st_centroid(st_union(geom)) as geom
FROM schema.table
GROUP BY att1;

যাতে আপনি একই বৈশিষ্ট্যযুক্ত পয়েন্টের সেন্ট্রয়েড অর্জন করতে পারেন।


6

PostGIS একটি একক জ্যামিতি আপনি একটি ইনপুট হিসাবে ব্যবহার করতে পারেন একাধিক জ্যামিতি মিশ্রন জন্য দুটি ফাংশন আছে ST_Centroid

ST_Collect জ্যামিতিগুলির কোনও সংশোধন না করে কেবল একটি সেটকে একত্রিত করে।

বিকল্পটি, ST_Unionএকাধিক জ্যামিতিগুলিকে "দ্রবীভূত" করবে এবং অপ্রয়োজনীয় উপাদানগুলি সরিয়ে ফেলবে। আপনি সম্ভবত এই অ্যাপ্লিকেশনটির জন্য যা চান তা এটি নয়।

পার্থক্যটি দেখতে, তুলনা করুন:

 SELECT ST_AsText(ST_Centroid(ST_Union(geom))) FROM 
 (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom);

 -- POINT(1 1)

এবং

 SELECT ST_AsText(ST_Centroid(ST_Collect(geom))) FROM 
 (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom);

 -- POINT(1.33333333333333 1.33333333333333)

এই ক্ষেত্রে, ST_Unionসদৃশ পয়েন্টটি সরিয়েছে, এবং ST_Collectএটি ধরে রেখেছে।


4

আপনি যদি অনুসন্ধানের সন্ধান করছেন তবে এই ক্যোয়ারীটি ব্যবহার করুন:

SELECT avg(ST_X(the_geom)) as lon, avg(ST_Y(the_geom)) as lat FROM table

এটি আপনাকে কম-বেশি একই আউটপুট দেয়:

SELECT ST_AsText(ST_Centroid(ST_Collect(the_geom))) FROM table

@ ডিবাস্টন উত্তরের মতো, তবে দ্রুত এবং তত স্মৃতি ব্যবহার করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.