Înapoi la catalog
Season 42 8 Episoade 32 min 2026

Shapely

v2.1 — Ediția 2026. Manipularea și analiza obiectelor geometrice în planul cartezian. Învață despre modelul de date spațiale, operațiuni constructive, predicate, operațiuni pe mulțimi și indexare spațială cu Shapely 2.1 (2026).

Analiză geospațială Operațiuni geometrice
Shapely
Se redă acum
Click play to start
0:00
0:00
1
Modelul de date spațiale
Pătrunde în conceptele fundamentale ale Shapely și modul în care acesta modelează lumea. Vei învăța diferența dintre puncte, curbe și suprafețe, și cum teoria mulțimilor de puncte stă la baza geometriei plane.
3m 58s
2
Crearea și serializarea geometriei
Descoperă cum să construiești și să transporți eficient geometrii în Shapely. Vei învăța diferența dintre crearea obiectelor singulare și ufuncs vectorizate de înaltă performanță, precum și serializarea WKT și GeoJSON.
3m 47s
3
Măsurători și proprietăți
Învață cum să extragi măsurători critice din geometriile tale. Vei înțelege cum să calculezi aria, lungimea și metrici avansate de distanță, precum distanța Hausdorff.
4m 05s
4
Predicate spațiale și DE-9IM
Stăpânește arta verificării relațiilor spațiale. Vei învăța cum să folosești predicate booleene pentru a determina exact cum interacționează două forme, cu ajutorul matricei DE-9IM.
3m 41s
5
Operațiuni din teoria mulțimilor
Descoperă cum să îmbini, să tai și să secționezi geometrii. Vei învăța cum să folosești operațiuni matematice pe mulțimi, precum intersecția, diferența și reuniunea, pentru a crea forme complet noi.
4m 12s
6
Operațiuni constructive: Buffers și Hulls
Învață cum să generezi sintetic noi forme de graniță. Vei explora buffering, crearea de zone de siguranță și înfășurarea punctelor dispersate folosind convex și concave hulls.
4m 19s
7
Operațiuni constructive avansate
Treci la nivelul următor în manipularea formelor. Vei învăța cum să cureți poligoane masive folosind simplificarea, să unești elemente prin snap și să generezi diagrame Voronoi.
4m 01s
8
Indexare spațială de înaltă performanță cu STRtree
Deblochează interogări spațiale fulgerătoare. Vei învăța cum să folosești arborele Sort-Tile-Recursive (STR) pentru a filtra instantaneu seturi masive de date spațiale și pentru a efectua căutări nearest neighbor aproape instantanee.
4m 03s

Episoade

1

Modelul de date spațiale

3m 58s

Pătrunde în conceptele fundamentale ale Shapely și modul în care acesta modelează lumea. Vei învăța diferența dintre puncte, curbe și suprafețe, și cum teoria mulțimilor de puncte stă la baza geometriei plane.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 1 din 8. Poate ești obișnuit să tratezi geometriile de pe hartă ca pe niște simple liste de coordonate, folosite în principal pentru a desena forme pe ecran. Dar când trebuie să calculezi dacă un track GPS traversează o anumită graniță, logica simplă de desenare dă greș. Pentru a face o analiză spațială matematică reală, ai nevoie de Modelul de Date Spațiale. Mai întâi, trebuie să clarificăm o sursă comună de confuzie legată de acest model. Shapely operează strict pe un plan cartezian plat, bidimensional. Poți furniza coordonate X, Y și Z atunci când îți creezi geometriile. Shapely le va parsa și chiar va stoca acea valoare Z în memorie. Dar ignoră complet coordonata Z în timpul oricărei analize spațiale. Dacă ceri distanța dintre două puncte, Shapely calculează distanța 2D plană. Nu calculează volume 3D sau distanțe 3D. Este un library pur planar. Iată ideea cheie. Shapely este construit pe teoria matematică a mulțimilor de puncte. Nu privește o formă doar ca pe o mână de vârfuri pe care le-ai scris în cod. În schimb, tratează fiecare geometrie ca pe o mulțime riguroasă care conține un număr infinit de puncte. Conform acestui model, fiecare geometrie împarte întregul plan 2D în trei părți distincte. Interiorul este substanța reală a formei. Frontiera este marginea care încadrează forma. Exteriorul este restul planului infinit care nu face parte din formă. Gândește-te la modelarea unui parc urban pentru a vedea cum se aplică aceste trei concepte. Începi cu o fântână arteziană, reprezentată ca o geometrie Point. Un Point este zero-dimensional. Reprezintă o singură locație exactă pe plan. Deoarece nu are lungime sau arie, interiorul său constă exclusiv din acea coordonată specifică. Un Point nu are nicio frontieră. Orice altă coordonată de pe întregul plan cartezian îi constituie exteriorul. Apoi, adaugi o alee care duce la fântână. Aceasta este modelată ca un LineString. Un LineString este o geometrie unidimensională definită de o secvență ordonată de vârfuri de coordonate. Chiar dacă îi pasezi doar o coordonată de început și una de sfârșit, Shapely înțelege un LineString ca fiind setul infinit de puncte care formează calea continuă dintre ele. Interiorul este întreaga lungime continuă a căii. Frontiera constă din exact două puncte: prima coordonată de început și ultima coordonată de sfârșit. În cele din urmă, modelezi amprenta parcului în sine folosind un Polygon. Un Polygon este o geometrie bidimensională cu o suprafață măsurabilă. Îl definești folosind un inel închis de coordonate, ceea ce înseamnă că primul și ultimul punct sunt identice. Acest inel exterior formează frontiera acelui Polygon. Interiorul este setul infinit de puncte închise în interiorul acelei frontiere. Geometriile de tip Polygon pot conține, de asemenea, goluri, cum ar fi o zonă de conservare restricționată în interiorul parcului. Marginea acelui gol acționează pur și simplu ca o frontieră interioară, separând clar interiorul valid al parcului de spațiul exterior gol din interiorul golului. Shapely nu vede geometria ta ca pe un wireframe gol de coordonate; o vede ca pe o regiune continuă a spațiului, împărțită matematic în interior, frontieră și exterior. Dacă găsești aceste episoade utile și vrei să susții podcastul, caută DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
2

Crearea și serializarea geometriei

3m 47s

Descoperă cum să construiești și să transporți eficient geometrii în Shapely. Vei învăța diferența dintre crearea obiectelor singulare și ufuncs vectorizate de înaltă performanță, precum și serializarea WKT și GeoJSON.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 2 din 8. Procesezi un batch de coordonate spațiale. Scrii un loop pentru a transforma fiecare pereche de coordonate într-o formă, una câte una. Funcționează, dar pe măsură ce dataset-ul tău crește la milioane de puncte, aplicația ta se blochează complet. Problema este overhead-ul din Python, iar soluția necesită să eviți complet crearea standard de obiecte. Acest episod este despre crearea și serializarea geometriilor. Crearea formelor este punctul logic de plecare. Dacă ai de-a face cu o singură locație, instanțierea unei geometrii este simplă. Imporți clasa singulară Point și îi pasezi o valoare X și Y. Este ușor de citit, dar este lent. Iată ideea cheie. Shapely oferă funcții universale vectorizate care operează direct pe array-uri NumPy. În loc să folosești clasa singulară Point într-un loop Python, folosești funcția la plural shapely dot points. Îi pasezi un array bidimensional de coordonate, iar asta împinge întreaga iterație la nivelul C extrem de optimizat. Rezultatul este un array de obiecte geometrice, returnat într-o fracțiune din timp. Asta se aplică peste tot, având funcții la plural disponibile pentru line strings, polygons și linear rings. Să presupunem că construiești un tool de rutare și trebuie să încarci un dataset cu o mie de puncte de livrare. Datele ajung sub forma unui array de payload-uri GeoJSON. Asta ne aduce la serializare. Trebuie să parsezi acele string-uri în obiecte geometrice reale, în memorie. Ai putea fi tentat să folosești parsarea JSON standard și să extragi coordonatele manual pentru a-ți construi formele. Nu face asta. Shapely are funcții de input și output built-in pentru cele trei formate spațiale majore: Well-Known Text, Well-Known Binary și GeoJSON. La fel ca la crearea geometriilor, aceste funcții de parsare sunt vectorizate. Iei întregul array de o mie de string-uri GeoJSON și îl pasezi direct în funcția shapely dot from geojson. Aceasta parsează tot batch-ul deodată și returnează un array de geometrii foarte performant. Dacă datele tale ar fi în format text, ai folosi shapely dot from wkt. Dacă ar fi în format binar, ai folosi shapely dot from wkb. Asta acoperă partea de input-uri. Dar cum rămâne cu output-urile? După ce ai terminat de procesat punctele de livrare, trebuie să le salvezi sau să le trimiți către o bază de date. Inversezi procesul folosind funcțiile de export. Dacă faci debugging și trebuie să citești coordonatele cu ochii tăi, folosești shapely dot to wkt. Well-Known Text îți oferă un string lizibil pentru oameni, care scrie clar tipul geometriei urmat de coordonate. Totuși, parsarea textului este costisitoare și ocupă spațiu. Dacă trimiți aceste date către o bază de date spațială sau le stochezi pentru mai târziu, ar trebui să folosești shapely dot to wkb. Well-Known Binary este reprezentarea raw în bytes a geometriei. Este semnificativ mai mică, evită pierderea de precizie cauzată de conversia string-urilor în floating-point și este mult mai rapid de citit și scris de către mașini. Pasezi array-ul de geometrii în shapely dot to wkb și obții un array de byte strings gata pentru stocare. Ori de câte ori muți date spațiale în sau din aplicația ta, ține minte că loop-urile Python sunt inamicul. Cel mai important obicei pentru performanță este să pasezi array-uri complete în funcțiile Shapely la plural, lăsând librăria C din spate să facă greul dintr-o singură trecere. Mulțumesc pentru audiție, happy coding tuturor!
3

Măsurători și proprietăți

4m 05s

Învață cum să extragi măsurători critice din geometriile tale. Vei înțelege cum să calculezi aria, lungimea și metrici avansate de distanță, precum distanța Hausdorff.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 3 din 8. Distanța obișnuită îți spune cât de mult se apropie două linii una de cealaltă. Dar dacă vrei să știi distanța maximă absolută la care se îndepărtează, distanța obișnuită este complet inutilă. Pentru a răspunde la asta, trebuie să înțelegi Measurement și Properties. Fiecare obiect de tip geometry din Shapely vine cu atribute built-in care îi descriu dimensiunile fizice. Cele mai de bază sunt area, length și bounds. Proprietatea area îți dă spațiul bidimensional acoperit de o formă. Pentru un poligon, acesta este un număr pozitiv. Pentru puncte și linii, area este exact zero. Proprietatea length returnează întinderea unidimensională a unei geometrii. Pentru o linie, este distanța de la început până la sfârșit de-a lungul traseului. Proprietatea bounds îți oferă limitele exacte ale coordonatelor formei tale. Returnează un tuple de patru numere care reprezintă X minim, Y minim, X maxim și Y maxim. Acesta este bounding box-ul tău. Imaginează-ți un scenariu în care ai două trasee GPS de la alergători, ambele reprezentate ca LineStrings. Citești proprietatea length ca să vezi distanța totală alergată de fiecare persoană. Citești proprietatea bounds pentru a defini exact viewport-ul dreptunghiular necesar pentru a afișa ambele rute pe ecran. Matematica devine mai complicată când trebuie să măsori spațiul dintre acele două trasee. Măsurătoarea standard a distanței returnează cel mai scurt spațiu absolut dintre două geometrii. Scanează traseul A, scanează traseul B și găsește singura pereche de puncte cea mai apropiată. Dacă cei doi alergători s-au intersectat la jumătatea alergării lor, distanța standard dintre traseele lor este zero. Aici este ideea cheie. Oamenii confundă frecvent distanța obișnuită cu distanța Hausdorff. Distanța obișnuită găsește cele mai apropiate puncte. Distanța Hausdorff găsește cea mai mare distanță dintre cele mai apropiate puncte. Gândește-te la distanța Hausdorff ca la o măsurătoare a deviației maxime. Reprezintă cel mai mare spațiu pe care ai fi forțat să-l traversezi dacă cineva te-ar pune în cel mai prost loc posibil de pe un traseu și ți-ar spune să mergi până la cel mai apropiat punct de pe celălalt traseu. Dacă cei doi alergători ai noștri ar începe din același loc, s-ar despărți la o distanță de două mile în mijlocul antrenamentului și ar termina în același loc, distanța obișnuită este zero. Distanța Hausdorff este de două mile. Definește separarea de tip worst-case pe întreaga lungime a celor două geometrii. Mai există o funcție de măsurare numită minimum clearance. Aceasta nu compară două obiecte diferite. Măsoară stabilitatea structurală a unei singure geometrii. Minimum clearance calculează cea mai mică distanță pe care se poate mișca orice node înainte ca geometria să cedeze într-un state invalid, cum ar fi o linie care se suprapune peste ea însăși. Dacă geometria ta are un minimum clearance foarte mic, coordonatele sunt înghesuite foarte strâns. O mică eroare de rotunjire în timpul unui database export ar putea strica forma complet. Dacă vrei să simplifici datele alergătorului pentru a salva din file size, verificarea minimum clearance îți spune exact cât de mult poți muta punctele înainte ca geometria să se distrugă singură. Să știi cât de mult se apropie două forme rezolvă coliziunile de bază. Să știi limita maximă absolută a separării lor dictează cât de bine înțelegi cu adevărat relația spațială dintre ele. Îți mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
4

Predicate spațiale și DE-9IM

3m 41s

Stăpânește arta verificării relațiilor spațiale. Vei învăța cum să folosești predicate booleene pentru a determina exact cum interacționează două forme, cu ajutorul matricei DE-9IM.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 4 din 8. Trasezi o nouă linie de metrou lângă o zonă umedă protejată. Trebuie să știi dacă linia trece direct prin apă sau doar ocolește marginea. Cum calculează computerul asta matematic? Folosește o matrice inteligentă de trei pe trei pentru a răspunde la întrebare. Asta ne aduce la predicate spațiale și la Modelul Dimensional Extins cu Nouă Intersecții, sau DE-9IM. Predicatele spațiale sunt funcții binare. Ele compară două geometrii și returnează exact un singur lucru: True sau False. Nu creează forme noi. Nu calculează zone suprapuse. Ele răspund pur și simplu la întrebări cu da sau nu despre relațiile topologice. Sub capotă, Shapely evaluează aceste relații folosind DE-9IM. Fiecare geometrie are trei părți: un interior, o margine și un exterior. DE-9IM este o matrice care testează intersecțiile dintre aceste trei părți ale primei geometrii cu cele trei părți ale celei de-a doua geometrii. Trei părți înmulțite cu trei părți îți dau nouă intersecții posibile. În funcție de care dintre aceste intersecții are ca rezultat o mulțime goală, un punct, o linie sau o arie, Shapely determină relația exactă. Să aplicăm asta la linia de metrou și la zona umedă. Cel mai general predicat este intersects. Dacă linia are în comun orice punct, linie sau arie cu zona umedă, intersects returnează True. Este varianta de bază care acoperă totul. Dacă intersects este False, cele două geometrii sunt complet separate în spațiu. Dar adesea ai nevoie de mai multă precizie. Vrei să știi dacă linia de metrou traversează efectiv zona umedă. Pentru asta, folosești crosses. O linie traversează un poligon dacă interiorul ei intersectează interiorul poligonului, dar linia se extinde și în afara poligonului. Matricea DE-9IM verifică dacă intersecția interioarelor lor este o linie și dacă interiorul liniei intersectează și exteriorul poligonului. Dacă ambele sunt adevărate, crosses returnează True. Ce se întâmplă dacă linia merge exact de-a lungul marginii zonei umede fără să intre în apă? Aici intervine touches. Două geometrii se ating dacă au în comun cel puțin un punct, dar interioarele lor nu se intersectează deloc. Doar marginile lor interacționează. Dacă linia deviază chiar și un milimetru în interiorul zonei umede, touches devine False. Acum, ia în considerare o stație de metrou construită complet în interiorul zonei umede. Aici, verifici incluziunea. Oamenii confundă adesea contains și within, dar ele sunt doar operații inverse una față de cealaltă. Dacă zona umedă conține stația, atunci stația este în interiorul zonei umede. Geometric, înseamnă că interiorul și marginea stației sunt complet înconjurate de interiorul zonei umede. Nicio parte a stației nu intersectează exteriorul zonei umede. Poți scrie codul verificând dacă zona umedă are contains pentru stație, sau verificând dacă stația este within zona umedă. Rezultatul este exact același. Iată ideea cheie. Nu trebuie să memorezi matricea cu nouă intersecții pentru a-ți trasa metroul, dar faptul că știi că există explică de ce aceste verificări binare sunt atât de fiabile. Fiecare predicat spațial numit este doar un tipar specific de flag-uri True și False în acea matrice matematică de la bază. Mulțumesc că ai stat pe aici. Sper că ai prins ceva nou.
5

Operațiuni din teoria mulțimilor

4m 12s

Descoperă cum să îmbini, să tai și să secționezi geometrii. Vei învăța cum să folosești operațiuni matematice pe mulțimi, precum intersecția, diferența și reuniunea, pentru a crea forme complet noi.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 5 din 8. Diagramele Venn nu sunt doar pentru mulțimi logice sau query-uri pe baze de date. Poți folosi exact aceleași principii matematice pentru a decupa fizic geografia lumii reale. Pentru a face asta, ai nevoie de Set-Theoretic Operations. În Shapely, fiecare geometry este în esență o mulțime infinită de puncte pe un plan bidimensional. Deoarece sunt mulțimi, le poți manipula folosind teoria clasică a mulțimilor. În primul rând, trebuie să clarificăm o sursă comună de confuzie. Predicatele spațiale, cum ar fi verificarea dacă două forme se ating sau se intersectează, evaluează o condiție și returnează un simplu True sau False. Set-theoretic operations fac ceva complet diferit. Returnează obiecte geometry complet noi. Ele iau două forme de input, analizează punctele lor de suprapunere și construiesc o a treia formă complet nouă ca output. Să luăm în considerare un scenariu concret. Ai două dataset-uri cu poligoane. Unul reprezintă o hartă veche a zonelor inundabile. Celălalt este un model de risc de inundații recent actualizat. Trebuie să calculezi zona exactă în care aceste două modele coincid. Pentru asta, folosești metoda intersection. Apelezi intersection pe primul geometry și pasezi al doilea geometry ca argument. Shapely analizează suprapunerea spațială și returnează un nou poligon care conține doar punctele care există atât pe harta veche, cât și pe cea nouă. Dacă cele două forme nu se suprapun deloc, returnează un empty geometry. Acum, ce se întâmplă dacă trebuie să găsești zonele de risc strict noi? Acestea sunt cartierele care erau sigure pe harta veche, dar care acum se află în zona de inundații actualizată. Aici, folosești metoda difference. Iei noul geometry al modelului de inundații și apelezi difference, pasând geometry-ul hărții vechi. Asta returnează o formă care conține toate punctele din noul model, minus în mod explicit orice puncte care se aflau deja în cel vechi. Ordinea este critică aici. Dacă o inversezi și apelezi difference pe harta veche, pasând noul model, obții un rezultat complet diferit. Obții zonele care nu mai sunt considerate a fi expuse riscului. Este pur și simplu o scădere spațială. Uneori nu vrei să compari formele, ci doar vrei să le combini. Dacă serviciile de urgență au nevoie de o hartă master a oricărui loc care a fost vreodată marcat ca risc de inundații, folosești metoda union. Apelezi union pe o formă, o pasezi pe cealaltă, iar Shapely le îmbină. Dacă formele se suprapun, limitele interne se dizolvă. Output-ul este un singur geometry continuu care reprezintă toate punctele din ambele forme originale. În cele din urmă, există metoda symmetric difference. Gândește-te la asta ca la echivalentul spațial al unei operații exclusive OR. Returnează un nou geometry care conține puncte care se află fie pe harta veche, fie pe harta nouă, dar absolut nu în ambele. În scenariul nostru cu inundațiile, această singură operație îți oferă exact zonele de dezacord dintre cele două modele. Are ca output zonele de risc nou adăugate alături de zonele de risc nou eliminate, golind complet zonele în care modelele sunt de acord. Iată ideea cheie. Când încetezi să te gândești la limitele spațiale ca la concepte geografice complexe și începi să le tratezi ca pe niște mulțimi matematice de bază, calcularea suprapunerilor și excluderilor complexe devine un proces previzibil, complet standard. Asta e tot pentru acest episod. Mersi că ai ascultat și continuă să construiești!
6

Operațiuni constructive: Buffers și Hulls

4m 19s

Învață cum să generezi sintetic noi forme de graniță. Vei explora buffering, crearea de zone de siguranță și înfășurarea punctelor dispersate folosind convex și concave hulls.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 6 din 8. Un punct matematic simplu are aria exact zero. Este doar o locație. Dar dacă trebuie să reprezinți o rază de explozie în jurul acelei locații? Poți transforma instantaneu acel punct zero-dimensional într-un poligon masiv și precis. Aceasta este puterea operațiilor constructive, în special buffers și hulls. Operațiile constructive preiau o geometrie existentă și construiesc o geometrie nouă, diferită, pe baza proprietăților sale spațiale. Te poți gândi la ele ca la niște învelișuri de siguranță în jurul datelor tale spațiale. Cea mai utilizată operație constructivă este buffer-ul. Trimiți o valoare de distanță funcției buffer, iar Shapely returnează un poligon care reprezintă toate punctele aflate la acea distanță exactă față de geometria ta originală. Dacă ai o linie care reprezintă traiectoria unei scurgeri de substanțe chimice de-a lungul unei autostrăzi și trebuie să stabilești o zonă de siguranță de 50 de metri, apelezi buffer pe acea geometrie de tip linie cu o distanță de 50. Output-ul este un nou poligon care urmărește întregul traseu, extinzându-se spre exterior exact 50 de metri în fiecare direcție. Iată ideea principală. Bufferele nu doar cresc. Ele se pot și micșora. Dacă pasezi o distanță pozitivă, geometria se umflă. Dacă aplici o distanță negativă unui poligon, geometria se dezumflă. Un buffer negativ trage limitele spre interior. Acest lucru este incredibil de util pentru a găsi nucleul interior sigur al unei zone, izolând zona care se află la o distanță strictă de marginile periculoase. Uneori nu ai nevoie de un buffer exact în jurul formelor complexe. Ai nevoie doar de limitele absolute ale datelor tale. Apelarea proprietății envelope îți oferă exact acest lucru. Returnează bounding box-ul, care este cel mai mic dreptunghi perfect vertical care înconjoară complet geometria ta. Este ieftin de calculat din punct de vedere matematic și perfect pentru indexarea spațială rapidă. Dar ce se întâmplă când datele tale nu sunt o formă solidă, ci o colecție împrăștiată de puncte? Dacă ai zeci de mostre de sol contaminat și trebuie să desenezi o singură graniță continuă în jurul zonei afectate, ai nevoie de un hull. Shapely îți oferă două modalități principale de a face asta. Convex hull-ul calculează cel mai mic poligon convex care conține toate geometriile tale. Îți poți imagina asta ca și cum ai întinde un elastic în jurul unei plăci pline de cuie. Elasticul se strânge fix peste cuiele cele mai exterioare. Pentru că este convex, conturul nu se curbează niciodată spre interior. Nu există unghiuri interioare mai mari de 180 de grade. Deși convex hull-ul este de încredere, el include adesea o cantitate mare de spațiu gol dacă punctele tale formează o semilună sau un grup neregulat. Dacă ai nevoie de o potrivire mai strânsă, folosești un concave hull. În loc de un elastic rigid, un concave hull acționează ca o folie termocontractibilă. Permite conturului să se adâncească spre interior pentru a urma amprenta reală a datelor tale. Controlezi cât de strâns se înfășoară ajustând un parametru care limitează lungimea maximă permisă a marginilor conturului. Limitele mai stricte forțează conturul să se plieze în golurile dintre puncte, oferindu-ți o hartă extrem de precisă și realistă a acelui sol contaminat. Diferența dintre aceste instrumente se reduce la cât de strâns se mulează pe datele tale. Envelope-ul îți oferă un bounding box rapid și lejer, convex hull-ul se întinde strâns peste punctele extreme exterioare, concave hull-ul se mulează exact pe formă, iar buffer-ul adaugă un padding strict pe margini cu o distanță definită. Dacă vrei să ajuți la continuarea acestor episoade, poți susține podcastul căutând DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc că m-ai ascultat și continuă să construiești!
7

Operațiuni constructive avansate

4m 01s

Treci la nivelul următor în manipularea formelor. Vei învăța cum să cureți poligoane masive folosind simplificarea, să unești elemente prin snap și să generezi diagrame Voronoi.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 7 din 8. Încearcă să randezi o linie de coastă de un milion de puncte pe o hartă web și vei bloca rapid browserul utilizatorului. Ai nevoie de o modalitate de a reduce acea amprentă de date la unu la sută din dimensiunea originală, făcând-o în același timp să arate complet identic. Acest lucru necesită Operații Constructive Avansate. Instrumentul principal pentru această curățare a datelor este funcția simplify. Ascultătorii cred uneori că simplificarea unei forme înseamnă doar să sari peste fiecare al doilea sau al treilea punct dintr-un array. Dacă faci asta, distrugi geometria. Creează linii care se auto-intersectează, colapsează insulele mici și strică structura topologică. Funcția simplify din Shapely evaluează geometria reală. Îi pasezi linia ta de coastă complexă și o valoare de toleranță. Funcția elimină vârfurile care nu deviază de la forma centrală cu mai mult decât acea toleranță. Foarte important, Shapely îți oferă un flag pentru a păstra topologia. Când este activat, algoritmul verifică activ dacă eliminarea unui punct va face ca un poligon să se auto-intersecteze sau să se împartă în bucăți invalide. Asta garantează că linia ta de coastă extrem de comprimată rămâne validă din punct de vedere matematic. Odată ce simplifici un layer de bază greu, adesea ai nevoie ca alte layere să se alinieze perfect cu el. Să zicem că ai parcele de teren sau limite de proprietate care se termină exact la apă. Pentru că tocmai ai simplificat linia de coastă, marginile ei s-au deplasat ușor. Asta creează suprapuneri microscopice sau spații goale, cunoscute sub numele de slivers. Rezolvi asta folosind funcția snap. Oferi geometria limitei de proprietate, geometria liniei de coastă și o distanță de toleranță strictă. Snap se uită la vârfurile primei forme. Dacă un vârf se află în distanța de toleranță față de un vârf sau un segment de pe a doua formă, este tras direct pe el. Punctele din afara toleranței rămân exact acolo unde sunt. Asta creează o potrivire perfectă, etanșă, între geometriile adiacente, fără să distorsioneze restul formei. Asta acoperă curățarea formelor existente. Cealaltă latură a operațiilor constructive este împărțirea spațiului gol folosind puncte. Dacă iei vârfurile unei geometrii, le poți pasa în funcția delaunay triangles. Aceasta conectează acele puncte pentru a forma un mesh continuu de triunghiuri care nu se suprapun. Logica desenează în mod specific aceste triunghiuri pentru a maximiza cele mai mici unghiuri interne. Asta previne triunghiurile lungi, ca niște ace, creând un mesh echilibrat, extrem de util pentru randarea terenului. Dacă vrei doar conturul acestor conexiuni în loc de forme umplute, poți seta un flag pentru a returna doar marginile liniilor. Strâns legată de asta este funcția voronoi polygons. În timp ce Delaunay conectează puncte, Voronoi trasează limite între ele. Oferi o geometrie, iar Shapely îi folosește vârfurile pentru a împărți zona înconjurătoare în regiuni poligonale complet distincte. Orice locație din interiorul unui anumit poligon Voronoi este mai aproape de punctul său central de generare decât de orice alt punct din întregul set. Dacă analizezi o distribuție de hub-uri de livrare, poligoanele Voronoi cartografiază instantaneu zona exactă de acoperire pentru fiecare hub, bazat pur pe proximitate. La fel ca la Delaunay, poți instrui funcția să returneze doar marginile dacă nu ai nevoie de poligoane solide. Iată ideea cheie. Datele spațiale din lumea reală sunt dense, deconectate și rareori se aliniază perfect. Operațiunile constructive precum simplify, snap și Voronoi îți oferă instrumentele pentru a impune ordinea matematică, făcând datele suficient de ușoare pentru a fi randate și suficient de precise pentru a fi analizate. Mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
8

Indexare spațială de înaltă performanță cu STRtree

4m 03s

Deblochează interogări spațiale fulgerătoare. Vei învăța cum să folosești arborele Sort-Tile-Recursive (STR) pentru a filtra instantaneu seturi masive de date spațiale și pentru a efectua căutări nearest neighbor aproape instantanee.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. Shapely, episodul 8 din 8. Compararea unui singur punct cu un milion de poligoane necesită enorm de mult timp de calcul, însă unele aplicații fac asta în milisecunde. Ele nu calculează fiecare distanță. Filtrează nouăzeci și nouă la sută din date înainte de a face un singur calcul matematic. Asta este indexarea spațială de înaltă performanță cu STRtree. Să zicem că vrei să găsești cea mai apropiată cafenea din zece mii de locații față de coordonatele GPS curente ale unui utilizator. Dacă calculezi distanța exactă până la fiecare cafenea în parte, sistemul tău se va bloca. În schimb, indexarea spațială folosește un R-tree. Gândește-te la un R-tree ca la un sistem ierarhic de foldere pentru spațiul bidimensional. Acesta desenează un dreptunghi simplu, numit bounding box sau envelope, în jurul unor grupuri de geometrii apropiate. Apoi desenează bounding boxes mai mari în jurul acestora. Să verifici dacă două dreptunghiuri simple se suprapun este o operațiune ieftină din punct de vedere computațional. În Shapely, implementarea specifică este STRtree, care înseamnă Sort-Tile-Recursive. Creezi unul pasând un array de geometrii în constructor. În spate, asta face bulk-load la index. Tree-ul este construit o singură dată și este imuabil. Nu poți adăuga sau elimina elemente după ce este creat. Trebuie să îți pregătești întregul dataset în avans. Odată ce tree-ul există, cauți în el folosind metoda query. Pasezi o geometrie de input, iar metoda returnează un array NumPy de indecși întregi. Acești indecși se mapează direct la secvența originală de geometrii pe care ai folosit-o pentru a construi tree-ul. Dacă dai ca input mai multe geometrii simultan, query returnează un array bidimensional, asociind indecșii inputurilor tale cu indecșii potriviți din tree. Iată ideea cheie. Indexul de bază al unui STRtree verifică doar acele bounding boxes, nu și geometriile exacte. Dacă faci un query pe un poligon complex, tree-ul folosește acel envelope pătrat al poligonului pentru a găsi potriviri. Asta îți oferă o listă scurtă de candidați care conține rezultate fals pozitive. Pentru a obține un răspuns exact, Shapely îți permite să pasezi un predicat spațial, cum ar fi intersects sau contains, direct în metoda query ca argument. Tree-ul folosește mai întâi acele bounding boxes ieftine pentru a găsi candidați, apoi evaluează automat predicatul tău exact pe acea listă scurtă. Asta menține greul calculelor matematice în codul C compilat. Dincolo de suprapuneri, STRtree excelează la proximitate. Revenind la scenariul nostru cu cafeneaua, nu este nevoie să verifici manual acele envelopes. Folosești metoda query nearest. Pasezi punctul GPS al utilizatorului, iar tree-ul traversează box-urile sale ierarhice pentru a găsi geometria absolut cea mai apropiată, fără a o măsura cu toate cele zece mii. Returnează imediat indexul celei mai apropiate cafenele. De asemenea, poți specifica un parametru pentru a returna un array cu primii N cei mai apropiați vecini, sau poți seta un prag de distanță maximă pentru a limita complet raza de căutare. Există, de asemenea, o metodă nearest distinctă, care compară două tree-uri separate între ele pentru a găsi cele mai apropiate perechi de geometrii care se potrivesc. Operațiile geometrice propriu-zise sunt întotdeauna cea mai costisitoare parte a analizei spațiale. STRtree acționează ca un filtru nemilos. Te împiedică să irosești cicluri de CPU pe geometrii care nu sunt deloc apropiate una de cealaltă, oferind o listă scurtă, mică și ușor de gestionat, astfel încât verificările matematice exacte să ruleze doar atunci când este absolut necesar. Asta încheie seria noastră despre Shapely. Te încurajez insistent să explorezi documentația oficială și să încerci practic aceste concepte de indexare pe propriile tale dataseturi. Dacă ai workflow-uri sau tool-uri pe care vrei să le acoperim în seriile viitoare, vizitează devstories dot eu și lasă-ne o sugestie. Îți mulțumesc că ne-ai ascultat. Pe data viitoare!