Comment ignorer «gérer les mauvaises couches» dans QGIS?

11

J'ai un projet QGIS (2.14.3-Essen) que j'utilise à la fois au travail et à la maison. Je garde toutes les couches sauf deux avec le projet.

Les deux couches restantes sont très grandes - un DEM et un ombrage totalisant plus de 20 Go - et ils sont stockés dans des chemins différents au travail par rapport à la maison.

Je voudrais ignorer le Handle Bad Layersdialogue et garder les chemins interrompus pour ces couches. Je m'en fiche souvent, ils sont mauvais; Je souhaite apporter des modifications à d'autres parties du projet.

Existe-t-il un moyen de le faire, d'ignorer ou d'ignorer la boîte de dialogue Gérer les couches incorrectes afin de ne pas perdre la référence aux couches si je ne les mets pas à jour?

Aaron
la source
C'est quelque chose qui devrait être résolu en amont dans QGIS. Ce ne serait pas très difficile à faire. Je recommanderais d'obtenir ce correctif en amont (par exemple, des options supplémentaires dans la boîte de dialogue: a) masquer dans cette session b) corriger le chemin source c) supprimer la couche). Il y a beaucoup d'entreprises autour qui se feront un plaisir de le faire pour vous.
Matthias Kuhn
1
@Matthias Kuhn - C'est une très bonne idée, ce serait une bonne voie à suivre. J'utilise l'un des consultants de cette liste (je ne sais pas si c'est la chose faite pour les nommer?). J'explorerai la possibilité avec eux. Merci
Martin Hügi
@ MartinHügi avez-vous fait des progrès à ce sujet? Quelque chose de similaire a suscité une reconnaissance sur la liste de diffusion lists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn
Non, je n'ai pas progressé, j'avais oublié en fait car c'est juste devenu une de ces choses avec lesquelles nous vivons. Merci pour le rappel, je peux poser la question à notre consultant ou est-ce quelque chose qui est déjà en cours? @Aaron - Comment cela a-t-il fonctionné pour vous?
Martin Hügi
Je continue d'utiliser ma solution de contournement. Deux projets QGIS parallèles - un pour le travail et un pour la maison.
Aaron

Réponses:

4

Faites simplement des copies séparées de votre fichier de projet pour un usage domestique et professionnel.

Les données que vous enregistrez seront écrites dans les fichiers source de la couche, pas dans le fichier de projet.

Une fois que vous avez terminé la partie devoirs, vous pouvez la mettre au travail et ajouter à nouveau les couches défectueuses. Si vous avez un style difficile sur les calques, vous pouvez l'enregistrer séparément et l'ajouter également.


Un autre choix consiste à envelopper un fichier VRT autour de la source externe.

Un exemple d'exemple pour un fichier raster Geotif, créé avec 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>

et un exemple pour un fichier de formes:

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

Lorsque les fichiers source ne sont pas présents, le raster est affiché sous la forme d'un carré noir (vous pouvez rendre le calque invisible) et le calque vectoriel devient une table non géométrique, sans aucun message d'erreur. Les couches supplémentaires non vrt avec des fichiers source qui ne sont pas supprimés resteront et peuvent être modifiées. Si vous réinstallez les fichiers source, tout revient à la normale, même les modifications apportées aux autres couches.

AndreJ
la source
1
Faire des projets séparés pour la maison et le bureau est une solution décente dans ce cas particulier. Cependant, il existe d'autres cas, comme lorsqu'un service de carte est temporairement arrêté, lorsque vous souhaitez ignorer la notification des couches incorrectes. Encore une fois, je demande, existe-t-il un moyen d'ignorer ou d'ignorer la boîte de dialogue Gérer les couches incorrectes afin de ne pas perdre la référence de certaines couches?
Aaron
Pouvez-vous fournir plus de détails sur les fichiers VRT, ce qu'ils sont et comment commencer. D'après ce que j'ai examiné, les VRT s'appliquent-elles uniquement aux rasters? Qu'en est-il des fichiers vectoriels ou des couches PostGIS distantes qui ne sont pas disponibles en l'absence de connexion. Comment pouvez-vous ignorer ces «manipuler les mauvaises couches»?
Martin Hügi
@ MartinHügi, vous pouvez également créer VRT pour les fichiers vectoriels, mais cela nécessite toujours un travail manuel: gdal.org/drv_vrt.html et paolocorti.net/2012/03/08/gdal_virtual_formats . Je développerai bientôt ma réponse pour quelques exemples.
AndreJ
@AndreJ Merci, donc en parcourant ces liens, ma compréhension limitée est qu'une sorte de fichier xml agit comme une carte intermédiaire entre la source des données. Donc, QGIS «pense» qu'il existe, même si la source de données n'est pas disponible? GDAL est quelque chose qui semble être bon à maîtriser, ou au moins à comprendre.
Martin Hügi
Oui, vous trompez simplement le gestionnaire d'erreurs QGIS.
AndreJ
3

Une solution possible consisterait à modifier votre fichier de projet qgs à l'aide d'un script. J'ai constaté que si vous remplacez la source de données par, <datasource>.</datsource>elle ignorera le pop-up Handle Bad Layers.

Script Python à exécuter si vous ne souhaitez pas charger certaines couches.

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 Python à exécuter pour insérer le chemin de source de données approprié.

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

En faisant cela, vous pouvez configurer un DoNotLoad.pyavec le script supérieur et un home.pyavec des chemins d'accès à vos sources personnelles et un work.pyavec des chemins d'accès à vos sources de travail en utilisant le deuxième script comme modèle.

Vous aurez alors un seul projet sur lequel travailler, mais vous pouvez facilement changer vos chemins en fonction de l'environnement dans lequel vous vous trouvez, ou changer les chemins pour que les calques ne soient pas chargés, mais restent dans votre projet (tout votre style est enregistré et je pense que vous pouvez même modifier le style si vous le souhaitez. Rien ne s'affichera sur la carte).

TJ Rockefeller
la source
Merci. Je comprends le concept, j'ai clairement besoin de passer ce temps que je voulais parcourir pour commencer à comprendre l'utilisation de base de Python. Pour l'instant, je reçois le concept parce que j'ai modifié manuellement le project.qgs avec WordPad pour changer la source de données, et je l'ai changé à nouveau. QGIS n'a pas ignoré les mauvaises couches de gestion, mais comme <ID> agit comme un espace réservé, j'ai pu revenir en arrière et revenir en arrière. Alors oui, je comprends - je pense.
Martin Hügi
Je suppose que c'est un bon endroit pour commencer wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi si cela aide, j'ai obtenu le modèle principal de mon script à partir de cette réponse stackoverflow stackoverflow.com/a/290494/4708150 Cela explique la logique du script plus en détail. Assurez-vous de regarder les commentaires. Un commentaire de premier ordre explique pourquoi il y a une virgule à la fin de l'instruction d'impression.
TJ Rockefeller
1

Le plugin ChangeDataSource conserve les couches dans le fichier en les déplaçant temporairement vers un groupe de couches incorrectes. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Il devrait faire ce que vous voulez. L'année dernière, j'avais un problème similaire et j'ai remarqué qu'il y avait le plugin ChangeDataSource qui fonctionnait avec les couches mais ne gérait pas les mauvaises couches. J'ai mentionné que la gestion des mauvaises couches serait une excellente fonctionnalité dans les commentaires sur le blog du développeur (Enrico Ferreguti). En une semaine, il l'avait ajouté!

Baswein
la source
Ce plugin n'a pas fonctionné pour moi pour gérer les mauvaises couches. J'ai essayé deux ordinateurs portables différents - l'un exécutant Win7 et l'autre Win10. Les deux ont QGIS 2.18.0 installé. J'ai vérifié "Gérer les mauvaises couches" et redémarré QGIS après l'installation. Le défaut de QGIS de gérer les mauvaises couches a continué à apparaître, pas la notification du plugin qu'il a trouvée et a géré les sources de données invalides.
Aaron
Ne travaille pas pour moi en ce moment non plus. Je ferai savoir au développeur.
Baswein
J'ai vérifié que le plugin changeDataSource fonctionne sans problème. Je corrige certaines conditions non capturées en levant des exceptions ou en signalant de fausses erreurs et je valide dans le référentiel une nouvelle version. [Si vos problèmes persistent, veuillez signaler] ( github.com/enricofer/changeDataSource/issues ) en spécifiant les jeux de données ou les étapes de fonctionnement pour les reproduire.
Enrico Ferreguti
Pour faire apparaître le plugin, vous devez avoir Qgis en cours d'exécution, puis ouvrir le projet.
Baswein