[Gfoss] Riclassificare raster in Postgis

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell’uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT

rid,
ST_MapAlgebra(rast,‘CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer
END’)
AS rast from qne.qne_rstr

l’intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast l’errore è sempre lo stesso:


"function st_mapalgebra(raster, unknown) does not exist


```
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
```

```
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."
```

```

```

```

```

Avete qualche suggerimento in merito?

Grazie in anticipo

Romina

On 7 April 2014 21:57, Romina Di Paolo <romi.dipaolo@gmail.com> wrote:

ST_MapAlgebra

in http://postgis.net/docs/RT_ST_MapAlgebra.html

Passing a regprocedure argument to a SQL function requires the full
function signature to be passed, then cast to a regprocedure type. To pass
the above example PL/pgSQL function as an argument, the SQL for the
argument is:

'sample_callbackfunc(double precision, integer, text)'::regprocedure

Ci provo ma non è detto che siano consigli sensati, è parecchio che non uso le funzioni raster di PG.

Hai provato facendo un cast dell'espressione SQL a text? A quanto pare non viene vista come text, infatti ti dice: st_mapalgebra(raster, unknown);

Prova ad esplicitare tutti i parametri della funzione compresi pixeltype e nodataval. La sintassi della funzione dovrebbe essere  
raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

Prova ad utilizzare la funzione ST_Reclass, forse è più adatta a quello che vuoi fare tu.


bye
Luca

···

2014-04-07 21:57 GMT+02:00 Romina Di Paolo <romi.dipaolo@gmail.com>:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell’uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT

rid,
ST_MapAlgebra(rast,‘CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer
END’)
AS rast from qne.qne_rstr

l’intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast l’errore è sempre lo stesso:


"function st_mapalgebra(raster, unknown) does not exist


```
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
```

```
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."
```

```

```

```

```

Avete qualche suggerimento in merito?

Grazie in anticipo

Romina


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666 iscritti al 22.7.2013

Ciao Romina,

···

On Mon, Apr 7, 2014 at 9:57 PM, Romina Di Paolo <romi.dipaolo@gmail.com> wrote:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell’uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT

rid,
ST_MapAlgebra(rast,‘CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer
END’)
AS rast from qne.qne_rstr

la tua query è (quasi :-)) corretta, aggiungi solo il valore dell’argomento pixeltype o inserisci NULL come l’esempio seguente:


ST_MapAlgebra(rast, NULL, ‘CASE WHEN [rast] BETWEEN 101 and 115 THEN [rast] WHEN [rast] BETWEEN 102 and 166 THEN 0 ELSE 0 END’)

Saluti!

-SL

l’intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast l’errore è sempre lo stesso:


"function st_mapalgebra(raster, unknown) does not exist


```
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
```

```
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."
```

```

```

```

```

Avete qualche suggerimento in merito?

Grazie in anticipo

Romina


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666 iscritti al 22.7.2013


Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

grazie dei consigli ma provando ad inserire tutti i parametri e facendo il cast dell’espressione a text mi ritorna sempre lo stesso errore con la differenze che questa volta mi riconosce i parametri passati come testo

"function st_mapalgebra(raster, text,text,text) does not exist"

forse la soluzione sta nel richiamare la funzione
‘sample_callbackfunc(double precision, integer, text)’::regprocedure

ma l’esempio riportato qui http://postgis.net/docs/RT_ST_MapAlgebra.html non mi è molto chiaro!!!

···

Il giorno 07 aprile 2014 23:15, Luca Lanteri <mescal72@gmail.com> ha scritto:

Ci provo ma non è detto che siano consigli sensati, è parecchio che non uso le funzioni raster di PG.

Hai provato facendo un cast dell'espressione SQL a text? A quanto pare non viene vista come text, infatti ti dice: st_mapalgebra(raster, unknown);

Prova ad esplicitare tutti i parametri della funzione compresi pixeltype e nodataval. La sintassi della funzione dovrebbe essere  
raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

Prova ad utilizzare la funzione ST_Reclass, forse è più adatta a quello che vuoi fare tu.


bye
Luca

2014-04-07 21:57 GMT+02:00 Romina Di Paolo <romi.dipaolo@gmail.com>:

Ciao a tutti,

sto provando senza nessun risultato a riclassificare il raster dell’uso del suolo con questo comando

CREATE TABLE qne.test_raster as SELECT

rid,
ST_MapAlgebra(rast,‘CASE WHEN rast BETWEEN 101::integer and 115::integer THEN rast WHEN rast BETWEEN 102::integer and 166::integer THEN 0::integer
ELSE 0::integer
END’)
AS rast from qne.qne_rstr

l’intento sarebbe di portare tutti i valori compresi tra 101 e 115 a zero e lasciare invariati i valori definiti nel BETWEEN, ma il comando mi restituisce questo errore

"function st_mapalgebra(raster, unknown) does not exist
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101::integer and ...
HINT:  No function matches the given name and argument types. You might need to add explicit type casts"

se elimino il cast l’errore è sempre lo stesso:


"function st_mapalgebra(raster, unknown) does not exist


```
LINE 4: ST_MapAlgebra(rast,'CASE WHEN rast BETWEEN 101 and 115r THEN...
```

```
HINT:  No function matches the given name and argument types. You might need to add explicit type casts."
```

```

```

```

```

Avete qualche suggerimento in merito?

Grazie in anticipo

Romina


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666 iscritti al 22.7.2013

2014-04-08 10:05 GMT+02:00 Romina Di Paolo <romi.dipaolo@gmail.com>:

::regprocedure

la funzione magari sta scritta bene... o magari cambiala in base a quel che
ha suggerito salvatore, il mio (da letteratura) suggerimento e' fare il
cast della stringa a ::regprocedure

cioe' fai '<qui la tua query>'::regprocedure perche' altirmenti lo prende
come text e non trova la firma della api corretta.... evidentemente non fa
un cast implicito.

ciao ginetto

p.s. :::pubblicita'::: questa dovrebbe essere la soluzione a detta della
pag205 di Postgis2 cookbook di Paolo Corti :wink:

Grazie Gino del consiglio, adesso finalmente qualcosa è cambiato

CREATE TABLE qne.test_raster as SELECT
rid,
ST_MapAlgebra(rast,‘8BUI’, ‘CASE WHEN rast BETWEEN 101 and 115 THEN rast WHEN rast BETWEEN 102 and 166 THEN 0
ELSE 0
END’::regprocedure, NULL::text)
AS rast from qne.qne_rstr

ERRORE:expected a left parenthesis
LINE 4: ST_MapAlgebra(rast,‘8BUI’, 'CASE WHEN rast BETWEEN 101 and 1…

ho provato sia con doppia parentesi tonda, sia con parentesi quadra ma restituisce sempre un errore di sintassi
^

···

Il giorno 08 aprile 2014 10:23, Gino Pirelli <luipir@gmail.com> ha scritto:

2014-04-08 10:05 GMT+02:00 Romina Di Paolo <romi.dipaolo@gmail.com>:

::regprocedure

la funzione magari sta scritta bene… o magari cambiala in base a quel che ha suggerito salvatore, il mio (da letteratura) suggerimento e’ fare il cast della stringa a ::regprocedure

cioe’ fai ‘’::regprocedure perche’ altirmenti lo prende come text e non trova la firma della api corretta… evidentemente non fa un cast implicito.

ciao ginetto

p.s. :::pubblicita’::: questa dovrebbe essere la soluzione a detta della pag205 di Postgis2 cookbook di Paolo Corti :wink: