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

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!

···

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@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 :wink:

----Messaggio originale----
Da: marco.livolsi@gmail.com
Data: 17/11/2014 16.11
A: "GFOSS"gfoss@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@libero.it ha scritto:

Ok, certo....scusate avevo dato per scontato che sto lavorando con QGIS e 
PostGIS
Grazie

----Messaggio originale----
Da: [lucadeluge@gmail.com](mailto:lucadeluge@gmail.com)
Data: 17/11/2014 14.10
A: ["nora_tassetti@libero.it"](mailto:nora_tassetti@libero.it)[<nora_tassetti@libero.it>](mailto:nora_tassetti@libero.it)
Cc: "GFOSS"[<gfoss@lists.gfoss.it>](mailto:gfoss@lists.gfoss.it)
Ogg: Re: [Gfoss] DB e creazione multipolygons

2014-11-17 13:52 GMT+01:00 [nora_tassetti@libero.it](mailto:nora_tassetti@libero.it) [<nora_tassetti@libero.it>](mailto:nora_tassetti@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](http://it.wikipedia.org/wiki/Netiquette)

-- 
ciao
Luca

[http://gis.cri.fmach.it/delucchi/](http://gis.cri.fmach.it/delucchi/)
[www.lucadelu.org](http://www.lucadelu.org)

_______________________________________________
[Gfoss@lists.gfoss.it](mailto:Gfoss@lists.gfoss.it)
[http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss](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

Bisogna, prima di tutto, creare una tabella di relazione n-n... ho immaginato questa
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)
);
immaginando che i campi chiave delle tabelle delle aree e dei progetti siano di tipo numerico integer.
A domani per la procedura per sbrogliare la matassa... oggi sono cotto.

Il 17/11/2014 21:15, nora_tassetti@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@gmail.com
    Data: 17/11/2014 21.11
    A: "GFOSS"<gfoss@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@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 :wink:

        ----Messaggio originale----
        Da: marco.livolsi@gmail.com
        Data: 17/11/2014 16.11
        A: "GFOSS"<gfoss@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@libero.it ha scritto:

        Ok, certo....scusate avevo dato per scontato che sto lavorando con QGIS e
        PostGIS
        Grazie

        ----Messaggio originale----
        Da:lucadeluge@gmail.com
        Data: 17/11/2014 14.10
        A:"nora_tassetti@libero.it"<nora_tassetti@libero.it>
        Cc: "GFOSS"<gfoss@lists.gfoss.it>
        Ogg: Re: [Gfoss] DB e creazione multipolygons

        2014-11-17 13:52 GMT+01:00nora_tassetti@libero.it <nora_tassetti@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@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

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@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@gmail.com
    Data: 17/11/2014 21.11
    A: "GFOSS"<gfoss@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@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 :wink:

        ----Messaggio originale----
        Da: marco.livolsi@gmail.com
        Data: 17/11/2014 16.11
        A: "GFOSS"<gfoss@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@libero.it ha scritto:

        Ok, certo....scusate avevo dato per scontato che sto lavorando con QGIS e
        PostGIS
        Grazie

        ----Messaggio originale----
        Da:lucadeluge@gmail.com
        Data: 17/11/2014 14.10
        A:"nora_tassetti@libero.it"<nora_tassetti@libero.it>
        Cc: "GFOSS"<gfoss@lists.gfoss.it>
        Ogg: Re: [Gfoss] DB e creazione multipolygons

        2014-11-17 13:52 GMT+01:00nora_tassetti@libero.it <nora_tassetti@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@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

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@gmail.com
A: GFOSS gfoss@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@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@gmail.com
Data: 17/11/2014 21.11
A: "GFOSS"gfoss@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@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 :wink:

----Messaggio originale----
Da: marco.livolsi@gmail.com
Data: 17/11/2014 16.11
A: "GFOSS"gfoss@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@libero.it ha scritto:

Ok, certo....scusate avevo dato per scontato che sto lavorando con QGIS e 
PostGIS
Grazie

----Messaggio originale----
Da: [lucadeluge@gmail.com](mailto:lucadeluge@gmail.com)
Data: 17/11/2014 14.10
A: ["nora_tassetti@libero.it"](mailto:nora_tassetti@libero.it)[<nora_tassetti@libero.it>](mailto:nora_tassetti@libero.it)
Cc: "GFOSS"[<gfoss@lists.gfoss.it>](mailto:gfoss@lists.gfoss.it)
Ogg: Re: [Gfoss] DB e creazione multipolygons

2014-11-17 13:52 GMT+01:00 [nora_tassetti@libero.it](mailto:nora_tassetti@libero.it) [<nora_tassetti@libero.it>](mailto:nora_tassetti@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](http://it.wikipedia.org/wiki/Netiquette)

-- 
ciao
Luca

[http://gis.cri.fmach.it/delucchi/](http://gis.cri.fmach.it/delucchi/)
[www.lucadelu.org](http://www.lucadelu.org)

_______________________________________________
[Gfoss@lists.gfoss.it](mailto:Gfoss@lists.gfoss.it)
[http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss](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