Экспорт макета с помощью Pyqgis - работает внутри QGIS, но не снаружи. - PullRequest
0 голосов
/ 25 марта 2019

Я использую Qgis 3.4 Madeira и пытаюсь создать много карт, используя макет и меняя некоторые элементы предыдущего макета.Я могу сделать это внутри Qgis 3.4 (или 3.0, 3.2, 3.6 и т. Д.), Используя Terminal Python внутри QGIS GUI, но когда я пытаюсь сделать то же самое снаружи, я получаю 'ERROR 4: `/ home /user / 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')
...