我有一个QGIS(2.14.3-Essen)项目,可以在办公室和家中使用。我保留该项目的所有内容,只有两层。
剩下的两层非常大-DEM和山体阴影总计超过20 GB-它们分别存储在工作场所和家庭中的不同路径中。
我想忽略Handle Bad Layers
对话,并保留这些图层的折断路径。我常常不在乎他们是坏人。我想对项目的其他部分进行更改。
有没有办法忽略或跳过“处理不良图层”对话框,以便在不更新图层的情况下不会丢失对图层的引用?
我有一个QGIS(2.14.3-Essen)项目,可以在办公室和家中使用。我保留该项目的所有内容,只有两层。
剩下的两层非常大-DEM和山体阴影总计超过20 GB-它们分别存储在工作场所和家庭中的不同路径中。
我想忽略Handle Bad Layers
对话,并保留这些图层的折断路径。我常常不在乎他们是坏人。我想对项目的其他部分进行更改。
有没有办法忽略或跳过“处理不良图层”对话框,以便在不更新图层的情况下不会丢失对图层的引用?
Answers:
只需从项目文件中制作单独的副本以供家庭和工作使用。
您保存的数据将被写入图层源文件,而不是项目文件。
完成作业部分后,就可以使用它并重新添加不良图层。如果您在图层上的样式设置很困难,则可以单独保存并添加它。
另一个选择是将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层将保留并可以编辑。如果重新安装源文件,则所有内容都恢复正常,即使更改了其他层也是如此。
可能的解决方法是使用脚本修改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
路径的,具有指向工作源的路径的。
然后,您将有一个项目要进行,但是您可以根据所处的环境轻松更改路径,或者更改路径以使图层不被加载,但仍保留在项目中(保存所有样式)而且我认为您甚至可以根据需要修改样式(地图上什么也不会显示)。
ChangeDataSource插件通过将图层临时移动到处理不良图层组来将其保留在文件中。https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/它应该做您想要的。去年,我遇到了类似的问题,并注意到有一个ChangeDataSource插件可以处理图层,但不能处理不良图层。我提到在开发人员的(Enrico Ferreguti)博客上的评论中,处理不良图层将是一个很棒的功能。一周之内,他添加了它!