在QGIS中重命名Shapefile?


12

我在项目中用外语命名的图层列表很多。我想翻译英文名称并将其添加到名称中。

当我右键单击图层并选择Properties -> General并更改图层名称时,它会在图层树中可视化,但原始文件保持不变。

有没有办法从QGIS更改原始文件的名称?

太多了,以至于无法在我的文件夹中全部搜索它们。


1
我想,如果您不想使用Windows资源管理器,则必须右键单击并选择另存为以更改文件名。
landocalrissian 2014年

在QGIS.org中链接相关的功能请求:issues.qgis.org/issues/15791,因此我们可以随时注意。
安德烈·席尔瓦

Answers:


9

为此,您需要i)从ToC中删除该层,ii)重命名符合Shapefile的文件(即shp,dbf,shx,prj等),并且iii)将重命名的层加载到QGIS。但是我们确实需要自动化这样的工作流程!

如果您查看这些步骤,它们与Table Manager插件的作用类似。因此,我修改了此类插件的代码以重命名Shapefile,您可以从此处下载。

您可以通过这种方式使用它(首先尝试一个小的备份项目以查看其工作原理):

  1. 在ToC中重命名QGIS图层,这些新名称将被用来覆盖您对应的Shapefiles名称。
  2. 将您的QGIS项目与脚本redirect_shapefiles.py保存在同一文件夹中
  3. 打开QGIS Python控制台。
  4. 复制下一个代码片段:

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

而已!我已经在GNU / Linux,QGIS 2.6上对其进行了测试。运行代码后,ToC中的层顺序会有所不同。

如果您有任何问题,请告诉我。

如果您需要保留图层顺序,请提出一个新问题,也许我可以看看:)。


4

对于R用户,我编写了一个快速R函数,该函数批量重命名.shp文件和所有关联的文件。它非常裸露,没有错误检查等,因此,如果失败,则需要进行一些调查。

# 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

如果您具有用于重命名它们的一致架构,则可以在python脚本中执行此操作。python中的一种方法是os.rename(src,dest)。具体细节将取决于重命名文件的算法。这是为了重命名实际文件,而不仅仅是重命名目录中的图层名称。

否则,我不知道手动重命名的替代方法,因为您必须翻译它们。从理论上讲,您可以在python中构建翻译词典,但是编码所需的时间可能与手动完成的时间一样长。另外,请注意,重命名文件本身会破坏数据源。仅在TOC中重命名图层名称应该可以,但是我对QGIS的了解不如Arc。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.