শেপলি পলিগনসের ছেদগুলিতে বৈশিষ্ট্য গণনা করা


13

আমার একটি জিওপান্ডা রয়েছে GeoDataFrame যা কয়েকশত সুড়সুড়িPolygon এবং MultiPolygonজ্যামিতি সমন্বিত। বহুভুজগুলি প্রচুর জায়গায় ওভারল্যাপ করে। আমি একটি নতুন জ্যামিতি তৈরি করতে চাই যার মধ্যে কতগুলি ওভারল্যাপ হয় তার একটি গণনা রয়েছে। এটার মতো কিছু:

ওভারল্যাপ গণনা করা হচ্ছে

এটির কাছে যাওয়ার জন্য কারও কি কোনও ধারণা আছে? আমি এমনকি একটি উপায় দেখতে পাচ্ছি না।

অবশেষে আমি বিশেষত বহুভুজগুলিকে ওজন করতে সক্ষম হতে চাই, যাতে কিছু বহুভুজ তাদের নিজস্ব হিসাবে 2 ডলার হতে পারে। সঙ্গে এটি করলে shapelyএর জেড ক্ষেত্র সুন্দর হতে পারে।

পাশে: আমি এই লাইব্রেরির কোনওর সাথে বিশেষভাবে আবদ্ধ নই, ঠিক এখানেই শেষ হয়েছি। এই জ্যামিতির স্থানাঙ্কগুলি আসলে পিক্সেল স্থানাঙ্ক হয় - আমি অন্য চিত্রটিতে ওভারলে করতে রাস্টার তৈরির দিকে হোঁচট খাচ্ছি। আমি আমার পায়ের ছাপটি যতটা সম্ভব ছোট রাখতে পছন্দ করব, যেহেতু আমি এই জিনিসটি ক্লাউড সার্ভার ইত্যাদিতে স্থাপন করতে সক্ষম হতে চাই, যেখানে আমি এলোমেলো জিনিস ইনস্টল করতে সক্ষম না হতে পারি।


এই উদাহরণ চেষ্টা করুন । আপনি প্রতিটি 1-থেকে -1 ছেদ করার জন্য বহুভুজকে বিভক্ত করতে পারেন এবং প্রতিটি উদাহরণ গণনা করতে পারেন, কাউন্ট নম্বর এবং তারপরে অ্যাট্রিবিউট টেবিলের সাহায্যে পাইথনে একটি তালিকা তৈরি করতে পারেন।
blu_sr

যদিও কোনও কোড অন্তর্ভুক্ত নেই, তবে এসও-তে এই উত্তরটি একটি বহুভুজ পুরোপুরি অন্যটির মধ্যে রয়েছে কিনা তা পরীক্ষা করতে একটি অ্যালগরিদম বর্ণনা করে। আমি অনুমান করি আপনি যদি লাইন-বিভাগগুলির মধ্যে কমপক্ষে একটি লাইন-ছেদটি পরীক্ষা করে থাকেন তবে এটি ওভারল্যাপিং বহুভুজকে নির্দেশ করে।
স্টিভজ

এছাড়াও একটি জিওপ্যান্ডস ফাংশন জিওসারিজ ইন্টেরেটেসেক্টস বলে মনে হচ্ছে ; আমি ভাবছি এটি বহুভুজের উপর কাজ করে কিনা।
স্টিভজ

আপনার এগুলিকে জাগ্রত করার ক্ষমতা আছে? যদি আপনি তাদের সকলকে বহুভুজগুলিতে রাখার জন্য রাস্টারাইজ করেন তবে আপনি সেগুলিকে একসাথে যুক্ত করতে অল্প ব্যবহার করতে পারেন এবং ফলাফলের প্রতিটি সংখ্যা নির্দেশ করে যে কতগুলি বহুভুজ p পিক্সেলটিতে ওভারল্যাপ হয়।
ব্যবহারকারী 1269942

উত্তর:


2

বিষয়বস্তু হতে পারে কারণ এটি একটি পোস্টগ্র্যাসকিএল / পোস্টগ্রিজ সমাধান:

পোস্টগ্র্রেস / পোস্টগ্রিসে এটি একটি সাধারণ ও (এন ^ 2) ক্যোয়ারী যা জিওপান্ডায় গ্রহণ / গ্রহণ করা যেতে পারে।

$ psql gis_se;
-- create the postgis extension  
create extension postgis;

-- create a polygon table 
create table test_overlap(id serial primary key);

-- Add the geometry
select addgeometrycolumn('public','test_overlap','geom',4326,'POLYGON',2);
insert into test_overlap(geom) values
(ST_GeomFromEWKT('SRID=4326;POLYGON((-2 -2, -2 -1,-1 -1,-1 -2, -2 -2))')),
(ST_GeomFromEWKT('SRID=4326;POLYGON((-2 -2, -2 0, 0 0, 0 -2, -2 -2))')),
(ST_GeomFromEWKT('SRID=4326;POLYGON((2 2, 2 0, 0 0, 0 2, 2 2))')),
(ST_GeomFromEWKT('SRID=4326;POLYGON((2 2, 2 1,1 1,1 2, 2 2))')),
(ST_GeomFromEWKT('SRID=4326;POLYGON((-1.5 -1.5, -1.5 1.5,1.5 1.5,1.5 -1.5, -1.5 -1.5))'));

এবং 5 টি আয়তক্ষেত্র সংজ্ঞায়িত করে:

এখানে চিত্র বর্ণনা লিখুন

টেবিলের সাথেই ছেদ করার অনুরোধ:

select a.id, b.id, st_intersects(a.geom, b.geom) 
from test_overlap as a, test_overlap as b 
where a.id<>b.id; 

একে অপরেরকে ছেদ করার ক্ষেত্রগুলি দেখায়:

 id | id | st_intersects 
----+----+---------------
  1 |  2 | t
  1 |  3 | f
  1 |  4 | f
  1 |  5 | t
  2 |  1 | t
  2 |  3 | t
  2 |  4 | f
  2 |  5 | t
  3 |  1 | f
  3 |  2 | t
  3 |  4 | t
  3 |  5 | t
  4 |  1 | f
  4 |  2 | f
  4 |  3 | t
  4 |  5 | t
  5 |  1 | t
  5 |  2 | t
  5 |  3 | t
  5 |  4 | t

এই ভিত্তিটি ব্যবহার করে আপনি গ্রুপের মাধ্যমে প্রতিটি আইডি অবজেক্টের জন্য ক্লাউজেল দ্বারা গণনাগুলি একত্রিত করতে পারেন :

select id, count(id)                         
from (select 
       a.id as id, b.id as bid, 
       st_intersects(a.geom, b.geom) as intersects 
       from test_overlap as a, test_overlap as b where a.id<>b.id
) as i
where intersects
group by id
order by id;

ফলাফলটি চেয়েছিল প্যাটার্নটি দেখায়।

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