Переименование шейп-файлов в QGIS?


12

У меня есть огромный список слоев в проекте, которые названы на иностранном языке. Я хочу перевести и добавить английское название к имени.

Когда я щелкаю правой кнопкой мыши по слою и выбираю Properties -> Generalи изменяю имя слоя, оно отображается в дереве слоев, но исходный файл остается прежним.

Есть ли способ изменить имя исходного файла из QGIS?

Их так много, что поиск их всех в моих папках займет слишком много времени.


1
Я думаю, вам нужно будет щелкнуть правой кнопкой мыши и выбрать «Сохранить как», чтобы изменить имя файла, если вы не хотите использовать проводник Windows.
landocalrissian

Связывание связанных запросов функций в QGIS.org: Issues.qgis.org/issues/15791 , чтобы мы могли следить за ним.
Андре Сильва

Ответы:


9

Для этого вам необходимо: i) удалить слой из ToC, ii) переименовать файлы, которые соответствуют Shapefile (т. Е. Shp, dbf, shx, prj и т. П.), И iii) загрузить переименованный слой в QGIS. Но нам нужно автоматизировать такой рабочий процесс!

Если вы посмотрите на шаги, они похожи на то, что делает плагин Table Manager. Итак, я адаптировал код такого плагина для переименования Shapefiles, вы можете скачать его здесь .

Вы можете использовать его следующим образом (сначала попробуйте небольшой проект резервного копирования, чтобы увидеть, как он работает):

  1. Переименуйте ваши слои QGIS в ToC, эти новые имена будут использованы для перезаписи ваших соответствующих имен шейп-файлов.
  2. Сохраните ваш проект QGIS в той же папке, что и скрипт rename_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, но это, вероятно, потребовало бы столько же времени для написания кода, как и ручное. Также имейте в виду, что переименование файлов само по себе нарушит источники данных. Переименование только имен слоев в оглавлении должно быть в порядке, но я не так знаком с QGIS, как Arc.


1

Я предлагаю использовать эту программу для переименования ваших файлов http://www.bulkrenameutility.co.uk/Main_Intro.php . Он открыт и прост в использовании. После того, как вы переименовали свой файл, вы должны открыть в текстовом редакторе файл проекта qgis (попробуйте notepad ++) и сделать то же самое найти и заменить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.