É possível tirar automaticamente uma "captura de tela" do meu recurso selecionado no QGIS usando Python?

11

Estou implementando uma ferramenta que permite ao usuário criar um perfil de um recurso (no meu caso, parcelas urbanas). É possível capturar automaticamente uma captura de tela desse recurso (exibida em uma janela QGIS) e exibi-la no perfil PDF?

A imagem deve mostrar apenas a extensão do recurso e talvez uma camada WMS que esteja além do recurso. Já existem algumas ferramentas que você poderia sugerir?

kopi
fonte
Como posso salvar um JPG em vez de um PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Eu sei que posso usar "JPG" como último parâmetro, mas não sei como definir o QPixmap que é exatamente o mesmo que o mapa real janela em qgis. Obrigado pela ajuda. Micha
gismic

Respostas:

10

kopi,

Existem várias abordagens para uma solução, mas essa pode ser uma das mais simples (dependendo das suas necessidades):

Selecione o recurso usando QgsVectorLayer

Supondo uma referência à sua camada vetorial (vlayer) e ao ID do recurso (fid). Veja também

vlayer.select(fid)

Aplicar zoom ao recurso selecionado usando QgsInterface

qgis.utils.iface.actionZoomToSelected().trigger()

Desmarque o recurso usando QgsVectorLayer

vlayer.deselect(fid)

Salvar tela como imagem usando QgsMapCanvas

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

Essa abordagem produz uma foto a maior possível, se sua janela for expandida para cheia, porque o salvamento da tela está na resolução da tela. No entanto, isso não garante que suas fotos tenham a mesma escala de zoom do mapa, apenas relativamente o mesmo tamanho de pixel. Existem outras opções, como QgisInterface::actionPanToSelected()se você precisar manter a escala de zoom consistente.

dakcarto
fonte
Uau. Obrigado pela sua resposta! Isso funciona muito bem!
kopi
1
dê uma olhada também no plug-in "impressão fácil", provavelmente não o que você precisa, mas pode ser útil para obter inspiração.
Giovanni Manghi
É possível definir a escala antes de tirar a captura de tela? E como posso usar "actionPanToSelected"? Eu estou tentando desta maneira: qgis.utils.iface.actionPanToSelected (recurso que a função precisa mover para ...), mas isso retorna uma mensagem de erro: "Attritbute Error: QgisInterface objeto não tem atributo actionPanToSelected
kopi
1
Tente qgis.utils.iface.mapCanvas().zoomScale(scale)definir a escala do mapa. actionPanToSelected () não aceita um parâmetro, mas retorna uma referência à própria ação (como actionZoomToSelected () acima). Use seu slot público qgis.utils.iface.actionPanToSelected().trigger()para disparar a ação, que resolverá descobrir o que está selecionado.
Dakcarto 23/08/12
1
Hummm. qgis.utils.iface.actionPanToSelected (). trigger () funciona para mim no QGIS versão 1.8.0. Você está usando a versão estável mais recente (1.8.0)? O recurso foi adicionado em janeiro , por isso é não na versão 1.7.x .
Dakcarto