Daha çox

Formalı Çoxbucaqlıların kəsişmələrində xüsusiyyətlərin sayılması


Mənim bir geopandam varGeoDataFrameyüzlərlə formalı olanÇoxbucaqlıMultiPolygonhəndəsələr. Çoxbucaqlar bir çox yerdə üst-üstə düşür. Onların hansının üst-üstə düşdüyünü hesablayan yeni bir həndəsə etmək istərdim. Bu kimi bir şey:

Kimsə buna necə yanaşacağına dair bir fikri varmı? İçəri bir yol belə görə bilmirəm.

Nəhayət, xüsusilə çoxbucaqlıları çəkə bilmək istərdim, beləliklə bəzi çoxbucaqların özləri 2-yə bərabər ola bilər. Bunu etməkformalı'nin Z sahəsi gözəl ola bilər.

Bir yana: Mən bu kitabxanaların heç birinə çox bağlı deyiləm, yalnız bitdiyim yerdir. Bu həndəsələrdəki koordinatlar əslində piksel koordinatlarıdır - başqa bir görüntünün üstünü örtmək üçün bir raster düzəltməyə hazırlaşıram. Ayaq izimi mümkün qədər kiçik saxlamağı üstün tuturdum, çünki təsadüfi şeylər qura bilməyəcəyim bu məhsulları bulud serverlərinə yerləşdirə bilmək istərdim.


Postgresql / postgis həlli olduğu üçün mövzu xaricində ola bilər:

Postgres / postgisdə, geopandaya qəbul edilə bilən / ola bilən sadə bir O (N ^ 2) sorğusudur.

$ psql gis_se; - postgis uzantısını yaratmaq, postgis uzatmasını yaratmaq; - bir çoxbucaqlı cədvəl yaratmaq test_overlap cədvəl yaratmaq (id serial əsas düymə); - Həndəsə seç addgeometrycolumn əlavə edin ('public', 'test_overlap', 'geom', 4326, 'POLYGON', 2); test_overlap (geom) dəyərlərinə daxil edin (ST_GeomFromEWKT ('SRID = 4326; POLYGON ((- 2 -2, -2 -1, -1 -1, -1 -2, -2 -2))')), (ST_GeomFromEWKT ('SRID = 4326; POLİGON ((- 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; POLİGON ((- 1.5 -1.5, -1.5 1.5,1.5 1.5,1.5 -1.5, -1.5 -1.5))'));

və 5 düzbucağı təyin edir:

Cədvəlin özü ilə kəsişmə istəyi:

test_overlap arasından a.id, b.id, st_intersects (a.geom, b.geom) seçin, test_overlap b olaraq a.id <> b.id;

bir-birinin kəsişdiyi sahələri göstərir:

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

Bu əsasdan istifadə edərək hər bir ID obyekti üçün sayları cəmləşdirə bilərsiniz qrupu klausel:

id, say (id) -i seçin (id kimi id.a, təklif olaraq b.id, st_intersects (a.geom, b.geom) test_overlap ilə a, test_overlap ilə b kimi a.id <> b. id) olaraq id əmri ilə qrupu id ilə kəsişdiyi i kimi;

Nəticə axtarılan nümunəni göstərir.

id | say ---- + ------- 1 | 2 2 | 3 3 | 3 4 | 2 5 | 4


Videoya baxın: Çoxbucaqlılar. Riyaziyyat 9-cu sinif (Oktyabr 2021).