¿Cómo ignorar "manejar capas malas" en QGIS?

11

Tengo un proyecto QGIS (2.14.3-Essen) que utilizo tanto en el trabajo como en casa. Mantengo todas menos dos capas con el proyecto.

Las dos capas restantes son muy grandes (un DEM y un sombreado que suman más de 20 GB) y se almacenan en diferentes caminos en el trabajo frente al hogar.

Me gustaría ignorar el Handle Bad Layersdiálogo y mantener los caminos rotos para esas capas. A menudo no me importa que sean malas; Quiero hacer cambios a otras partes del proyecto.

¿Hay alguna manera de hacerlo, ignorar u omitir el diálogo Manejar capas malas para que no pierda la referencia a las capas si no las actualizo?

Aaron
fuente
Esto es algo que debe resolverse en sentido ascendente en QGIS. No sería muy difícil de hacer. Recomendaría obtener este flujo ascendente fijo (por ejemplo, opciones adicionales en el cuadro de diálogo: a) ocultar en esta sesión b) corregir la ruta de origen c) eliminar la capa). Hay muchas compañías que estarán felices de hacer esto por usted.
Matthias Kuhn
1
@Matthias Kuhn - Esa es una muy buena idea, sería un buen camino a seguir. Yo uso una de las consultoras en esa lista (¿no estoy seguro si es lo correcto nombrarlas?). Exploraré la posibilidad con ellos. Gracias
Martin Hügi
@ MartinHügi, ¿hiciste algún progreso en esto? Algo similar generó cierto reconocimiento en la lista de correo lists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn
No, no he progresado en esto, realmente lo había olvidado, ya que se ha convertido en una de esas cosas con las que vivimos. Gracias por el recordatorio, puedo hacer la pregunta a nuestra consultoría o ¿es algo que ya está en marcha? @ Aaron - ¿Cómo te ha resultado esto?
Martin Hügi
Sigo usando mi solución. Dos proyectos paralelos de QGIS: uno para el trabajo y otro para el hogar.
Aaron

Respuestas:

4

Simplemente haga copias separadas de su archivo de proyecto para uso doméstico y laboral.

Los datos que guarde se escribirán en los archivos de origen de la capa, no en el archivo del proyecto.

Una vez que haya terminado la parte de la tarea, puede llevarla al trabajo y volver a agregar las capas defectuosas. Si tiene un estilo difícil en las capas, puede guardarlo por separado y agregarlo también.


Otra opción es envolver un archivo VRT alrededor de la fuente externa.

Un ejemplo de ejemplo para un archivo ráster Geotif, creado con gdal_translate:

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

y una muestra para un shapefile:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

Cuando los archivos de origen no están presentes, el ráster se muestra como un cuadrado negro (puede convertir la capa en invisible) y la capa vectorial se convierte en una tabla sin geometría, sin ningún mensaje de error. Las capas no vrt adicionales con archivos de origen que no se eliminan permanecerán y podrán editarse. Si reinstala los archivos de origen, todo vuelve a la normalidad, incluso los cambios en las otras capas.

AndreJ
fuente
1
Hacer proyectos separados para el hogar y la oficina es una solución decente en este caso particular. Sin embargo, hay otros casos, como cuando un servicio de mapas está inactivo temporalmente, cuando desea ignorar la notificación de capas defectuosas. Entonces, nuevamente, pregunto, ¿hay alguna manera de ignorar u omitir el diálogo Manejar malas capas para que uno no pierda referencias en ciertas capas?
Aaron
¿Puede proporcionar más detalles sobre los archivos VRT, qué son y cómo comenzar? Por lo que he visto, ¿los VRT solo se aplican a los rásteres? ¿Qué sucede con los archivos vectoriales o las capas remotas de PostGIS que no están disponibles si no hay conexión? ¿Cómo puedes ignorar estas 'Manejar malas capas'?
Martin Hügi
@ MartinHügi también puede construir VRT para archivos vectoriales, pero eso todavía necesita trabajo manual: gdal.org/drv_vrt.html y paolocorti.net/2012/03/08/gdal_virtual_formats . Ampliaré mi respuesta pronto para algunos ejemplos.
AndreJ
@AndreJ Gracias, así que mirando a través de esos enlaces, mi comprensión limitada es que un archivo xml actúa como un mapa intermedio de la fuente de datos. ¿Entonces QGIS 'piensa' que está allí, incluso si la fuente de datos no está disponible? GDAL es algo que parece ser bueno para entender, o al menos entender.
Martin Hügi
Sí, solo estás engañando al controlador de errores QGIS.
AndreJ
3

Una posible solución sería modificar su archivo de proyecto qgs utilizando un script. Descubrí que si reemplaza la fuente de datos con <datasource>.</datsource>, ignorará la ventana emergente Manejar malas capas.

Script de Python para ejecutar si no desea cargar ciertas capas.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Script de Python para ejecutar para insertar la ruta de origen de datos adecuada.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Al hacer esto, podría configurar una DoNotLoad.pycon la secuencia de comandos superior y una home.pycon rutas a las fuentes de origen y una work.pycon rutas a las fuentes de trabajo utilizando la segunda secuencia de comandos como patrón.

Entonces tendrá un solo proyecto en el que trabajar, pero puede cambiar fácilmente sus rutas dependiendo del entorno en el que se encuentre, o cambiar las rutas para que las capas no se carguen, pero aún estén en su proyecto (todo su estilo se guarda y creo que incluso puedes modificar el estilo si quieres. Simplemente no aparecerá nada en el mapa).

TJ Rockefeller
fuente
Gracias. Entiendo el concepto, ahora claramente necesito pasar el tiempo que tenía la intención de recorrer para comenzar a comprender el uso básico de Python. Por ahora obtengo el concepto porque edité manualmente el project.qgs con WordPad para cambiar el origen de datos y lo volví a cambiar. QGIS no ignoró el manejo de las capas defectuosas, pero como <ID> actúa como marcador de posición, pude regresar y revertir mi cambio. Entonces sí, entiendo eso, creo.
Martin Hügi
Creo que este es un buen lugar para comenzar wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi si ayuda, obtuve el patrón principal para mi script de esta respuesta stackoverflow stackoverflow.com/a/290494/4708150 Esto explica la lógica del script más a fondo. Asegúrate de mirar los comentarios. Hay un comentario mejor calificado que explica por qué hay una coma al final de la declaración impresa.
TJ Rockefeller
1

El complemento ChangeDataSource mantiene las capas en el archivo moviéndolas temporalmente a un grupo de capas dañadas. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Debería hacer lo que quieras. El año pasado tuve un problema similar y noté que existía el complemento ChangeDataSource que funcionaba con capas pero no manejaba las capas malas. Mencioné que el manejo de capas malas sería una gran característica en los comentarios en el blog del desarrollador (Enrico Ferreguti). ¡Dentro de una semana lo había agregado!

Baswein
fuente
Este complemento no me funcionó para manejar capas malas. Probé en dos computadoras portátiles diferentes: una con Win7 y la otra con Win10. Ambos tienen instalado QGIS 2.18.0. Verifiqué "Manejar capas malas" y reinicié QGIS después de la instalación. El valor predeterminado de QGIS de manejar capas defectuosas continuó apareciendo, no la notificación del complemento que encontró y manejó fuentes de datos no válidas.
Aaron
No funciona para mí ahora mismo tampoco. Se lo haré saber al desarrollador.
Baswein
Verifiqué que el complemento changeDataSource se ejecuta sin problemas. Arreglo algunas condiciones no detectadas lanzando excepciones o informando errores falsos y me comprometo a depositar una nueva versión. [Si sus problemas persisten, informe] ( github.com/enricofer/changeDataSource/issues ) especificando conjuntos de datos o los pasos operativos para reproducirlos.
Enrico Ferreguti
Para que aparezca el complemento, debe tener Qgis ejecutándose y luego abrir el proyecto.
Baswein