Ավելին

Առանձնահատկությունները հաշվելով բարեկազմ պոլիգոնների խաչմերուկներում

Առանձնահատկությունները հաշվելով բարեկազմ պոլիգոնների խաչմերուկներում


Ես ունեմ գեոպանդաGeoDataFrameհարյուրավոր բարեսիրական պարունակողՊոլիգոնևMultiPolygonերկրաչափություններ Պոլիգոնները համընկնում են շատ տեղերում: Ես կցանկանայի կատարել մի նոր երկրաչափություն, որը պարունակում է հաշվարկ, թե դրանցից քանիսը համընկնում են: Նման մի բան.

Ինչ-որ մեկը գաղափար ունի՞, թե ինչպես դրան մոտենալ: Ես նույնիսկ ելք չեմ տեսնում:

Ի վերջո, ես հատկապես կցանկանայի, որ կարողանայի կշռել պոլիգոնները, այնպես որ որոշ պոլիգոններ ինքնուրույն արժենար 2: Դա անելով հետբարեսիրտZ դաշտը կարող է լավ լինել:

Մի կողմ. Ես առանձնապես կապված չեմ այս գրադարաններից որևէ մեկի հետ, պարզապես այնտեղ է, որտեղ ես եմ հայտնվել: Այս երկրաչափությունների կոորդինատներն իրականում պիքսելային կոորդինատներ են. Ես սայթաքում եմ ռաստեր պատրաստելու համար, որպեսզի մեկ այլ պատկեր ծածկեմ: Ես կնախընտրեի իմ հետքը հնարավորինս փոքր պահել, քանի որ կցանկանայի այս նյութերը տեղակայել ամպային սերվերներում և այլն, որտեղ հնարավոր է, որ ես ի վիճակի չլինեի տեղադրել պատահական նյութեր:


Կարող է թեմայից դուրս լինել, քանի որ դա postgresql / postgis լուծում է.

Postgres / postgis- ում դա O (N ^ 2) պարզ հարցում է, որը կարող է ընդունվել geopanda- ում:

$ psql gis_se; - ստեղծել postgis ընդլայնում ստեղծել ընդլայնում postgis; - ստեղծել բազմանկյուն աղյուսակ, ստեղծել սեղան test_overlap (id սերիական հիմնական բանալին); - Ավելացնել երկրաչափության ընտրություն addgeometrycolumn ('public', 'test_overlap', 'geom', 4326, 'POLYGON', 2); տեղադրեք test_overlap (geom) արժեքների մեջ (ST_GeomFromEWKT ('SRID = 4326; POLYGON ((- 2 -2, -2 -1, -1 -1, -1 -2, -2 -2))')), (ST_GeomFromEWKT ('SRID = 4326; ՊՈԼԻԳՈՆ ((- ​​2 -2, -2 0, 0 0, 0 -2, -2 -2))')), (ST_GeomFromEWKT ('SRID = 4326; ՊՈԼԻԳՈՆ ((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; ՊՈԼԻԳՈՆ ((- ​​1,5 -1,5, -1,5 1,5,1,5 1,5,1,5 -1,5, -1,5 -1,5))'));

և սահմանում է 5 ուղղանկյուններ.

Խաչի խաչմերուկը աղյուսակի հետ.

test_overlap- ից ընտրեք a.id, b.id, st_intersects (a.geom, b.geom) որպես a, test_overlap որպես b, որտեղ a.id <> b.id;

ցույց է տալիս, թե որ տարածքները միմյանց հատում են.

id | id | st_intersects ---- + ---- + --------------- 1 | 2 | տ 1 | 3 | զ 1 | 4 | զ 1 | 5 | տ 2 | 1 | տ 2 | 3 | տ 2 | 4 | զ 2 | 5 | տ 3 | 1 | զ 3 | 2 | տ 3 | 4 | տ 3 | 5 | տ 4 | 1 | զ 4 | 2 | զ 4 | 3 | տ 4 | 5 | տ 5 | 1 | տ 5 | 2 | տ 5 | 3 | տ 5 | 4 | տ

Օգտագործելով այս հիմքը, ID- ի միջոցով կարող եք միավորել յուրաքանչյուր ID օբյեկտի համար խմբավորել ըստ clausel:

ընտրեք id, հաշվել (id) - ից (ընտրեք a.id- ը որպես id, b.id- ը որպես հայտ, st_intersects (a.geom, b.geom) որպես հատվում է test_overlap- ից `a, test_overlap- ը` b, որտեղ a.id <> b: id), քանի որ i- ն, որտեղ հատվում է խումբը ըստ id- ի, ըստ id- ի

Արդյունքը ցույց է տալիս հետախուզվող օրինակը:

id | հաշվել ---- + ------- 1 | 2 2 | 3 3 | 3 4 | 2 5 | 4

Դիտեք տեսանյութը: Երեխայի խոսքի զարգացումը. Շուշան Տիտանյան