¿Busca la función de purga para eliminar capas del archivo qgs que no están presentes en el panel Capas de QGIS?

8

Tengo algunos proyectos QGIS que he estado usando durante mucho tiempo, agregando y eliminando capas, actualizando referencias a archivos eliminados o movidos, etc.

Al abrir el archivo qgs con un editor de texto, veo que contiene numerosas referencias a diferentes archivos, y estas referencias no se muestran en el panel del árbol de capas.

Tengo tres casos diferentes: referencias a archivos existentes, referencias a archivos faltantes, referencias a conexiones de bases de datos. Me di cuenta de esto cuando abrí mi proyecto en otra máquina, y QGIS informó que faltaba una conexión de base de datos a tablas de vectores que no estaban presentes en la vista de árbol de capas.

La eliminación manual de referencias del archivo qgs resolvió el problema, pero estoy administrando grandes proyectos y es casi imposible verificar manualmente la consistencia del proyecto. He probado el complemento "Eliminar capas vacías", pero las que intento eliminar no son capas vacías.

¿Hay alguna forma de 'purgar' el archivo qgis?

bradypus
fuente
¿Ha verificado almacenando rutas relativas en el archivo .qgs? Está en Setting--> Project Properties-->save paths-->relativeCheers N
Naresh
¿Qué pasa con "Guardar como ..." en un nuevo archivo de proyecto?
AndreJ
1
¡Eso no funcionó! Publicaré en la lista de correo de usuarios de QGIS un archivo de proyecto GQIS que contiene una capa fantasma, no presente en el panel Capas.
bradypus
1
¿Podría publicar ese archivo qgs en algún lugar al que podamos acceder? No puedo duplicar tu situación. Quizás todo lo que necesita es un analizador simple.
ike
1
@ike Consulte aquí: lists.osgeo.org/pipermail/qgis-user/2012-September/019327.html . Encontrará allí el proyecto de prueba que envié a la lista de correo. Para reproducirlo, debe colocar un archivo tif en esta ruta relativa: ./Planimetrie/2012/plan01_2012.tif. Lea también los siguientes mensajes para más detalles.
bradypus

Respuestas:

7

Las capas en cuestión están en el registro de capas pero no en la leyenda .

El siguiente script de Python elimina todas las capas que están cargadas, pero que no se muestran en la leyenda.

Eliminar las capas:

registryLayers = QgsMapLayerRegistry.instance().mapLayers().keys()
legendLayers = [ layer.id() for layer in iface.legendInterface().layers() ]
layersToRemove = set( registryLayers ) - set( legendLayers )
QgsMapLayerRegistry.instance().removeMapLayers( list( layersToRemove ) )

Debe ejecutarse desde la consola de Python dentro de QGIS. Después de aplicarlo, puede verificar la operación comprobando que las capas hayan desaparecido de Archivo (Proyecto en 2.0) => Propiedades del proyecto => Capas identificables . Los cambios no se guardan automáticamente

Al agregar la siguiente línea al final, los cambios también se guardarán automáticamente.

iface.actionSaveProject().trigger()

Haga una copia de seguridad de su archivo de proyecto (.qgs) antes de sobrescribir su archivo de proyecto después de aplicar este script.

Para QGIS 1.8, la siguiente línea debe ejecutarse inicialmente:

iface = qgis.utils.iface
Matthias Kuhn
fuente
Ok, recibo errores cuando lo ingreso. Rastreo (última llamada más reciente): Archivo "<input>", línea 1, en <module> NameError: el nombre 'legendLayerNames' no está definido
Ger
1
QGIS 1.8 requiere otra forma de acceder a iface. La respuesta se actualiza para reflejar esto.
Matthias Kuhn
1
Creo que lo tienes aquí. Bueno, funcionó en mi caso. Y como resultado, QGIS Cloud funcionó mejor, ya que ahora puede cargar las capas. Excelente.
Ger
0

Además de muchas otras funciones útiles, el complemento llamado " Layer Board " (disponible en el instalador del complemento) tiene un botón incorporado para "Eliminar capas fantasmas" que resuelve este problema.

Además del botón de 1 clic para eliminar capas fantasmas, también le permite ver y eliminar capas individuales en una interfaz gráfica de usuario agradable que enumera cada capa y sus propiedades. Puede seleccionar cualquiera de estas capas individuales de la tabla y hacer clic en el botón "Eliminar capa" para resolver cada problema individualmente, si lo desea.

En mi caso, la capacidad de eliminar referencias de capas individuales era muy importante, porque tenía algunas "capas fantasmas" que tenían el mismo nombre pero que se mencionaban 2-3 veces en el registro. Utilicé el tablero de capas para eliminar las entradas correctas individualmente y volver a la referencia de capa única correcta.

RyanKDalton
fuente