如何忽略QGIS中的“处理不良层”?


11

我有一个QGIS(2.14.3-Essen)项目,可以在办公室和家中使用。我保留该项目的所有内容,只有两层。

剩下的两层非常大-DEM和山体阴影总计超过20 GB-它们分别存储在工作场所和家庭中的不同路径中。

我想忽略Handle Bad Layers对话,并保留这些图层的折断路径。我常常不在乎他们是坏人。我想对项目的其他部分进行更改。

有没有办法忽略或跳过“处理不良图层”对话框,以便在不更新图层的情况下不会丢失对图层的引用?


这是QGIS上游应解决的问题。这样做不是很难。我建议将其固定在上游(例如,对话框中的其他选项:a)隐藏在该会话中b)修复源路径c)删除层)。有很多围绕公司将竭诚为你做到这一点。
马提亚斯·库恩

1
@Matthias Kuhn-这是一个很好的主意,那将是一个很好的前进方向。我确实使用了该列表中的一项咨询服务(不确定为它们命名是否完成?)。我将与他们探讨这种可能性。谢谢
MartinHügi'17

@MartinHügi在这方面您有什么进展吗?类似的问题在邮件列表list.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn,

不,我没有进步,实际上我已经忘记了,因为它已经成为我们生活中的其中一件事情。感谢您的提醒,我可以向我们的咨询机构提出问题,或者该问题已经在进行中?@Aaron-这对你有什么影响?
MartinHügi'17

我继续使用解决方法。两个并行的QGIS项目-一个用于工作,另一个用于家庭。
亚伦

Answers:


4

只需从项目文件中制作单独的副本以供家庭和工作使用。

您保存的数据将被写入图层源文件,而不是项目文件。

完成作业部分后,就可以使用它并重新添加不良图层。如果您在图层上的样式设置很困难,则可以单独保存并添加它。


另一个选择是将VRT文件包装在外部源周围。

创建的Geotif栅格文件的示例示例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>

以及shapefile的示例:

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

当源文件不存在时,栅格显示为黑色正方形(您可以将图层变为不可见),并且矢量层变为非几何表格,而不会出现任何错误消息。带有未删除源文件的其他非vrt层将保留并可以编辑。如果重新安装源文件,则所有内容都恢复正常,即使更改了其他层也是如此。


1
在这种特殊情况下,为家庭和办公室进行单独的项目是一个不错的解决方法。但是,在其他情况下,例如,当地图服务暂时关闭时,您可能希望忽略不良图层通知。所以我再次问,是否有一种方法可以忽略或跳过“处理不良图层”对话框,以确保不会丢失对某些图层的引用?
亚伦

您能否提供有关VRT文件,它们是什么以及如何开始的更多详细信息。根据我的调查,VRT仅适用于栅格吗?如果没有连接,矢量文件或不可用的远程PostGIS图层如何处理?您如何忽略这些“处理不良层”?
MartinHügi'17

@MartinHügi,您也可以为矢量文件构建VRT,但是仍然需要人工gdal.org/drv_vrt.htmlpaolocorti.net/2012/03/08/gdal_virtual_formats。我将很快列举一些示例来回答。
AndreJ

@AndreJ谢谢,因此通过这些链接,我有限的理解是xml文件有点像是到数据源的中间映射。因此,即使数据源不可用,QGIS也“认为”它在那里?GDAL看起来很容易掌握或至少有所了解。
MartinHügi'17

是的,您只是在愚弄QGIS错误处理程序。
AndreJ

3

可能的解决方法是使用脚本修改qgs项目文件。我发现,如果用替换数据源,<datasource>.</datsource>它将忽略弹出的“处理不良图层”。

如果您不想加载某些图层,则运行Python脚本。

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

运行Python脚本以插入适当的数据源路径。

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

这样做,您可以使用第二个脚本作为模式来设置DoNotLoad.py带有顶部脚本的,home.py具有指向家庭资源的work.py路径的,具有指向工作源的路径的。

然后,您将有一个项目要进行,但是您可以根据所处的环境轻松更改路径,或者更改路径以使图层不被加载,但仍保留在项目中(保存所有样式)而且我认为您甚至可以根据需要修改样式(地图上什么也不会显示)。


谢谢。我了解了这个概念,我现在很清楚地需要花时间,我一直在打算开始理解Python的基本用法。现在,我有了这个概念,因为我使用写字板手动编辑了project.qgs来更改数据源,然后将其改回。QGIS并没有忽略处理不好的图层,但是当<ID>充当占位符时,我能够返回并还原我的更改。是的,我明白了-我认为。
MartinHügi'17


@MartinHügi如果有帮助,我可以从此stackoverflow答案stackoverflow.com/a/290494/4708150获得脚本的主要模式,这将更彻底地说明脚本的逻辑。确保查看评论。最受好评的注释可以解释为什么print语句末尾出现逗号。
TJ洛克菲勒

1

ChangeDataSource插件通过将图层临时移动到处理不良图层组来将其保留在文件中。https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/它应该做您想要的。去年,我遇到了类似的问题,并注意到有一个ChangeDataSource插件可以处理图层,但不能处理不良图层。我提到在开发人员的(Enrico Ferreguti)博客上的评论中,处理不良图层将是一个很棒的功能。一周之内,他添加了它!


这个插件对我来说无法处理不良图层。我尝试使用两台不同的笔记本电脑-一台运行Win7,另一台运行Win10。两者都安装了QGIS 2.18.0。安装后,我检查了“处理不良层”并重新启动了QGIS。QGIS处理不良图层的默认设置继续弹出,而不是插件发现和处理无效数据源的通知。
亚伦

现在也不为我工作。我会让开发人员知道。
巴斯温

我验证了changeDataSource插件可以正常运行。我修复了引发异常或报告错误错误的未捕获条件,并承诺存储新版本。[如果问题仍然存在,请报告](github.com/enricofer/changeDataSource/issues)指定数据集或重现它们的操作步骤。
Enrico Ferreguti

为了弹出插件,您需要运行Qgis,然后打开项目。
巴斯温
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.