使用pyqgis导出布局-在QGIS内部有效,但在外部无效

时间:2019-03-25 19:25:31

标签: python-3.x qgis

我正在使用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')

0 个答案:

没有答案