[Gfoss] R: Re: R: Re: R: Re: DB e creazione multipolygons

Marco Li Volsi marco.livolsi a gmail.com
Mar 18 Nov 2014 12:06:36 CET


Se tutto l'accrocchio che ti ho scritto è andato bene puoi creare una 
vista (una vista materializzata o una tabella fisica) con
CREATE VIEW {schema}.{nome vista} AS
SELECT p.{id progetto}, {... tutti i vari campi che ti pare dalle 
tabelle che vuoi}, ST_Multi(ST_Collect(a.{geometria delle aree}))
FROM {schema}.{tabella progetti} p
LEFT JOIN {schema}.rlt_progetti_aree pa
     ON p.id = pa.id_progetti
INNER JOIN {tabella aree} a
     ON pa.id_aree = a.{id area}
GROUP BY p.{id progetto}
ORDER BY p.{id progetto};
come prima sostituisci alle parti fra {} i campi, tabelle e schema, fai 
i tuoi controlli e fammi sapere.
Ciao.


-------- Messaggio Inoltrato --------
Oggetto: 	Re: R: Re: [Gfoss] R: Re: R: Re: DB e creazione multipolygons
Data: 	Tue, 18 Nov 2014 10:02:07 +0100
Mittente: 	Marco Li Volsi <marco.livolsi a gmail.com>
A: 	GFOSS <gfoss a lists.gfoss.it>



Ok, dopo 9 ore di sonno (non ancora completate), posso continuare.
Dopo aver creato la tabella di relazione n-n
CREATE TABLE rlt_progetti_aree
(
   id_progetti integer NOT NULL,
   id_aree integer NOT NULL,
   CONSTRAINT pk_rlt_aree_progetti PRIMARY KEY (id_progetti, id_aree)
);
utilizza questo pezzetto di codice pl/pgsql per popolare la tabella
DO $$
DECLARE
     separator text;
     cur_progetti CURSOR FOR SELECT {id progetto}, {aree progetto} FROM 
{schema}.{tabella progetti} ORDER BY {id progetto};
     cur_aree CURSOR (narea_progetto text) IS SELECT {id area} FROM 
{schema}.{tabella aree} WHERE {nome area} = narea_progetto ORDER BY {id 
area};
     aree_id integer;
     aree_values text[];
     aree_avalue text;
BEGIN
     separator := '/';
     FOR rec_progetti IN cur_progetti LOOP
         aree_id := rec_progetti.id;
         aree_values := regexp_split_to_array(rec_progetti.aree, separator);
         FOREACH aree_avalue IN ARRAY aree_values LOOP
             FOR rec_aree IN cur_aree(trim(both ' ' from aree_avalue)) LOOP
                 EXECUTE 'INSERT INTO {schema}.rlt_progetti_aree 
(id_progetti, id_aree) VALUES (' || aree_id ||', ' || rec_aree.{id area} 
|| ')';
             END LOOP;
         END LOOP;
     END LOOP;
END $$;
sostituisci alle parti tra {} i nomi dei campi, delle tabelle e dello 
schema delle tue tabelle di progetti e aree.
Questo codice ha delle limitazioni:
i nomi delle aree scritte nel campo della tabella progetti deve essere 
PERFETTAMENTE IDENTICO con il nome riportato nella tabella delle aree 
(carattere per carattere, anche le maiuscole/minuscole), altrimenti la 
relazione tra aree e progetti verrà saltata
Esegui il codice in una finestrella SQL di PgAdminIII e dovresti avere 
la tabella di relazione popolata.
Ciao.

Il 17/11/2014 21:15, nora_tassetti a libero.it ha scritto:
> Ho uno shp con 74 aree  di base e un tabella con 2600 progetti svolti 
>  in aree che sono combinazioni delle 74 aree base. Sì entrambe già in 
> PostGis.
> grazie davvero per l'aiuto!
>
>     ----Messaggio originale----
>     Da: marco.livolsi a gmail.com
>     Data: 17/11/2014 21.11
>     A: "GFOSS"<gfoss a lists.gfoss.it>
>     Ogg: Re: [Gfoss] R: Re: R: Re: DB e creazione multipolygons
>
>     Perchè si possa risolvere questo compitino via SQL bisognerebbe
>     creare una tabella di relazione n-n e popolarla opportunamente con
>     le informazioni prese dal campo AREA.
>     2 domandine semplici semplici:
>
>       * quanti sono i nomi delle aree?
>       * le 2 tabelle stanno già su PostGIS?
>
>     Ciao.
>
>     Il 17/11/2014 18:37, nora_tassetti a libero.it ha scritto:
>>     Sì la tua analisi è giusta: Più progetti cadono nella stessa area
>>     e un 'area può interessare più progetti e la relazione è
>>     esplicita in formato testuale nel campo AREA della tabella dei
>>     progetti secondo la metrica  " area1 / area2 / area3".
>>     Delle aree di base ho uno shp con campi ID e NOME_AREA.
>>     Non capisco come mi conviene procedere. Il tutto deve andare in
>>     un webGis.
>>
>>     Grazie e scusate ma con il problema sotto glio occhi sembra
>>     sempre di dare una spiegazione esaustiva ;)
>>
>>         ----Messaggio originale----
>>         Da: marco.livolsi a gmail.com
>>         Data: 17/11/2014 16.11
>>         A: "GFOSS"<gfoss a lists.gfoss.it>
>>         Ogg: Re: [Gfoss] R: Re: DB e creazione multipolygons
>>
>>         Ciao... Interpreto:
>>         Hai una tabella con dentro delle aree:
>>         id,nome
>>         1,pippo
>>         2,pluto
>>         3,paperino
>>         4,paperone
>>         5,paperoga
>>         6,orazio
>>         7,clarabella
>>         8,nonna papera
>>         Hai anche una tabella con dentro i progetti, vari campi tra
>>         cui uno testuale con nomi di area (coincidenti con la
>>         precedente) scritti secondo una certa metrica
>>         campo1,..., aree
>>         [valore1],... , "pippo / paperino / clarabella"
>>         [valore2],... , "paperino / paperoga"
>>         [valore3],... , "pluto / paperone / paperoga"
>>         la metrica di questo campo è ben definita
>>         [nomearea]+[spazio]+[/]+[nomearea]+[spazio]+...+[nomearea]
>>         Secondo la tua descrizione le tabelle delle aree e dei
>>         progetti sono in relazione n-n, tuttavia tale relazione è
>>         esplicitata in formato testuale in un campo della tabella dei
>>         progetti.
>>         La mia analisi è giusta?
>>
>>         Il 17/11/2014 14:14, nora_tassetti a libero.it ha scritto:
>>>         Ok, certo....scusate avevo dato per scontato che sto lavorando con QGIS e
>>>         PostGIS
>>>         Grazie
>>>
>>>>         ----Messaggio originale----
>>>>         Da:lucadeluge a gmail.com
>>>>         Data: 17/11/2014 14.10
>>>>         A:"nora_tassetti a libero.it"<nora_tassetti a libero.it>
>>>>         Cc: "GFOSS"<gfoss a lists.gfoss.it>
>>>>         Ogg: Re: [Gfoss] DB e creazione multipolygons
>>>>
>>>>         2014-11-17 13:52 GMT+01:00nora_tassetti a libero.it  <nora_tassetti a libero.it>:
>>>>>         ciao a tutti,
>>>>>         Devo costruire una geodatabase di progetti europei con le relative aree in
>>>>>         cui questi progetti sono stati svolti.
>>>>>         Ho la tabella dei circa 2600 progetti  a cui devo associare le aree che
>>>>>         però devo costruire partendo da poligoni di base già digitalizzati (A, B, C
>>>>>         etc) . I poligoni di base devono essere combinati secondo quando scritto in
>>>>>         un campo della tabella dei progetti ( es "A / B / E" oppure "D / A / G") .
>>>>>         Penso di dover creare i 2600 multipolygon e procedere con operazioni di
>>>>>         Join. Come?
>>>>>         Oppure, qualcuno mi sa suggerire una strada migliore?
>>>>>
>>>>         con che software? sarebbe importante scrivere una mail che tutti
>>>>         possano capire e non solo che la scrive.
>>>>         Ricordo a tutti gli iscritti di rispettare la netiquette [0]
>>>>
>>>>>         Spero di essere riuscita a spiegarmi.
>>>>>         Grazie in anticipo per l'aiuto!
>>>>>
>>>>>         N.
>>>>>
>>>>         [0]http://it.wikipedia.org/wiki/Netiquette
>>>>
>>>>         -- 
>>>>         ciao
>>>>         Luca
>>>>
>>>>         http://gis.cri.fmach.it/delucchi/
>>>>         www.lucadelu.org
>>>>
>>>         _______________________________________________
>>>         Gfoss a 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
>>
>>
>>
>
>
>



-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.gfoss.it/pipermail/gfoss/attachments/20141118/b657d437/attachment.html>


Maggiori informazioni sulla lista Gfoss