[Gfoss] ST_Union e PostGIS

Massimiliano Moraca massimilianomoraca a gmail.com
Mer 13 Dic 2017 16:38:22 CET


Tra l'altro noto che le VIEW rendono il caricamento dei dati in QGIS un
processo molto lento, cosa che non avviene nelle table.

Il giorno 13 dicembre 2017 15:19, Massimiliano Moraca <
massimilianomoraca a gmail.com> ha scritto:

> La facevo facile quindi io Sandro.. :|
>
> hint: ma perche' vuoi usare proprio una Spatial View ?
>> nel tuo caso, se ho capito bene il problema, sarebbe molto
>> piu' opportuno materializzare ancora un'altra tavola, p.es.:
>
>
> Voglio creare una view in virtù del fatto che si autoaggiorna...in pratica
> ogni tanto capita che mi venga chiesto di spostare un villaggio da una
> categoria all'altra e rifare la tabella ogni volta è scocciante. Mi spiego
> meglio. Il file in questione è solo un estratto depurato di tutta una serie
> di informazioni(per motivi di privacy relativa al progetto) che rientrano
> in una decina di colonne. Ad esempio:
>
> Nome|Colore|tipo|area
> A|rosso|tipo1|10
> B|verde|tipo2|100
> C|blu|tipo1|3
> D|rosso|tipo1|450
> E|blu|tipo3|753
>
> Se per qualche motivo B deve diventare tipo3 ed io ho un raggruppamento
> per tipo con una sommatoria delle aree per tipo, con la view mi basta
> cambiare il dato nella tabella sorgente per avere attivo l'automatismo;
> altrimenti dovrei creare una nuova tabella ogni volta.
>
> Il giorno 13 dicembre 2017 14:56, <a.furieri a lqt.it> ha scritto:
>
>> On Wed, 13 Dec 2017 13:56:20 +0100, Massimiliano Moraca wrote:
>>
>>> Come ho detto a Marco ogc_fid è chiave primaria. Avevo notato
>>> un po' di tempo fa che nel creare le VIEW SpatiaLite ti chiede
>>> comunque un id dalla tabella sorgente, id assegnato poi random.
>>>
>>>
>> Massimiliano,
>>
>> stai ben attento perche' qua rischi di combinare un bell'arrosto.
>>
>> 1. "nel creare le VIEW SpatiaLite ti chiede comunque un id dalla
>>    tabella sorgente"
>>
>>    esatto, e' proprio cosi': per la precisione ti chiede di
>>    specificare quale sia il nome della colonna-VIEW che riporta
>>    il ROWID che identifica la riga della tavola-input che
>>    fornisce la geometria presente nella View.
>>    Corollario: una Spatial View di SpatiaLite non puo' mai
>>    fornire una geometria che sia il risultato di una funzione
>>    o il frutto di una aggregazione.
>>    _DEVE_ necessariamente essere una geometria presa tal
>>    quale da una delle tavole di input della View, senza che
>>    intervenga nessuna manipolazione di sorta.
>>   e la colonna "rowid" presente nella Spatial View deve
>>   consentire di tenere coerentemente in synchro le righe
>>   della tavola-madre con il suo eventuale Spatial Index.
>>
>>
>> 2. "id assegnato poi random"
>>
>>    assolutamene _NO_ !!!!
>>    non puo' essere random, _DEVE_ identificare esattamente
>>    la riga della tavola che fornisce la geometria (ergo, o
>>    si tratta di una PK oppure in forma piu' geerica di un
>>    ROWID).
>>    e c'e' un motivo assolutamente stringente per imporre
>>    questo vincolo: altrimenti lo Spatial Index (che e' sempre
>>    basato sulla tavola primaria e non sulla View) impazzisce,
>>    e fornira' risultati padellati di pura fantasia con
>>    risultati folli e potenzialmete devastanti.
>>    in buona sostanza, se nella colonna ROWID della Spatial
>>    View fai in modo che ci finiscano "valori random" stai
>>    facendo tutto il possibile per massacrare la logica di
>>    funzionamento dello Spatial Index.
>>    per inciso, ti ricordo che su SQLite/SpatiaLite lo
>>    Spatial Index R*TRee non e' affatto un "indice", ma e'
>>    semplicemente un'ulteriore tavola, anzi per l'esattezza
>>    e' una VirtualTable.
>>    funziona, e funziona pure in modo molto efficiente, ma
>>    esige  lo scrupoloso rispetto di tutta una serie di vincoli
>>    basati sullo scrupoloso rispetto dei JOIN relazionale
>>    basati sul ROWID, altrimenti salta tutto per aria.
>>
>> hint: ma perche' vuoi usare proprio una Spatial View ?
>> nel tuo caso, se ho capito bene il problema, sarebbe molto
>> piu' opportuno materializzare ancora un'altra tavola, p.es.:
>>
>> CREATE TABLE dipart2 AS
>> SELECT cd_diparti, dipartimen, ST_Union(geom) AS geometry
>> FROM dipartimenti
>> GROUP BY cd_diparti;
>> SELECT RecoverGeometryColumn('dipart2', 'geometry', ......);
>> SELECT CreateSpatialIndex('dipart2', 'geometry');
>>
>> ciao Sandro
>>
>>
>


Maggiori informazioni sulla lista Gfoss