[QGIS-it-user] Una funzione che non funziona - interrogazione

Buongiorno.

Da un pò di tempo non funziona la funzione di interrogazione, restituisce un valore vuoto, nel file di log c’è questo messaggio:

2021-05-26T10:46:35 WARNING Interrogazione: DECLARE qgis_3 BINARY CURSOR FOR SELECT st_asbinary(“geom”,‘NDR’),“gid”, ecc. ecc. FROM “public”.“catasto_fabbricati” WHERE “geom” && st_makeenvelope( . . . ) AND st_intersects(st_curvetoline(“geom”),st_makeenvelope(. . . .))
ha restituito 7 [ERRORE: la funzione st_curvetoline(geometry) non è unica

Qualcuno sa indicarmi una soluzione ?

Grazie

Domenico

Di seguito la configurazione:

Versione di QGIS 3.18.3-Zürich
Revisione codice QGIS 735cc85be9
Compilato con Qt 5.12.8
Esecuzione con Qt 5.12.8
Compilato con GDAL/OGR 3.0.4
Esecuzione con GDAL/OGR 3.0.4
Compilato con GEOS 3.8.0-CAPI-1.13.1
Esecuzione con GEOS 3.8.0-CAPI-1.13.1
Compilato su SQLite 3.31.1
In esecuzione su SQLite 3.31.1
Compilato con PDAL 2.0.1
Esecuzione con PDAL 2.0.1 (git-version: Release)
Versione client Postgre SQL 12.6 (Ubuntu 12.6-0ubuntu0.20.04.1)
Versione SpatiaLite 4.3.0a
Versione QWT 6.1.4
Versione QScintilla2 2.11.2
Compilato con PROJ 6.3.1
Esecuzione con PROJ Rel. 6.3.1, February 10th, 2020
Versione SO Ubuntu 20.04.2 LTS
Attiva python plugin db_manager;
processing; MetaSearch

COSTA DOMENICO wrote

2021-05-26T10:46:35 WARNING Interrogazione: DECLARE qgis_3 BINARY CURSOR
FOR SELECT st_asbinary("geom",'NDR'),"gid", ecc. ecc. FROM
"public"."catasto_fabbricati" WHERE "geom" && st_makeenvelope( . . . ) AND
st_intersects(st_curvetoline("geom"),st_makeenvelope(. . . .))
ha restituito 7 [ERRORE: la funzione st_curvetoline(geometry) non è unica

Ciao Domenico,
non capisco a cosa ti riferisci esattamente con "la funzione
interrogazione", comunque l'errore presente nel pannello dei messaggi di log
mi pare si riferisca al fatto che nel server (PostgreSQL/PostGIS?) sono
presenti più di una funzione st_curvetoline.
Secondo me dovresti capire quali altre funzioni st_curvetuline sono presenti
e perché.
Eventulmente potresti indicare esplicitamente il type cast nella query.

Hai la possibilità di capire cosa sia cambiato (aggiornamento di QGIS o
aggiornamento o installazione di pacchetti Ubuntu o nel server) tra quando
la la tua procedura funzionava e quando non ha più funzionato.
A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Ciao Domenico,
quindi si tratta dello strumento "Informazioni elementi"(tool "Indentify features").

Non l'hai indicato ma continuo a presumere che il problema sia relativo ad un layer PostgreSQL/PostGIS. Questo problema c'è solo con quel determinato layer PostgreSQL/PostGIS o con tutti i layer su un determinato server PostgreSQL/PostGIS o su qualsiasi server PostgreSQL/PostGIS?

Il server PostgreSQL/PostGIS che stai usando è amministrato da te sul tuo PC? Puoi controllare se ci siano più di una funzione st_curvetuline?
Per farlo puoi usare il comando \df st_curvetoline

Per maggiori informazioni:
https://docs.qgis.org/3.16/it/docs/training_manual/spatial_databases/spatial_functions.html#looking-at-the-installed-postgis-functions
https://stackoverflow.com/questions/20487940/postgis-function-is-not-unique
https://stackoverflow.com/questions/12331981/error-function-addgeometrycolumn-is-not-unique

Comunque non ho capito cosa è cambiato tra quando funzionava e adesso che non funziona più. La versione di QGIS? Con quale versione funzionava? Hai con la versione con cui funzionava prima se funziona anche adesso?

A presto.

Andrea

Il 27/05/2021 08:09, COSTA DOMENICO ha scritto:

Ciao Andrea
la funzione in questione è quella classica che c'è nella "barra strumenti relativi agli attribuiti".
non sono sicurissimo che sia un problema di QGIS, perché se con lo stesso strumento (i) interrogo uno shape file la risposta la ottengo.
non ho "toccato" nulla del codice QGIS, è una funzione nativa.
questo "malfunzionamento" l'ho notato con sistema operativo ubuntu => 20.04 e Postgrsql 12 =>
non sto parlando di una mia procedura ma proprio di Qgis 3.16 (a partire da)

Ciao Domenico,
stai rispondendo direttamente al mio indirizzo e-mail invece che all'indirizzo della mailing list qgis-it-user@lists.osgeo.org.
Sarebbe meglio fare in modo di rispondere all'indirizzo della mailing list qgis-it-user@lists.osgeo.org invece che al mio, altrimenti altri utenti che potrebbero aiutarti a risolvere il problema non possono leggere le tue risposte.

Dalle risposte che mi hai inviato mi pare quindi di poter capire che non è cambiata la versione di QGIS ma la versione di Ubuntu e l'installazione del server PostgreSQL/PostGIS.
Quindi si dovrebbe dedurre che il problema non è in QGIS, ma nel server.
Infatti hai confermato che presenta due funzioni st_curvetoline invece che una.
Essendocene due, il server non riesce a capire quale deve utilizzare, a meno che ciò non sia esplicito nella query, per esempio indicato il type cast e i vari parametri. Oppure potresti eliminare una delle due funzioni.

Spero che qualche utente esperto di PostgreSQL/PostGIS possa darti ulteriori indicazioni utili, oltre a quelle già presenti nei link.

A presto.

Andrea

Il 27/05/2021 10:17, COSTA DOMENICO ha scritto:

Ciao Andrea,
intanto grazie.
ho cercato di rispondere punto per punto identificando le mie risposte con una linea tratteggiata,
in effetti ci sono due funzioni omonime > > > st_curvetoline
grazie

saluti
Domenico

Ciao Domenico,
quindi si tratta dello strumento "Informazioni elementi"(tool "Indentify
features").
INIZIO-----------------------------------------------------------------
sì è questo
FINE-----------------------------------------------------------------

Non l'hai indicato ma continuo a presumere che il problema sia relativo
ad un layer PostgreSQL/PostGIS. Questo problema c'è solo con quel
determinato layer PostgreSQL/PostGIS o con tutti i layer su un
determinato server PostgreSQL/PostGIS o su qualsiasi server
PostgreSQL/PostGIS?
INIZIO-------------------------------------------------
sì tutte le tabelle postgresql/postgis versione 12 e/o 13, la 14 non l'ho provata
FINE-------------------------------------------------

Il server PostgreSQL/PostGIS che stai usando è amministrato da te sul
tuo PC? Puoi controllare se ci siano più di una funzione st_curvetuline?
INIZIO---------------------------------------------------------
sì è un server virtuale (virtualbox) che ho più volte (re)installato, con vari tentativi e "miscugliamenti"
FINE---------------------------------------------------------

Per farlo puoi usare il comando \df st_curvetoline
INIZIO---------------------------------------------------------
psql

  public | st_curvetoline | geometry | geometry | funzione
  public | st_curvetoline | geometry | geom geometry, tol double precision DEFAULT 32, toltype integer DEFAULT 0, flags integer DEFAULT 0 | funzione
(2 righe)
FINE---------------------------------------------------------

Per maggiori informazioni:
https://docs.qgis.org/3.16/it/docs/training_manual/spatial_databases/spatial_functions.html#looking-at-the-installed-postgis-functions
https://stackoverflow.com/questions/20487940/postgis-function-is-not-unique
https://stackoverflow.com/questions/12331981/error-function-addgeometrycolumn-is-not-unique
INIZIO---------------------------------------------------------
Andrò a leggere
FINE---------------------------------------------------------

Comunque non ho capito cosa è cambiato tra quando funzionava e adesso
che non funziona più.
INIZIO---------------------------------------------------------
E' la cosa che mi domando anch'io
FINE---------------------------------------------------------

La versione di QGIS? Con quale versione
funzionava? Hai con la versione con cui funzionava prima se funziona
anche adesso?
INIZIO---------------------------------------------------------
Ubuntu 18.04 e postgrsql 11 postgis 3 LTS con QGIS 3.16 FUNZIONA
comunque con tutte le versioni di sistema operativo e accoppiata posgresql relativa antecedenti la 20.04 LTS Funziona
FINE---------------------------------------------------------

Grazie Andrea
leggerò i "link" che mi hai suggeriti e . . . vedremo
cordialmente

Domenico

Ciao Domenico,
stai rispondendo direttamente al mio indirizzo e-mail invece che
all'indirizzo della mailing list qgis-it-user@lists.osgeo.org.
Sarebbe meglio fare in modo di rispondere all'indirizzo della mailing
list qgis-it-user@lists.osgeo.org invece che al mio, altrimenti altri
utenti che potrebbero aiutarti a risolvere il problema non possono
leggere le tue risposte.

Dalle risposte che mi hai inviato mi pare quindi di poter capire che non
è cambiata la versione di QGIS ma la versione di Ubuntu e
l'installazione del server PostgreSQL/PostGIS.
Quindi si dovrebbe dedurre che il problema non è in QGIS, ma nel server.
Infatti hai confermato che presenta due funzioni st_curvetoline invece
che una.
Essendocene due, il server non riesce a capire quale deve utilizzare, a
meno che ciò non sia esplicito nella query, per esempio indicato il type
cast e i vari parametri. Oppure potresti eliminare una delle due funzioni.

Spero che qualche utente esperto di PostgreSQL/PostGIS possa darti
ulteriori indicazioni utili, oltre a quelle già presenti nei link.

A presto.

Andrea

Il 27/05/2021 10:17, COSTA DOMENICO ha scritto:

Ciao Andrea,
intanto grazie.
ho cercato di rispondere punto per punto identificando le mie risposte con una linea tratteggiata,
in effetti ci sono due funzioni omonime > > > st_curvetoline
grazie

saluti
Domenico

Ciao Domenico,
quindi si tratta dello strumento "Informazioni elementi"(tool "Indentify
features").
INIZIO-----------------------------------------------------------------
sì è questo
FINE-----------------------------------------------------------------

Non l'hai indicato ma continuo a presumere che il problema sia relativo
ad un layer PostgreSQL/PostGIS. Questo problema c'è solo con quel
determinato layer PostgreSQL/PostGIS o con tutti i layer su un
determinato server PostgreSQL/PostGIS o su qualsiasi server
PostgreSQL/PostGIS?
INIZIO-------------------------------------------------
sì tutte le tabelle postgresql/postgis versione 12 e/o 13, la 14 non l'ho provata
FINE-------------------------------------------------

Il server PostgreSQL/PostGIS che stai usando è amministrato da te sul
tuo PC? Puoi controllare se ci siano più di una funzione st_curvetuline?
INIZIO---------------------------------------------------------
sì è un server virtuale (virtualbox) che ho più volte (re)installato, con vari tentativi e "miscugliamenti"
FINE---------------------------------------------------------

Per farlo puoi usare il comando \df st_curvetoline
INIZIO---------------------------------------------------------
psql

  public | st_curvetoline | geometry | geometry | funzione
  public | st_curvetoline | geometry | geom geometry, tol double precision DEFAULT 32, toltype integer DEFAULT 0, flags integer DEFAULT 0 | funzione
(2 righe)
FINE---------------------------------------------------------

Per maggiori informazioni:
https://docs.qgis.org/3.16/it/docs/training_manual/spatial_databases/spatial_functions.html#looking-at-the-installed-postgis-functions
https://stackoverflow.com/questions/20487940/postgis-function-is-not-unique
https://stackoverflow.com/questions/12331981/error-function-addgeometrycolumn-is-not-unique
INIZIO---------------------------------------------------------
Andrò a leggere
FINE---------------------------------------------------------

Comunque non ho capito cosa è cambiato tra quando funzionava e adesso
che non funziona più.
INIZIO---------------------------------------------------------
E' la cosa che mi domando anch'io
FINE---------------------------------------------------------

La versione di QGIS? Con quale versione
funzionava? Hai con la versione con cui funzionava prima se funziona
anche adesso?
INIZIO---------------------------------------------------------
Ubuntu 18.04 e postgrsql 11 postgis 3 LTS con QGIS 3.16 FUNZIONA
comunque con tutte le versioni di sistema operativo e accoppiata posgresql relativa antecedenti la 20.04 LTS Funziona
FINE---------------------------------------------------------

Buongiorno.
il metodo usato è un pò brutale ma funziona.
ho cancellato una delle due funzioni presenti nel database che interrogo e QGIS risponde normalmente

Grazie

Domenico