Sari la conținut
megapromotingHai să discutăm

Expertiză · Date geospațiale

Straturi de observare a Pământului peste un teritoriu, fiecare cu sursa, ora citirii și limita scrise lângă el.

Construim harta operațională a unui teritoriu din surse publice de observare a Pământului — Copernicus, OpenStreetMap, cataloage orbitale, ortofotoul guvernamental — și legăm de fiecare strat proveniența, momentul ultimei citiri reușite și ce anume nu poate arăta. Măsurătorile se publică împreună cu metoda care le-a produs.

Construit dejaTrei implementări proprii, care se pot deschide azi din exterior. FlowMind rulează pe un VM propriu și are 109 rute API, dintre care nouă vorbesc direct cu Copernicus Data Space Ecosystem (`src/app/api/copernicus/`, verificat prin numărare pe disc). Relieva răspunde 200 și cere imaginea Sentinel live la fiecare încărcare a paginii (680.122 de octeți, verificat cu curl pe 06.09.2026). Orbital Nexus e public pe `https://www.megapromoting.com/satelit/` și propagă local un catalog de aproximativ 11.900 de obiecte. Rezerva care trebuie spusă din prima propoziție: nu deținem niciun satelit și niciun senzor. Copernicus este un program public al Uniunii Europene, iar catalogul orbital vine de la CelesTrak, care redistribuie date întreținute de US Space Force. Ce am construit noi este stratul de deasupra.

Un teritoriu — un oraș, un raion, o zonă de infrastructură — poate fi citit din date care există deja public: imagini satelitare, geometrie stradală, modele de teren, ortofoto cadastral, cataloage orbitale. Serviciul acesta le adună într-o singură hartă operațională și, mai important, ține evidența a ce înseamnă fiecare strat: ce senzor l-a produs, la ce rezoluție, cât de des se reînnoiește și când a fost citit ultima dată cu succes.

Trebuie spus limpede, pentru că e ușor de înțeles greșit și pentru că e o afirmație pe care unii o fac fără drept: **Copernicus nu este al nostru.** Este programul de observare a Pământului al Uniunii Europene, cu sateliții, senzorii și arhiva lui. Noi ne autentificăm la Copernicus Data Space Ecosystem cu credențiale proprii de tip `client_credentials` și cerem produse procesate prin API. Rezoluția, frecvența de revizitare, acoperirea de nori și calitatea radiometrică sunt ale misiunii, nu ale noastre. Același lucru pentru catalogul orbital: vine de la CelesTrak, cu atribuire afișată, pentru că politica lor o cere. Ce ținem noi sunt autentificarea, cererea corectă, calculul, randarea, gardianul de proveniență și interpretarea.

Regula de conținut e aceeași peste tot: o cifră se publică împreună cu metoda care a produs-o. Panta unei străzi înseamnă altceva dacă a fost calculată cu nucleul Horn 3×3 pe un raster de 25 m decât dacă a fost citită din două puncte la 30 m distanță. Înălțimea unei clădiri înseamnă altceva dacă e declarată în OpenStreetMap decât dacă e estimată din numărul de etaje. Amestecul celor două categorii sub aceeași culoare este cel mai frecvent mod de a livra o hartă care arată bine și minte.

Când o sursă nu răspunde, stratul se marchează OFFLINE, cu motivul, și nu se completează cu o valoare plauzibilă. În FlowMind regula are un gardian automat, `noFakeLive`, care refuză să eticheteze un strat drept LIVE fără dovada unei citiri reușite. Un pixel gol înseamnă „nu am observat aici”, nu „aici nu e nimic”.

Ce cuprinde

Lucrarea, pe componente

Întrebarea alege senzorul, nu invers

Prima etapă nu e tehnică. „Unde se degradează vegetația”, „unde poate urca un vehicul pe roți”, „unde s-a schimbat suprafața între două date” și „ce se întâmplă noaptea sau sub nori” cer instrumente diferite. Optic multispectral la 10 m pentru vegetație și apă, radar C pentru condiții în care optica nu vede, bandă termică la ordinul kilometrului pentru contrast de suprafață, model de teren pentru pantă. Un senzor ales greșit produce un rezultat care pare corect și nu este.

Cerem produsul procesat, pe caseta și fereastra de timp cerute

Nu descărcăm scene întregi ca să le tăiem local. Cererea către Copernicus conține caseta geografică, intervalul de timp și un script de evaluare care spune exact ce bandă intră și ce iese ca pixel. La FlowMind, cererile Sentinel-2 merg pe colecția `sentinel-2-l2a` la endpointul `https://sh.dataspace.copernicus.eu/api/v1/process`; Sentinel-1 pe `sentinel-1-grd`, Sentinel-5P pe `sentinel-5p-l2`. NDVI se calculează din B08 și B04, NDWI din B03 și B08 — în evalscript, la sursă, nu dintr-o imagine deja comprimată.

Publicăm cifra cu metoda lipită de ea

Fiecare bloc de rezultat poartă un marcaj de proveniență. În Relieva sunt trei: măsurat, din surse și propus. Sub harta de pantă scrie literal „COP-DEM GLO-30 · UTM 35N 25 m · Horn 3×3”, iar sub scena de relief scrie exagerarea verticală ×3,5, tocmai pentru că relieful exagerat e frumos și înșelător. Un cumpărător care vrea să verifice o cifră trebuie să poată reface drumul până la ea.

Mască de nori, nu ștergere de nori

Cererile Sentinel-2 resping din start scenele cu peste 40% acoperire de nori (`MAX_CLOUD_COVERAGE = 40`). În evalscript, pixelii pe care banda de clasificare a scenei SCL îi marchează drept nor, umbră de nor, cirrus sau zăpadă — clasele 3, 8, 9, 10 și 11 — sunt returnați complet transparenți. Alternativa comodă, umplerea găurii dintr-o scenă mai veche, produce o imagine continuă care amestecă două momente. Preferăm gaura, pentru că ea se poate citi corect.

Radar când optica nu poate

Sentinel-1 C-SAR trece prin nori și lucrează noaptea, la 10 m, cu o revizitare de ordinul a 6–12 zile. În produsele noastre se folosește raportul dintre polarizările VV și VH, ca screening pe o singură scenă: arată diferențe de suprafață și de umiditate. Nu este interferometrie. Deplasările milimetrice de teren cer perechi ascendent/descendent, fișiere de orbită, un model de teren și o etapă de desfășurare a fazei — o lucrare separată, marcată ca atare în catalogul nostru de produse, nu ceva ce livrăm dintr-o cerere de tile.

Modelul de suprafață nu este modelul terenului — capcana care nu dă nicio eroare

Copernicus DEM GLO-30 este un model digital de suprafață: într-un cvartal dens returnează cota acoperișului, nu a carosabilului. Nimic nu semnalează problema; doar cifrele ies greșite. De aceea geometria care trebuie să stea pe sol se așază pe o suprafață filtrată, iar panta se măsoară pe o bază lungă — sub aproximativ 60 m între puncte se măsoară zgomotul rasterului, nu terenul. Regula complementară e la fel de importantă: dacă statisticile publicate au fost calculate pe modelul brut, ele rămân pe modelul brut și pagina spune asta. Amestecul celor două baze într-un singur set de cifre le face incoerente.

Geometria orașului din OpenStreetMap, cu proveniența înălțimilor ținută separat

Amprentele de clădiri și rețeaua stradală vin din OpenStreetMap, cu data instantaneului notată. În scena 3D a centrului Chișinăului, din 9.506 amprente doar 1.128 au înălțimea declarată în OSM; restul de 8.378 sunt estimate din numărul de etaje înmulțit cu 3,2 m. Cele două categorii sunt colorate diferit în scenă. Fiecare clădire stă pe cota de teren de sub ea, nu pe o placă plată — de aceea blocurile urcă spre parcul catedralei în loc să pară aliniate.

Poziții orbitale calculate local, cu vârsta datelor la vedere

Punctele de pe glob nu sunt poziții transmise de sateliți. Sunt poziții calculate: se pornește de la elemente orbitale valabile la un moment din trecut și se propagă cu modelul SGP4 până la ceasul curent. Eroarea crește cu fiecare zi scursă de la ultima actualizare, iar aplicația o afișează în kilometri pentru obiectul selectat. În FlowMind, vârsta elementelor e etichetată explicit fresh / stale / expired. Calculul rulează pe un fir separat, ca interfața să nu se blocheze.

Fundal cartografic fără chei plătite

Scena 3D drapează ortofotoul guvernamental de la `geodata.gov.md` (WMS, Agenția Relații Funciare și Cadastru) peste un model de teren din plăci publice de pe AWS Open Data, randat cu MapLibre GL. Fără chei API și fără cost pe afișare. Fundalul e orientare vizuală; produsele Copernicus rămân straturi separate, fiecare cu satelitul, senzorul, rezoluția și limitările lui.

Cum arată

Straturile peste același teritoriu, unul peste altul: modelul de teren la bază, geometria stradală și amprentele de clădiri deasupra, imaginea optică și radarul ca straturi separate — fiecare cu eticheta lui de rezoluție, cadență și moment al ultimei citiri reușite.

01

Delimităm teritoriul și scriem întrebarea la care harta trebuie să răspundă

O casetă geografică, o listă scurtă de întrebări operaționale și, pentru fiecare, verdictul dacă există o sursă publică ce poate răspunde. Livrăm inventarul surselor cu rezoluția, cadența și limita fiecăreia — inclusiv rândurile pe care scrie „nu există sursă publică pentru asta”. Rândurile acelea sunt cea mai utilă parte a inventarului.

02

Legăm sursele și punem gardianul înainte de primul strat frumos

Autentificarea, rutele de server, cache-ul și — obligatoriu în această ordine — regula care interzice marcarea unui strat drept LIVE fără dovada unei citiri reușite. Gardianul se scrie înainte de straturi, pentru că după aceea nimeni nu-l mai adaugă. Livrăm rutele funcționale și un raport de sănătate a surselor care se poate interoga.

03

Măsurăm o dată, complet, cu metoda scrisă lângă rezultat

Reproiecție, calcul, praguri alese pe criterii explicite — nu estetice. În harta de pantă a Chișinăului pragurile sunt 8,33%, adică rampa de accesibilitate 1:12, și 12%, peste care roboții de trotuar cotați la 10–15% nu mai urcă. Livrăm cifrele, scripturile care le regenerează din sursă și o pagină care marchează fiecare bloc drept măsurat, din surse sau propus.

04

Predăm cu limitele în față, nu în subsol

Ce nu poate arăta harta, la ce interval se învechește fiecare strat, ce se întâmplă dacă o sursă publică își schimbă condițiile sau dispare, și ce ar cere trecerea de la screening la măsurătoare fină. Livrăm procedura de reîmprospătare și lista dependențelor externe cu punctul lor de rupere.

OBSERVAȚIEDATESTRAT PE HARTĂ
Straturile peste același teritoriu, unul peste altul: modelul de teren la bază, geometria stradală și amprentele de clădiri deasupra, imaginea optică și radarul ca straturi separate — fiecare cu eticheta lui de rezoluție, cadență și moment al ultimei citiri reușite.

Datele

Ce atingem, unde stau și cât rămân

Întrebările pe care le pune oricine are un responsabil cu protecția datelor — puse aici înainte să le pună el.

Ce fel de date atinge lucrarea
În mod normal, date despre teritoriu, nu despre persoane: reflectanță multispectrală, retrodifuziune radar, cote de teren, geometrie stradală, amprente de clădiri, elemente orbitale. Toate provin din arhive publice — Copernicus Data Space Ecosystem, OpenStreetMap, AWS Open Data, CelesTrak, portalul de geodate al statului.
Unde stau credențialele și de ce nu ajung în browser
Accesul la Copernicus se face cu un identificator și un secret de client, prin fluxul OAuth2 `client_credentials` la `identity.dataspace.copernicus.eu`. Cererea de token pleacă doar din server, cu tăiere la 10 secunde și cu tokenul reîmprospătat cu 60 de secunde înainte de expirarea reală. Browserul nu vede niciodată secretul; el cere o rută a noastră, iar ruta cere Copernicus. Fără credențiale configurate, ruta întoarce 503 și restul paginii funcționează.
Ce se păstrează la noi
Plăcile de imagine se țin într-un cache de proces, cu antete care spun ce produs și ce rezoluție s-au întors. Cataloagele mari se încarcă după ce harta e deja pe ecran și se rețin local, cu termen: fișa de obiect a catalogului orbital, de aproape 7 MB, stă în memoria locală a browserului o zi. Măsurătorile derivate — pantă, izolinii, profil altimetric — se regenerează din sursă prin scripturi, nu se editează manual.
Atribuirea nu e opțională
Sursele publice vin cu condiții. Politica CelesTrak cere atribuire și interzice redistribuirea în masă a catalogului; de aceea panoul de surse din interfață e o cerință, nu o decorațiune. Copernicus și OpenStreetMap au propriile lor condiții de utilizare și de atribuire. Într-o livrare, verificarea acestor condiții se face la început, nu la lansare.
Când apar totuși date personale
Se întâmplă la un singur tip de strat: fluxurile video publice și imaginile luate din stradă. Acolo lucrarea nu mai e doar geospațială — intră estomparea fețelor și a numerelor de înmatriculare la preluare, păstrarea numai a geometriei derivate și o evaluare de impact înainte de prima cameră. Imaginea satelitară la 10 m nu are această problemă: un pixel acoperă zece metri de teren.

Un caz

Un bulevard plat care măsura 13,5% pantă

Situația

Într-o lucrare proprie de măsurare a reliefului municipiului Chișinău, panta străzilor a fost calculată direct din modelul digital public la 30 m, luând puncte consecutive de pe geometria stradală. Rezultatul arăta convingător și era gata de publicat.

Ce am construit

La verificare, unul dintre bulevardele centrale — practic plat pentru oricine merge pe el — ieșea cu 13,5% pantă. Cauza a fost tăcută: modelul public este un model de suprafață, deci într-un cvartal dens returnează cota acoperișului. Două puncte la 30 m distanță, unul căzut pe o cornișă, produc o diferență de cotă care nu există pe carosabil. Același defect apărea și în altă parte: clădiri vecine ajungeau pe „sol” diferit cu circa 20 m, iar drumurile ieșeau median 13 m sub clădiri și dispăreau între blocuri în scena tridimensională, pentru că drumurile urmează văile, iar clădirile stau pe platou.

Ce a ieșit

Geometria a fost mutată pe o suprafață de teren aproximativ, obținută prin filtrare cu o fereastră mai lată decât un cvartal, iar panta se măsoară de atunci pe o bază lungă, nu între puncte consecutive care pot fi la câțiva metri unul de altul — sub rezoluția rasterului. Statisticile deja publicate au rămas declarat pe modelul brut, iar pagina spune asta, pentru că mutarea unora dintre cifre pe altă bază le-ar fi făcut incoerente între ele.

Ce nu spune cazul

Nimic nu dăduse eroare. Interfața de programare răspunsese 200, fișierele se citeau, harta se desena. Acesta este tiparul care ne interesează cel mai mult la datele geospațiale: sursa funcționează, iar rezultatul e subtil greșit. Singura apărare care ține este verificarea unei valori cunoscute — un bulevard despre care știi că e plat.

Întrebări

Ce ne întreabă oamenii înainte să sune

Aveți sateliți proprii?

Nu, niciunul, și nici senzori. Copernicus este programul de observare a Pământului al Uniunii Europene — sateliții, senzorii și arhiva sunt ale lui. Catalogul orbital vine de la CelesTrak, care redistribuie date întreținute de US Space Force. Noi ne autentificăm cu credențiale proprii, cerem produse procesate prin API și construim ce urmează: calculul, harta, gardianul de proveniență, interpretarea. Dacă cineva vă spune că are sateliți proprii în Moldova, cereți numărul NORAD.

Cât de des se actualizează imaginea?

Depinde de misiune și de nori, nu de noi. Optic multispectral la 10 m: de ordinul a 2–5 zile când există scenă neacoperită de nori. Radar la 10 m: aproximativ 6–12 zile, dar merge noaptea și prin nori. Bandă termică la ordinul kilometrului și produsele atmosferice: zilnic sau multi-zilnic. Într-un noiembrie cu cer închis o săptămână, stratul optic pur și simplu nu are ce arăta — și atunci scrie asta, nu împrumută o imagine mai veche.

Ce rezoluție înseamnă, practic, 10 m?

Un pixel acoperă zece metri pe teren. Se văde un cvartal, o parcelă agricolă, o haldă, un șantier, o schimbare de suprafață. Nu se vede o mașină, un om sau un număr de înmatriculare — și de aceea imaginea satelitară din această categorie nu ridică problema datelor personale. Pentru produsele atmosferice pixelul e de ordinul kilometrilor: se citește o tendință peste un oraș, nu o stradă.

Îmi puteți da înălțimea exactă a clădirilor mele?

Nu din aceste surse. Modelul public la 30 m este un model de suprafață — returnează cota vârfului a ceea ce se află acolo, inclusiv acoperișuri și coroane de copaci — și e prea grosier pentru o clădire individuală. Ce putem: să spunem pe ce cotă de teren stă fiecare amprentă și, unde OpenStreetMap declară înălțimea, să folosim valoarea declarată, marcată separat de estimare. Pentru înălțimi de precizie e nevoie de altă achiziție: LiDAR sau fotogrametrie cu dronă. Aceea e o lucrare de teren, nu una din arhivă.

Puteți detecta alunecări de teren?

Putem construi un strat de prioritizare, nu un verdict. Un ecran de risc combină pantă din model de teren, pierdere de coerență radar, schimbare de suprafață în optic și acumulare de precipitații — și scoate o listă de zone de verificat. Confirmarea unei deplasări reale cere interferometrie: perechi de scene ascendente și descendente, fișiere de orbită, desfășurarea fazei. Este o lucrare separată. În produsele noastre distincția e scrisă explicit lângă strat, ca nimeni să nu citească o prioritizare ca pe o detecție.

De ce apar goluri în hartă?

Pentru că acolo nu s-a observat nimic utilizabil — de obicei nor, umbră de nor, cirrus sau zăpadă, filtrate din banda de clasificare a scenei. Golul e o informație, nu un defect. Alternativa, umplerea din altă dată, produce o imagine continuă care amestecă două momente și pe care nu o poți folosi la comparație. Aceeași logică se aplică surselor căzute: stratul scrie OFFLINE și motivul.

Poziția satelitului de pe hartă este cea reală, în timp real?

Este o poziție calculată, nu una transmisă. Se pornește de la elemente orbitale publicate la un moment din trecut și se propagă până acum cu un model standard. Eroarea crește cu vârsta elementelor, iar noi o afișăm în kilometri pentru obiectul selectat și marcăm vârsta datelor. Un obiect cu elemente vechi de câteva zile poate fi la zeci de kilometri de unde îl arată punctul — motiv pentru care se scrie, nu se ascunde.

Ce se întâmplă dacă sursa publică se schimbă sau dispare?

Este riscul real al acestui tip de lucrare și se tratează la contract, nu la incident. Sursele publice își schimbă formatele, cotele de utilizare și condițiile. De aceea livrăm lista dependențelor externe cu punctul lor de rupere, ținem stratul de acces izolat într-un singur loc din cod și marcăm sursa căzută în interfață în loc să lăsăm harta să pară funcțională. O platformă care ascunde o sursă moartă e mai periculoasă decât una care se oprește vizibil.

Datele rămân la voi sau la client?

Rezultatele derivate — hărți, cifre, straturi calculate — sunt ale clientului și se predau împreună cu scripturile care le regenerează din sursă. Datele-sursă rămân acolo unde sunt, în arhivele publice, sub licențele și condițiile lor de atribuire; noi nu le redistribuim în masă, pentru că unele licențe interzic exact asta. Credențialele de acces la Copernicus pot fi ale clientului, pe contul lui, dacă vrea independență completă față de noi.

Pe ce se sprijină fiecare afirmație de mai sus (21 surse)
  1. Autentificarea la Copernicus se face prin OAuth2 client_credentials la identity.dataspace.copernicus.eu, cu tăiere la 10 s și reîmprospătare cu 60 s înainte de expirarecopernicusAuth.ts:1-4, 26-38
  2. Cererile Sentinel-2 folosesc colecția sentinel-2-l2a la endpointul de procesare al Sentinel Hub din CDSEroute.ts:8, 155
  3. Pragul de acoperire cu nori este 40%route.ts:16
  4. Pixelii marcați SCL drept nor, umbră, cirrus sau zăpadă (clasele 3, 8, 9, 10, 11) sunt returnați transparenți; NDVI din B08/B04, NDWI din B03/B08route.ts:59-65
  5. Colecțiile sentinel-1-grd și sentinel-5p-l2 sunt cerute directroute.ts:134
  6. Cadențele publicate per produs: ~2-5 zile optic (limitat de nori), ~6-12 zile radar, zilnic pentru termic și produse atmosferice; rezoluții 10 m, ~1 km, ~3,5×5,5 kmroute.ts:25-26, 95-96, 161-162, 175-176
  7. Interferometria este marcată ca lucrare separată, care necesită perechi, DEM, fișiere de orbită și unwraproute.ts:137-150
  8. Ecranul de alunecări este listă de prioritizare, nu verdict de teren; confirmarea cere Sentinel-1 InSAR, change detection, DEM slope și precipitațiiroute.ts:57, 122
  9. Gardianul noFakeLive refuză marcarea unui strat drept LIVE fără dovada unei citiri reușitesourceHealth.ts:9, 172, 213, 252
  10. Fundalul cartografic folosește WMS-ul guvernamental geodata.gov.md printr-o rută proprieroute.ts:64
  11. FlowMind are 109 rute API, dintre care nouă către Copernicusapi -name route.ts | wc -l:109 total; 9 sub src/app/api/copernicus/, numărate 06.09.2026
  12. Metoda publicată pentru relief: COP-DEM GLO-30, două plăci de un grad din arhiva publică AWS, reproiectate în UTM 35N la 25 m, pantă prin nucleu Horn 3×3; 555 km² analizați, 230 km² nucleu urban; exagerare verticală ×3,5 declarată sub scenăpage.tsx:797-803
  13. Marcajele de proveniență din pagină: măsurat / din surse / propus, cu nota metodei sub fiecare blocpage.tsx:214, 250, 272, 462
  14. 9.506 amprente de clădiri OSM, fiecare pe cota de teren raportată de COP-DEM pentru poziția eiCityScene.tsx:12-23
  15. 1.128 de clădiri cu înălțime declarată în OSM și 8.378 estimate din etaje × 3,2 m, colorate diferit; 7.929 de tronsoane de stradă cu mediana pantei 3,7%relieva.json:capabilities[2] și capabilities[1]
  16. COP-DEM GLO-30 este model de suprafață, nu de teren: 13,5% pantă măsurată pe un bulevard plat, sol diferit cu ~20 m între clădiri vecine, drumuri median 13 m sub clădiri; remediu prin filtrare pe fereastră mai lată decât un cvartal și măsurare pe bază lungă (sub ~60 m e zgomot de raster)reference_dem_is_surface_model.md:notă internă datată 11.08.2026
  17. Orbital Nexus: pozițiile sunt calculate cu SGP4 din elemente orbitale publice, nu transmise; eroarea crește cu vârsta elementelor și e afișată în kilometri; sursa e CelesTrak, care cere atribuire și interzice redistribuirea în masăorbital-nexus.json:overview[1], overview[2], maturityReason
  18. Fișa de obiect din catalogul SATCAT are aproape 7 MB și se ține în memoria locală o ziorbital-nexus.json:capabilities[4]
  19. https://www.megapromoting.com/satelit/ răspunde 200https://www.megapromoting.com/satelit/ · 2026-09-06
  20. https://relieva.vercel.app răspunde 200 și servește 680.122 de octețihttps://relieva.vercel.app · 2026-09-06
  21. Fără credențiale CDSE configurate, ruta de imagine întoarce 503 și restul paginii funcționeazăREADME.md:31-40

Citările interne arată numele fișierului și linia. Calea completă rămâne în depozitul nostru; o putem parcurge împreună, la cerere.

Ce ai vrea să funcționeze mai bine?

Povestește-ne despre procesul tău. Împreună stabilim ce merită construit, ce putem conecta și cum verificăm rezultatul.

Hai să discutăm