我正在使用Qgis 3.4 Madeira,并尝试使用一种布局并更改先前布局的某些元素来生成许多地图。 我可以使用QGIS GUI中的Terminal Python在Qgis 3.4(或3.0、3.2、3.6等)中执行此操作,但是当我尝试在外部执行相同操作时,出现错误4:`/ home / “用户/mapas/004.jpg”未识别为受支持的文件格式,并且生成的文件显示了图像,标签,比例尺,但未显示地图。我知道这可能在QGIS外部完成,因为一位同事在他的计算机上使用了QGIS 3.6上的相同代码(我在其他三台具有不同QGIS版本(包括3.6,但出现相同错误)的计算机上进行了尝试。有任何想法吗?
from qgis.core import *
from qgis.gui import *
import sys
import os
# Diretórios
diretorio_atual = os.getcwd()+'/'
diretorio_fotos = diretorio_atual+'fotos/'
diretorio_casas = diretorio_atual+'casas/'
diretorio_mapas = diretorio_atual+'mapas/'
# Carregando dados das fotos
fotos = {}
for linha in open(diretorio_atual+'coordenadas_fotos.txt','r').readlines():
a = linha.strip().split('\t')
fotos[a[0]] = {'lat':float(a[1]),'lon':float(a[2]),'z':float(a[3]),'data':a[4].split()[0],'hora':a[4].split()[1],'municipio':a[5]}
# Iniciando qgis
QgsApplication.setPrefixPath('/usr/share/qgis', True)
qgs = QgsApplication([], False)
qgs.initQgis()
# Carregando projeto
project = QgsProject.instance()
project.read(diretorio_atual+'projeto_relatorio_campo.qgs')
# Carregando layout
layout = project.layoutManager().layoutByName('localizacao_fotos')
# Obtendo ids dos items do layout
items = {}
for n,item in enumerate(layout.items()):
try:
nome = item.displayName()
items[nome] = n
except: pass
print (items)
n = 0
for foto in sorted(fotos):
# Alterando fonte da imagem
layout.items()[items['Imagem']].setPicturePath(diretorio_fotos+foto)
# Alterando nome da cidade
layout.items()[items['Título']].setText(fotos[foto]['municipio'])
layout.items()[items['Local']].setText('''Informações gerais:
Latitude: %.4f
Longitude: %.4f
Altitude: %.1f
Data: %s
Hora: %s
''' % (fotos[foto]['lat'],fotos[foto]['lon'],fotos[foto]['z'],fotos[foto]['data'],fotos[foto]['hora']))
n = n + 1
if n > 4:
break
exporter = QgsLayoutExporter(layout)
exporter.exportToImage(diretorio_mapas+'%.3i.jpg' % n,QgsLayoutExporter.ImageExportSettings())
print (diretorio_mapas+'%.3i.jpg')