[Gfoss] QGIS: differenze nella esportazione in shapefiles da spatialite

a.furieri a lqt.it a.furieri a lqt.it
Gio 12 Nov 2015 10:41:29 CET


On Thu, 12 Nov 2015 10:11:30 +0100, Andrea Peri wrote:
> Avevo dimenticato un dettaglio.
>
> Ritengo che questo prolemaci sarebbe anche con i dati esportati da
> postgis/postgres.
>
> Quando si esporta in shapefile da QGIS una tabella postgis, poiche'
> viene usato sempre gdal, mi aspetto che anche in quel caso metta i
> cami testo a 255 caratteri , aumentando smodatamente la dimensione
> della compoennete DBF dello shapefile.
> Non avendo postgis non posso provare, ma sono abbastanza convinto di 
> questo.
> Al solito come dicevo non e' un bug, ma un comportamento indotto
> volutamente e quindi occorre conoscerlo e conviverci.
>
>

Andrea,

sarebbe opportuno fare una prova pratica; personalmente non sono
del tutto convinto che GDAL/PG esporti tutte le colonne testuali
lunghe 255.

notoriamente sqlite non usa datatypes "forti"; quando trovi dichiarata
una colonna TEXT potrebbe legittimamente contenere stringhe di
qualsiasi lunghezza, da 1 byte fino ad 1GB (e pure oltre, se sqlite
e' stato compilato abilitando qualche flag non-standard).
insomma, su sqlite non puoi assolutamente sapere in anticipo quale
e' la lunghezza massima reale, a meno che tu non faccia una prima
passata "preventiva" per esplorare il dataset (oppure ti appoggi
sulle statistiche, che suppergiu' ottiene lo stesso effetto).
spatialite segue sempre questa seconda strada, piu' lenta ma piu'
accurata; GDAL ed altri preferiscono andare per le spicce ed
assumono sempre una lunghezza fissa pari a 255; entrambi gli
approcci sono ragionevoli in relazione al contesto specifico
di sqlite.

invece su PostgreSQL quando trovi una colonna VARCHAR(60) sei
assolutamente certo che nessuno dei valori che incontrerai
durante il run time potra' mai superare i 60 char; e quindi
mi aspetterei che in queste condizioni GDAL crei nel DBF proprio
una colonna dimensionata per 60 ... nel contesto PG non c'e'
assolutamente nessun motivo per andare a crearne una di 255.

ciao Sandro


> La differenza sarebbe che mentre con satialite abbiam un software
> spatialite-gui che permette digenerare degli shapefile ai miimi
> temrini, con postgres penso che analogo software non ci sia , ma qui
> forse qualcuno piu' a dentro a postgis potrebbe fornire maggiori
> informazioni.
>
> A.
>
>
> Il 12 novembre 2015 10:02, Andrea Peri <aperi2007 a gmail.com> ha 
> scritto:
>> Salve,
>>
>> ho completato i confronti che volevo fare e ho rilevato un 
>> importante
>> differenza che potrebbe incidere negativamente nel lavoro in casi
>> particolari.
>>
>> Per cui riporto il caso di uso affinche' chi sia interessato trovi
>> aiuto in questa spiegazione.
>>
>> Il caso di uso e' i seguente:
>>
>> Esportazione di shapefile da uno spatialite, che a volte risulta
>> esseredi dimensione X (es: 700Mbytes) in altre circostanze lo stesso
>> shapefile sempre prodotto per esportazione dallo spatialite era di
>> 3Gbytes.
>>
>>
>> Dopo una serie di indagini si e' scoperto che la causa e' dovuta al
>> software usato per tale esportazione.
>>
>> La faccio breve:
>>
>> se si esporta una tabella spatialite in shapefile usando la
>> Spatialite-GUI di spatialite si otterriene nel nostro caso uno
>> shapefile di 700Mbytes circa.
>> Mentre se si esporta la medesima tabella del medesimo spatialite
>> usando QGIS si ottiene uno shapefile di circa 3Gbytes.
>>
>> Ilperche' e' duvoto alla dimensione dei campi.
>> Infatti QGIS usa gdal e gdal sembra che allochi sempre la massima 
>> dimensione.
>> Per cui i campi testo sono sempre di 255 caratteri, idem per i campi
>> numerici, e cosi' via.
>>
>> Mentre la spatialite-GUI effettua sempre una indagine preventiva
>> misurando record per record la dimensione dei campi e allocando 
>> quindi
>> la miima dimensione necessaira perospitare i avalori ivi contenuti.
>>
>> Tradotto in soldoni:
>>
>> IL medesimo campo del medesimo record se esportato da spatialite-GUI
>> potrebbe essere di 1 carattere se dentro ci sta il valore "A".
>> Mentre il medesimo campo del medesimo record esportato da qgis si
>> rotrvera' smepre con il valore "A", ma in un cmapo di dimensione 255
>> caratteri.
>>
>> Per cui potenzialmente potrebbe arrivare a essere 255 volte 
>> maggiore.
>> :)
>>
>> Ovviamente quesot non e' un errore.
>> Non ci sono ticket da aprire, perche' in certi casi e' preferibile 
>> la
>> minima dimensione, in altri e' preferibile la massima.
>>
>> Pero' e' importante saperlo, perche' se poi a causa di questi 
>> dettalgi
>> lo shapefile supera i 2Gbyte, perde la compatibilita' con i 
>> softwares
>> ESRI e questo crea un problema, non per i professionisti che 
>> ovviamnte
>> gli importa il giusto di esri, ma per chi lavora nel pubblico che
>> vorrebbe generare degli shapefile che siano compatibili con tutti
>> quanti.
>>
>> Il problema nasce con archivi grossi ovviamente, quanto il rischio 
>> di
>> sforre i 2Gbyte si fa' concreto.
>>
>> A.
>>
>> --
>> -----------------
>> Andrea Peri
>> . . . . . . . . .
>> qwerty àèìòù
>> -----------------



Maggiori informazioni sulla lista Gfoss