Mer

Hvordan interpolere manglende data fra naboer i PostGIS?


Jeg har et datasett med punktdata i et gitt land. La oss si datasettet mitt ser omtrent slik ut:

tree_id | arter | alder | geom ------------------------------ 0 | Ask | null |… 1 | Bøk | 70 | … 2 | Ask | 10 |… 3 | Bøk | 70 | ... 4 | Bøk | null | … 5 | Bøk | 60 | … |… |… | …

Som du kan se, har datasettet noen manglende data. For eksempel,tree_id 0har ingen alder. Derfor vil jeg gjerne interpolere de manglende verdiene fra en radius på 100 meter.

Jeg leter etter gjennomsnittet av arten. Resultatet bør også inneholde antall prøvetrær som brukes. En resultattabell kan da se slik ut:

tree_id | age_avg | prøver --------------------------- 0 | 11.8 | 113 3 | 12.2 | 97 5 | 50,7 | 272… |… |…

Kan du hjelpe meg med noen PostgreSQL -søkekode?


Ok, så la oss begynne igjen, dette er svaret på å gjøre det du vil, men dette vil bare være nyttig i en ikke-meningsfull kontekst. For eksempel for å gjengi en 3D -scene der noen data mangler og du vil tegne et "lokalt medium tre" for hver art.

Jeg antar at det originale bordet ditt heter "mytrees".

Lag to alias a & b fra tabellmytrene dine, sett b sammen med en tabell hvis du er i søkeradiusen, og oppsummer deretter data for hvert punkt ved hjelp av aggregater.

Velg a.tree_id, a.art, gjennomsnitt (b.age) som age_avg, tell (*) som sample, a.geom FRA mytrees a LEFT JOIN mytrees b ON ST_DWithin (a.geom, b.geom, 100) AND a .art = b.art GRUPPE AV a.tree_id, a.art, a.geom ORDER BY a.tree_id

Igjen en siste advarsel, det vil fungere, men IKKE BRUK DET for meningsfylt dataanalyse. Bare for gjengivelse eller som bevis på konseptet.

Redigert: bruker ST_DWithin som foreslått av John Barça, mye enklere