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: [hidden email] 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/ _______________________________________________ [hidden email] 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 |
2013/5/21 Alessandro Sarretta <[hidden email]>:
> 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 _______________________________________________ [hidden email] 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 |
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 <[hidden email]>: >> 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: [hidden email] 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/ _______________________________________________ [hidden email] 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 |
2013/5/21 Alessandro Sarretta <[hidden email]>:
> 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 _______________________________________________ [hidden email] 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 |
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 [hidden email]:Grazie Paolo, la concatenzazione funzia a dovere! Esiste una modalità (o una documentazione per approfondire) per farlo al di fuori dell'interfaccia di QGIS? AlePuoi 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: [hidden email] 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/ _______________________________________________ [hidden email] 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 |
FID è il FeatureID . Nello shapefile esso corrisponde alla posiione nel record.Il giorno 23 maggio 2013 07:26, Alessandro Sarretta <[hidden email]> ha scritto:
-- ----------------- Andrea Peri . . . . . . . . . qwerty àèìòù ----------------- _______________________________________________ [hidden email] 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 |
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:
-- Alessandro Sarretta e-mail: [hidden email] 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/ _______________________________________________ [hidden email] 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 |
2013/5/23 Alessandro Sarretta <[hidden email]>:
> 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 _______________________________________________ [hidden email] 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 |
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: [hidden email] 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/ _______________________________________________ [hidden email] 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 |
In reply to this post by Alessandro Sarretta
io proverei a usare OGRINFO con la clausola -sql Il giorno 23 maggio 2013 09:25, Alessandro Sarretta <[hidden email]> ha scritto:
-- ----------------- Andrea Peri . . . . . . . . . qwerty àèìòù ----------------- _______________________________________________ [hidden email] 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 |
Free forum by Nabble | Edit this page |