Rinominare Shapefile in QGIS?


12

Ho un enorme elenco di livelli in un progetto che sono nominati in una lingua straniera. Voglio tradurre e aggiungere il titolo inglese al nome.

Quando faccio clic con il pulsante destro del mouse su un livello e scelgo Properties -> Generale modifico il nome del livello, questo viene visualizzato nella struttura dei livelli ma il file originale rimane lo stesso.

C'è un modo per cambiare il nome del file originale da QGIS?

Ce ne sono così tanti che cercarli tutti nelle mie cartelle richiederebbe troppo tempo.


1
Penso che dovresti fare clic con il tasto destro e scegliere Salva per cambiare il nome del file se non vuoi usare Windows Explorer.
landocalrissian

Collegamento di richieste di funzionalità correlate in QGIS.org: issues.qgis.org/issues/15791 , in modo che possiamo tenerne d'occhio.
Andre Silva,

Risposte:


9

Per fare ciò, è necessario i) rimuovere il layer dal ToC, ii) rinominare i file conformi allo Shapefile (ovvero shp, dbf, shx, prj e simili) e iii) caricare il layer rinominato in QGIS. Ma dobbiamo automatizzare tale flusso di lavoro!

Se osservi i passaggi, sono simili a quelli del plug-in Table Manager. Quindi, ho adattato il codice di tale plugin per rinominare Shapefile, puoi scaricarlo da qui .

Puoi usarlo in questo modo (prima prova con un piccolo progetto di backup per vedere come funziona):

  1. Rinomina i tuoi livelli QGIS nel ToC, questi nuovi nomi verranno utilizzati per sovrascrivere i nomi Shapefile corrispondenti.
  2. Salvare il progetto QGIS nella stessa cartella dello script rename_shapefiles.py
  3. Apri la console QGIS Python.
  4. Copia qui il frammento di codice successivo:

    from rename_shapes import RenameShapefiles
    for lyr in iface.mapCanvas().layers():
        rn = RenameShapefiles( iface, lyr )
        rn.doSave()
    

Questo è tutto! L'ho provato su GNU / Linux, QGIS 2.6. L'ordine dei livelli nel ToC varia dopo aver eseguito il codice.

Fammi sapere se hai qualche problema.

Se hai bisogno di conservare l'ordine dei livelli, fai una nuova domanda, forse posso guardarlo :).


4

Per gli utenti R, ho scritto una funzione R rapida che rinomina in batch il file .shp e tutti i file associati. Sono ossa piuttosto nude e non c'è controllo degli errori, ecc. Quindi, se fallisce, dovrai fare una piccola indagine.

# Function to rename shapefile (.shp) and all associated files
# fpath = full file path of any of the associated files (character)
# newName = new name for the files (character)

renameShp <- function(fpath, newName) {
  dir <- dirname(fpath)
  base <- basename(fpath)
  fname <- strsplit(base, '[.]')[[1]][1]
  ls <- list.files(path=dir, pattern=fname, full.names=TRUE)
  sapply(ls, FUN=function(p){
    file.rename(from=p, to=sub(pattern=fname,replacement=newName, p))
  })
  print(paste("Renamed", length(ls), "files."))
}

1

Se hai uno schema coerente per rinominarli, puoi farlo in uno script Python. Un metodo in Python è os.rename (src, dest) . I dettagli specifici dipenderebbero dall'algoritmo per rinominare i file. Questo serve per rinominare i file effettivi, non solo i nomi dei layer nel sommario.

Altrimenti, non conosco un'alternativa a rinominarli manualmente, dal momento che devi tradurli. In teoria potresti costruire un dizionario di traduzioni in Python, ma probabilmente impiegherebbe tanto tempo a programmare quanto farlo manualmente. Inoltre, tenere presente che la ridenominazione dei file stessi interromperà le origini dati. Rinominare solo i nomi dei layer nel sommario dovrebbe essere ok, ma non ho familiarità con QGIS come Arc.


1

Suggerisco di usare questo programma per rinominare i tuoi file http://www.bulkrenameutility.co.uk/Main_Intro.php . È aperto e facile da usare. Dopo aver rinominato il file, è necessario aprire, con un editor di testo, il file di progetto qgis (provare notepad ++) e fare lo stesso trova e sostituisci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.