[Gfoss] Concatenazione di stringhe in uno shapefile

Ciao a tutti,
ho un problema molto pratico.
Per svariati motivi ho 2 shapefile lineari uguali (stesse geometrie) con uno stesso campo testuale (NOME) contenente, nel primo shapefile la prima parte di un codice, nel secondo shapefile la seconda parte; le due parti peròsono sovrapposte.
Cerco di esemplificare:
1° shp 2° shp
NOME NOME
qwer erty
asdf dfgh
zxcv cvbn

Io vorrei avere un campo NOME con
qwerty
asdfgh
zxcvbn
cioè tutti i caratteri del primo shp e il 3° e 4° del secondo.

Ho provato a usare la funzione di concatenazione || nel field calculator di QGIS, ma non riesco a gestire la sovrapposizione dei caratteri. Sapreste aiutarmi?

Generalizzo la domanda: con le API di QGIS o con qualche altra libreria (ogr?, shapelib?) è possibile farlo con uno script senza entrare in QGIS?
Grazie per qualsiasi spunto!
Ale

--
Alessandro Sarretta

e-mail: alessandro.sarretta@gmail.com
skype: alesarrett
Web: http://ilsarrett.wordpress.com
Twitter: https://twitter.com/alesarrett
Google scholar: http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ
ORCID: http://orcid.org/0000-0002-1475-8686
ResearchGate: https://www.researchgate.net/profile/Alessandro_Sarretta/

2013/5/21 Alessandro Sarretta <alessandro.sarretta@gmail.com>:

Ciao a tutti,
ho un problema molto pratico.
Per svariati motivi ho 2 shapefile lineari uguali (stesse geometrie) con uno
stesso campo testuale (NOME) contenente, nel primo shapefile la prima parte
di un codice, nel secondo shapefile la seconda parte; le due parti peròsono
sovrapposte.
Cerco di esemplificare:
1° shp 2° shp
NOME NOME
qwer erty
asdf dfgh
zxcv cvbn

Io vorrei avere un campo NOME con
qwerty
asdfgh
zxcvbn
cioè tutti i caratteri del primo shp e il 3° e 4° del secondo.

Ho provato a usare la funzione di concatenazione || nel field calculator di
QGIS, ma non riesco a gestire la sovrapposizione dei caratteri. Sapreste
aiutarmi?

Ciao Ale

Con il QGIS field calculator puoi usare la concatenazione giocando con
la funzione substr dopo aver fatto uno spatial join dei due shapefile.

Nel tuo caso dovrebbe essere:
substr(field1, 0, 4) || substr(field2, 2, length(mytest2))

ciao
p

--
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti
skype: capooti

Grazie Paolo,
la concatenzazione funzia a dovere!
Esiste una modalità (o una documentazione per approfondire) per farlo al di fuori dell'interfaccia di QGIS?
Ale

On 05/21/2013 04:14 PM, Paolo Corti wrote:

2013/5/21 Alessandro Sarretta <alessandro.sarretta@gmail.com>:

Ciao a tutti,
ho un problema molto pratico.
Per svariati motivi ho 2 shapefile lineari uguali (stesse geometrie) con uno
stesso campo testuale (NOME) contenente, nel primo shapefile la prima parte
di un codice, nel secondo shapefile la seconda parte; le due parti peròsono
sovrapposte.
Cerco di esemplificare:
1° shp 2° shp
NOME NOME
qwer erty
asdf dfgh
zxcv cvbn

Io vorrei avere un campo NOME con
qwerty
asdfgh
zxcvbn
cioè tutti i caratteri del primo shp e il 3° e 4° del secondo.

Ho provato a usare la funzione di concatenazione || nel field calculator di
QGIS, ma non riesco a gestire la sovrapposizione dei caratteri. Sapreste
aiutarmi?

Ciao Ale

Con il QGIS field calculator puoi usare la concatenazione giocando con
la funzione substr dopo aver fatto uno spatial join dei due shapefile.

Nel tuo caso dovrebbe essere:
substr(field1, 0, 4) || substr(field2, 2, length(mytest2))

ciao
p

--
Alessandro Sarretta

e-mail: alessandro.sarretta@gmail.com
skype: alesarrett
Web: http://ilsarrett.wordpress.com
Twitter: https://twitter.com/alesarrett
Google scholar: http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ
ORCID: http://orcid.org/0000-0002-1475-8686
ResearchGate: https://www.researchgate.net/profile/Alessandro_Sarretta/

2013/5/21 Alessandro Sarretta <alessandro.sarretta@gmail.com>:

Grazie Paolo,
la concatenzazione funzia a dovere!
Esiste una modalità (o una documentazione per approfondire) per farlo al di
fuori dell'interfaccia di QGIS?
Ale

Puoi usare la sintassi GDAL OGR SQL [1], e mediante ogr2ogr fare una
cosa di questo tipo:

$ ogr2ogr output.shp input.shp -sql 'SELECT *, CONCAT(field1, field2)
AS output FROM input'

ciao
p

[1] http://www.gdal.org/ogr/ogr_sql.html

--
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti
skype: capooti

Grazie di nuovo Paolo.
Sto giocando ancora con ogr, questa volta per fare un join tra due shapefiles.
Con il seguente comando faccio il join tra input.shp e inputJoin.shp, sputando il risultato in output.shp

ogr2ogr -f "ESRI Shapefile" -overwrite output.shp input.shp -sql "SELECT input.*, CONCAT(substr(input.fieldX,1,2), substr(inputJoin.fieldY,1)) AS conc FROM input LEFT JOIN 'inputJoin.dbf'.inputJoin ON input.ID = inputJoin.ID"

Quello che non mi torna molto è che sembra che il join si debba fare (ho trovato alcuni esempi simili) con una tabella dbf e non direttamente con lo shapefile. Dico che non mi torna perché vorrei usare il campo FID nella condizione ON del join, ma il FID non compare nel dbf.
Ho capito male il funzionamento di ogr2ogr?

Ale

On 05/21/2013 05:17 PM, Paolo Corti wrote:

2013/5/21 Alessandro Sarretta <alessandro.sarretta@gmail.com>:

Grazie Paolo,
la concatenzazione funzia a dovere!
Esiste una modalità (o una documentazione per approfondire) per farlo al di
fuori dell'interfaccia di QGIS?
Ale

Puoi usare la sintassi GDAL OGR SQL [1], e mediante ogr2ogr fare una
cosa di questo tipo:

$ ogr2ogr output.shp input.shp -sql 'SELECT *, CONCAT(field1, field2)
AS output FROM input'

ciao
p

[1] http://www.gdal.org/ogr/ogr_sql.html

--
Alessandro Sarretta

e-mail: alessandro.sarretta@gmail.com
skype: alesarrett
Web: http://ilsarrett.wordpress.com
Twitter: https://twitter.com/alesarrett
Google scholar: http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ
ORCID: http://orcid.org/0000-0002-1475-8686
ResearchGate: https://www.researchgate.net/profile/Alessandro_Sarretta/

FID è il FeatureID .

Nello shapefile esso corrisponde alla posiione nel record.

Con esso si lega il record degli attributi del dbf con il record delle geometrie nel file shp e con l’indice spaziale nel file .shx.

Nei DBMS , se la tabella è dotata di chiave primaria intera, il FID corrisponde alla chiave primaria. ALtrimenti credo che lo crei con la medesima regola posizionale.

···

Il giorno 23 maggio 2013 07:26, Alessandro Sarretta <alessandro.sarretta@gmail.com> ha scritto:

Grazie di nuovo Paolo.
Sto giocando ancora con ogr, questa volta per fare un join tra due shapefiles.
Con il seguente comando faccio il join tra input.shp e inputJoin.shp, sputando il risultato in output.shp

ogr2ogr -f “ESRI Shapefile” -overwrite output.shp input.shp -sql “SELECT input.*, CONCAT(substr(input.fieldX,1,2), substr(inputJoin.fieldY,1)) AS conc FROM input LEFT JOIN ‘inputJoin.dbf’.inputJoin ON input.ID = inputJoin.ID”

Quello che non mi torna molto è che sembra che il join si debba fare (ho trovato alcuni esempi simili) con una tabella dbf e non direttamente con lo shapefile. Dico che non mi torna perché vorrei usare il campo FID nella condizione ON del join, ma il FID non compare nel dbf.
Ho capito male il funzionamento di ogr2ogr?

Ale

On 05/21/2013 05:17 PM, Paolo Corti wrote:

2013/5/21 Alessandro Sarretta [<alessandro.sarretta@gmail.com>](mailto:alessandro.sarretta@gmail.com):

Grazie Paolo,
la concatenzazione funzia a dovere!
Esiste una modalità (o una documentazione per approfondire) per farlo al di
fuori dell'interfaccia di QGIS?
Ale

Puoi usare la sintassi GDAL OGR SQL [1], e mediante ogr2ogr fare una
cosa di questo tipo:

$ ogr2ogr output.shp input.shp -sql 'SELECT *, CONCAT(field1, field2)
AS output FROM input'

ciao
p

[1] [http://www.gdal.org/ogr/ogr_sql.html](http://www.gdal.org/ogr/ogr_sql.html)

-- 
Alessandro Sarretta

e-mail: [alessandro.sarretta@gmail.com](mailto:alessandro.sarretta@gmail.com)

skype: alesarrett
Web: [http://ilsarrett.wordpress.com](http://ilsarrett.wordpress.com)
Twitter: [https://twitter.com/alesarrett](https://twitter.com/alesarrett)
Google scholar: [http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ](http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ)
ORCID: [http://orcid.org/0000-0002-1475-8686](http://orcid.org/0000-0002-1475-8686)
ResearchGate: [https://www.researchgate.net/profile/Alessandro_Sarretta/](https://www.researchgate.net/profile/Alessandro_Sarretta/) 


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.
638 iscritti al 28.2.2013

Andrea Peri
. . . . . . . . .
qwerty àèìòù

Grazie Andrea.
Però il dbf non contiene il FID e, per ora, il JOIN in ogr sono riuscito ad applicarlo solo tra uno shapefile e un dbf.
Altra cosa che sto provando è aggiungere un campo nello shapefile in cui copiare i valori del FID, in modo da averceli poi anche nel dbf.
Per la creazione del nuovo campo ci sono, con il comando "|ogrinfo -sql "ALTER TABLE shapefile ADD COLUMN FID_ integer" shapefile.shp|")
Per l'inserimento dei valori, non riesco a capire se con ogr riesco a fare l'update dei valori di un campo...
Ale

On 05/23/2013 09:14 AM, Andrea Peri wrote:

FID è il FeatureID .
Nello shapefile esso corrisponde alla posiione nel record.
Con esso si lega il record degli attributi del dbf con il record delle geometrie nel file shp e con l'indice spaziale nel file .shx.

Nei DBMS , se la tabella è dotata di chiave primaria intera, il FID corrisponde alla chiave primaria. ALtrimenti credo che lo crei con la medesima regola posizionale.

Il giorno 23 maggio 2013 07:26, Alessandro Sarretta <alessandro.sarretta@gmail.com <mailto:alessandro.sarretta@gmail.com>> ha scritto:

    Grazie di nuovo Paolo.
    Sto giocando ancora con ogr, questa volta per fare un join tra due
    shapefiles.
    Con il seguente comando faccio il join tra input.shp e
    inputJoin.shp, sputando il risultato in output.shp

    ogr2ogr -f "ESRI Shapefile" -overwrite output.shp input.shp -sql
    "SELECT input.*, CONCAT(substr(input.fieldX,1,2),
    substr(inputJoin.fieldY,1)) AS conc FROM input LEFT JOIN
    'inputJoin.dbf'.inputJoin ON input.ID = inputJoin.ID"

    Quello che non mi torna molto è che sembra che il join si debba
    fare (ho trovato alcuni esempi simili) con una tabella dbf e non
    direttamente con lo shapefile. Dico che non mi torna perché vorrei
    usare il campo FID nella condizione ON del join, ma il FID non
    compare nel dbf.
    Ho capito male il funzionamento di ogr2ogr?

    Ale

    On 05/21/2013 05:17 PM, Paolo Corti wrote:

    2013/5/21 Alessandro Sarretta<alessandro.sarretta@gmail.com> <mailto:alessandro.sarretta@gmail.com>:

    Grazie Paolo,
    la concatenzazione funzia a dovere!
    Esiste una modalità (o una documentazione per approfondire) per farlo al di
    fuori dell'interfaccia di QGIS?
    Ale

    Puoi usare la sintassi GDAL OGR SQL [1], e mediante ogr2ogr fare una
    cosa di questo tipo:

    $ ogr2ogr output.shp input.shp -sql 'SELECT *, CONCAT(field1, field2)
    AS output FROM input'

    ciao
    p

    [1]http://www.gdal.org/ogr/ogr_sql.html

    -- Alessandro Sarretta

    e-mail:alessandro.sarretta@gmail.com <mailto:alessandro.sarretta@gmail.com>
    skype: alesarrett Web: http://ilsarrett.wordpress.com Twitter:
    https://twitter.com/alesarrett Google scholar:
    http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ ORCID:
    http://orcid.org/0000-0002-1475-8686 ResearchGate:
    https://www.researchgate.net/profile/Alessandro_Sarretta/

    _______________________________________________
    Gfoss@lists.gfoss.it <mailto: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.
    638 iscritti al 28.2.2013

--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------

--
Alessandro Sarretta

e-mail: alessandro.sarretta@gmail.com
skype: alesarrett
Web: http://ilsarrett.wordpress.com
Twitter: https://twitter.com/alesarrett
Google scholar: http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ
ORCID: http://orcid.org/0000-0002-1475-8686
ResearchGate: https://www.researchgate.net/profile/Alessandro_Sarretta/

2013/5/23 Alessandro Sarretta <alessandro.sarretta@gmail.com>:

Grazie Andrea.
Però il dbf non contiene il FID e, per ora, il JOIN in ogr sono riuscito ad
applicarlo solo tra uno shapefile e un dbf.
Altra cosa che sto provando è aggiungere un campo nello shapefile in cui
copiare i valori del FID, in modo da averceli poi anche nel dbf.
Per la creazione del nuovo campo ci sono, con il comando "ogrinfo -sql
"ALTER TABLE shapefile ADD COLUMN FID_ integer" shapefile.shp")
Per l'inserimento dei valori, non riesco a capire se con ogr riesco a fare
l'update dei valori di un campo...
Ale

Non penso proprio si possa fare in un unico passaggio. Secondo me ti
conviene fare cosi per ognuno dei due shapefile:

ogr2ogr output_join1.shp shape1.shp -sql "SELECT *, FID as JOINFIELD
FROM shape1"
ogr2ogr output_join2.shp shape2.shp -sql "SELECT *, FID as JOINFIELD
FROM shape2"

e poi joinare sul campo JOINFIELD (output_join1.JOINFIELD =
output_join2.JOINFIELD)

ciao
p

--
Paolo Corti
Geospatial software developer
web: http://www.paolocorti.net
twitter: @capooti
skype: capooti

Grazie Paolo di nuovo,
ora funzia tutto alla perfezione!
Ale

On 05/23/2013 09:31 AM, Paolo Corti wrote:

Non penso proprio si possa fare in un unico passaggio. Secondo me ti
conviene fare cosi per ognuno dei due shapefile:

ogr2ogr output_join1.shp shape1.shp -sql "SELECT *, FID as JOINFIELD
FROM shape1"
ogr2ogr output_join2.shp shape2.shp -sql "SELECT *, FID as JOINFIELD
FROM shape2"

e poi joinare sul campo JOINFIELD (output_join1.JOINFIELD =
output_join2.JOINFIELD)

ciao
p

--
Alessandro Sarretta

e-mail: alessandro.sarretta@gmail.com
skype: alesarrett
Web: http://ilsarrett.wordpress.com
Twitter: https://twitter.com/alesarrett
Google scholar: http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ
ORCID: http://orcid.org/0000-0002-1475-8686
ResearchGate: https://www.researchgate.net/profile/Alessandro_Sarretta/

io proverei a usare OGRINFO con la clausola -sql

···

Il giorno 23 maggio 2013 09:25, Alessandro Sarretta <alessandro.sarretta@gmail.com> ha scritto:

Grazie Andrea.
Però il dbf non contiene il FID e, per ora, il JOIN in ogr sono riuscito ad applicarlo solo tra uno shapefile e un dbf.
Altra cosa che sto provando è aggiungere un campo nello shapefile in cui copiare i valori del FID, in modo da averceli poi anche nel dbf.
Per la creazione del nuovo campo ci sono, con il comando “ogrinfo -sql "ALTER TABLE shapefile ADD COLUMN FID_ integer" shapefile.shp”)
Per l’inserimento dei valori, non riesco a capire se con ogr riesco a fare l’update dei valori di un campo…
Ale

On 05/23/2013 09:14 AM, Andrea Peri wrote:

FID è il FeatureID .

Nello shapefile esso corrisponde alla posiione nel record.

Con esso si lega il record degli attributi del dbf con il record delle geometrie nel file shp e con l’indice spaziale nel file .shx.

Nei DBMS , se la tabella è dotata di chiave primaria intera, il FID corrisponde alla chiave primaria. ALtrimenti credo che lo crei con la medesima regola posizionale.

-- 
Alessandro Sarretta

e-mail: [alessandro.sarretta@gmail.com](mailto:alessandro.sarretta@gmail.com)
skype: alesarrett
Web: [http://ilsarrett.wordpress.com](http://ilsarrett.wordpress.com)
Twitter: [https://twitter.com/alesarrett](https://twitter.com/alesarrett)
Google scholar: [http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ](http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ)
ORCID: [http://orcid.org/0000-0002-1475-8686](http://orcid.org/0000-0002-1475-8686)
ResearchGate: [https://www.researchgate.net/profile/Alessandro_Sarretta/](https://www.researchgate.net/profile/Alessandro_Sarretta/) 

Andrea Peri
. . . . . . . . .
qwerty àèìòù

Il giorno 23 maggio 2013 07:26, Alessandro Sarretta <alessandro.sarretta@gmail.com> ha scritto:

Grazie di nuovo Paolo.
Sto giocando ancora con ogr, questa volta per fare un join tra due shapefiles.
Con il seguente comando faccio il join tra input.shp e inputJoin.shp, sputando il risultato in output.shp

ogr2ogr -f “ESRI Shapefile” -overwrite output.shp input.shp -sql “SELECT input.*, CONCAT(substr(input.fieldX,1,2), substr(inputJoin.fieldY,1)) AS conc FROM input LEFT JOIN ‘inputJoin.dbf’.inputJoin ON input.ID = inputJoin.ID”

Quello che non mi torna molto è che sembra che il join si debba fare (ho trovato alcuni esempi simili) con una tabella dbf e non direttamente con lo shapefile. Dico che non mi torna perché vorrei usare il campo FID nella condizione ON del join, ma il FID non compare nel dbf.
Ho capito male il funzionamento di ogr2ogr?

Ale

On 05/21/2013 05:17 PM, Paolo Corti wrote:

2013/5/21 Alessandro Sarretta [<alessandro.sarretta@gmail.com>](mailto:alessandro.sarretta@gmail.com):

Grazie Paolo,
la concatenzazione funzia a dovere!
Esiste una modalità (o una documentazione per approfondire) per farlo al di
fuori dell'interfaccia di QGIS?
Ale

Puoi usare la sintassi GDAL OGR SQL [1], e mediante ogr2ogr fare una
cosa di questo tipo:

$ ogr2ogr output.shp input.shp -sql 'SELECT *, CONCAT(field1, field2)
AS output FROM input'

ciao
p

[1] [http://www.gdal.org/ogr/ogr_sql.html](http://www.gdal.org/ogr/ogr_sql.html)

-- 
Alessandro Sarretta

e-mail: [alessandro.sarretta@gmail.com](mailto:alessandro.sarretta@gmail.com)

skype: alesarrett
Web: [http://ilsarrett.wordpress.com](http://ilsarrett.wordpress.com)
Twitter: [https://twitter.com/alesarrett](https://twitter.com/alesarrett)
Google scholar: [http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ](http://scholar.google.it/citations?hl=it&user=IsyXargAAAAJ)
ORCID: [http://orcid.org/0000-0002-1475-8686](http://orcid.org/0000-0002-1475-8686)
ResearchGate: [https://www.researchgate.net/profile/Alessandro_Sarretta/](https://www.researchgate.net/profile/Alessandro_Sarretta/) 


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.
638 iscritti al 28.2.2013

Andrea Peri
. . . . . . . . .
qwerty àèìòù