Daugiau

Kaip klasifikuoti rastrą naudojant „QGIS“ papildinį, sąveikaujantį su „PostGIS“?


Kuriu QGIS papildinį, kuriame vartotojai gali įvesti tam tikrus parametrus (pvz., Atstumą, gylį, plotą ...) ir pateikdami papildinį sąveikauja su „PostGIS“ duomenų baze ir išgauna informaciją iš vektorinių ir rastrinių sluoksnių.

Noriu klasifikuoti DEM rastrą, pakeisdamas pikselių reikšmes, pavyzdžiui:

Jei 200

Jei 211

Ši klasifikacija grindžiama verte, kurią vartotojai įvedė naudodami „TextBox“ arba „LineEdit“

Aš naudoju toliau pateiktą užklausą ir ji veikia, bet rankiniu būdu ne automatiškai:

Ši užklausa užtruko 2 sekundes DEM rastrui su (X: 6000, Y: 5000) ir (MIN (val): 200, MAX (val): 2400)

Taigi kiekvieną kartą turiu nurodyti spragą.

Ar yra koks nors būdas leisti vartotojams nurodyti intervalą, kurį jie nori taikyti visoms rastro reikšmėms?


jei turite pastovų intervalą, jums nereikia ieškoti lentelės. Galite naudoti šią formulę

(int ([email protected]) / intervalas) * intervalas + intervalas / 2

žinoma, / turi būti sveikųjų skaičių padalijimas (apvalinant iki sveiko skaičiaus žemiau)


Remdamasis puikia @radouxju atsako idėja, aš išsprendžiu šias problemas.

Užuot naudojęs „Reclass“ funkciją, naudojau „MapAlgebra“ funkciją, todėl užklausa yra tokia:

SELECT ST_MapAlgebra (a.rast, b.rast, '(lubos ([rast1]/10)*10) +5') AS newrast iš my_raster1 a, my_raster2 b

Naudojau „lubų“ funkciją, kad gaučiau mažiausią sveikąjį skaičių, ne mažesnį nei argumentas, žr. Šią nuorodą

Štai kaip aš jį panaudojau savo QGIS papildinio kode:

reclass_val = float (self.dlg.lineEdit.text ()) cur.execute ("sukurti lentelės pavyzdį kaip SELECT ST_MapAlgebra (a.rast, b.rast, '(ceil ([rast1]/%s)*%s)+ (%s/2) ') AS newrast from my_raster1 a, my_raster2 b ", (reclass_val, reclass_val, reclass_val))

Tikiuosi, kad tai padės