[Gfoss] Tabella spatialite e fallimento dello zoom all'estensione del layer con QGis

Salve a tutti,
ho un dilemma sull’estensione di una tabella spatialite.
Il caso: ho una serie di geometrie disegnate in vari punti d’Italia, nella fattispecie nel Lazio e in Romagna. Se in Qgis faccio una interrogazione per chiamare solo le geometrie del Lazio e clicco su zoom all’estensione del layer, il canvas di Qgis non si aggiorna e solo dopo aver selezionato qualche riga dalla tabella del subset, posso fare zoom alla selezione.

E’ possibile che la mia tabella spatialite sia “corrotta” e che non riesca più a capire bene la propria estensione a seconda della query attiva?

Qualcuno ha una mezza idea di dove mettere le mani?

Grazie mille
Luca

On Mon, 17 Nov 2014 15:41:22 +0100, Luca Mandolesi wrote:

E' possibile che la mia tabella spatialite sia "corrotta" e che non
riesca più a capire bene la propria estensione a seconda della query
attiva?

non e' affatto impossibile che lo Spatial Index si corrompa.
in genere accase quando:
- la tavola non ha nessuna Primary Key, oppure ha una Primary Key
   che non e' composta da un'unica colonna INTEGER
- e' stato fatto un VACUUM che ha riordinato fisicamente tutte le
   righe facendo cosi' impazzire i ROWIDs

Qualcuno ha una mezza idea di dove mettere le mani?

prima verifica se hai tavole senza ROWID o com shadowed-ROWID:

SELECT f_table_name, CheckShadowedRowid(f_table_name),
     CheckWithoutRowid(f_table_name)
FROM geometry_columns;

se tutto va bene vedrai tutto a ZERO; se vedi qualche 1 invece
significa che hai problemi.

poi vai a verificare se ci sono Spatial Index corrotti:

SELECT CheckSpatialIndex();

qua funziona all'inverso: se torna 1 tutto bene, altrimenti
se torna ZERO ci sono problemi. in quest'ultimo caso per
rimettere tutto a posto:

SELECT RecoverSpatialIndex();

ciao Sandro

Ciao Alessandro,
ho fatto tutte le verifiche del caso…nulla pare essere tutto ok…la cosa stranissima è che dentro Qgis ho una vista,
che, anche se settata con una query verso un certo pacchetto di geometrie collocate tutte vicine,
l’estensione al layer a cui va qgis è quella delle geometrie di tutta la tabella geometrica che contiene il campo geom.

A questo punto mi faccio tale domanda: provo a sbatterci la testa per trovare un eventuale bachetto…magari in Qgis nel leggere la mia
view ipoteticamente corrotta, oppure meglio che butto via la tabella e la view e rifaccio tutto pulito e verificare se il problema
persiste?

Il DB è quello distribuito col plugin pyarchinit, quindi va sempre sputato fuori vuoto o al massimo col
dataset del tutorial…quindi danni non ne faccio…ma ovvio che così se scrivo che facendo una query e poi zoom all’estensione del layer si
dovrebbe zoomare alle geometrie verrei smentito dal canvas di Qgis che se ne starebbe immobile nel nulla! :slight_smile:

Grazie per i suggerimenti
Luca

···

Il giorno 17 novembre 2014 15:55, <a.furieri@lqt.it> ha scritto:

On Mon, 17 Nov 2014 15:41:22 +0100, Luca Mandolesi wrote:

E’ possibile che la mia tabella spatialite sia “corrotta” e che non
riesca più a capire bene la propria estensione a seconda della query
attiva?

non e’ affatto impossibile che lo Spatial Index si corrompa.
in genere accase quando:

  • la tavola non ha nessuna Primary Key, oppure ha una Primary Key
    che non e’ composta da un’unica colonna INTEGER
  • e’ stato fatto un VACUUM che ha riordinato fisicamente tutte le
    righe facendo cosi’ impazzire i ROWIDs

Qualcuno ha una mezza idea di dove mettere le mani?

prima verifica se hai tavole senza ROWID o com shadowed-ROWID:

SELECT f_table_name, CheckShadowedRowid(f_table_name),
CheckWithoutRowid(f_table_name)
FROM geometry_columns;

se tutto va bene vedrai tutto a ZERO; se vedi qualche 1 invece
significa che hai problemi.

poi vai a verificare se ci sono Spatial Index corrotti:

SELECT CheckSpatialIndex();

qua funziona all’inverso: se torna 1 tutto bene, altrimenti
se torna ZERO ci sono problemi. in quest’ultimo caso per
rimettere tutto a posto:

SELECT RecoverSpatialIndex();

ciao Sandro


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+40 iscritti al 5.6.2014