4 votos

Mapa sobre lienzo procesa después de guardado de la imagen

Soy un principiante en Qgis y Python; necesito un script (no lo necesita para ser un plugin) para obtener los mapas de características seleccionadas a partir de una capa de satisfacer ciertas condiciones; Aquí está mi código:

from qgis.gui import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import time
fnam ='C:/Users/User/.qgis2/Test/Output/'
canvas = qgis.utils.iface.mapCanvas()
#print canvas.size()
Nom =QInputDialog.getText(None,"Value", "Enter text",0)
fnam2 = fnam + Nom[0] + '.txt'
#print fnam2
outfile = open (fnam2, 'w')
layer = iface.activeLayer()
layer.setSelectedFeatures([])
#provider =layer.dataProvider()
selection=[]
for f in layer.getFeatures():
    n1 = f['Comune_1'] 
    n2 = f['Comune_2'] 
    n3 = f['Comune_3'] 
    n4 = f['Comune_4'] 
    n5 = f['Comune_5'] 
    if (n1 == Nom[0]) or (n2 == Nom[0]) or (n3 == Nom[0]) or (n4 == Nom[0]) or (n5 == Nom[0]) :
        selection.append(f.id())
        line = '%s\n' % (f['link'])
        unicode_line = line.encode('utf-8')
        outfile.write(unicode_line)
layer.setSelectedFeatures(selection)
#provider.select()
outfile.close()
mnam ='C:/Users/User/.qgis2/Test/Output/' + Nom[0] + '.tif'
mnam2 ='C:/Users/User/.qgis2/Test/Output/' + Nom[0] + '.png'
#print mnam
canvas.zoomToSelected()
canvas.refresh()
canvas.update()
canvas.saveAsImage(mnam,None,'tif')
#time.sleep(3)
canvas.saveAsImage(mnam2,None,"PNG")
#print 'Finished'

Mi problema es que la imagen guardada(s) mostrar el mapa en el momento en que presione el botón "ejecutar" botón en la consola de Python, no el mapa basado en la última selección; he intentado insertar un tiempo.llamada sleep() retardo de ahorro, con la esperanza de que podría ayudar a la espera de representación para completar antes de guardar, pero no funciona; también traté de recursing todo el proceso con un bucle for, ni de trabajo; algunos consejos sobre lo que estoy haciendo mal?

Voy a intentar explicar de una mejor manera:
en este proyecto tengo dos capas/shapefiles: una muestra de las aldeas en mi región con sus límites; la segunda muestra la transcripción de las ortofotos en un 1:5000 de la escala del territorio (img1)enter image description here

ahora los profesionales o de la aldea, los administradores pueden pedir las ortofotos de un determinado pueblo; ejecutar mi script deseo:
- tener una lista de las ortofotos de la aldea (esto funciona bien con archivos txt creo);
- dar un mapa que muestra la disposición de los solicitados ortofotos como una ayuda complementaria.
Ahora, si ejecuto el script de la selección de, digamos, "Potenza", que finalmente se puede ver en Qgis el mapa actualizado con la selección deseada, pero guarda las imágenes muestran el conjunto de la región:(me refiero a "Potenza.png" es idéntico al de la imagen de arriba, mientras que debe ser como la de abajo);
sólo ahora me di cuenta de que hay selecciones, por lo que el problema parece estar en zoomToSelected comando.

si vuelvo a ejecutar la secuencia de comandos y seleccione otro pueblo, decir "Maratea", esto es lo que voy a encontrar como Maratea.png enter image description here

(tif imágenes son idénticas a png);

(Cuando voy a tener un guión de trabajo seleccionado "rectángulos" mostrará el nombre de la imagen, y no voy a usar inputdialog pero voy a llegar a la aldea de los nombres de la primera shapefile y ejecutar solo una vez para todos los pueblos).

0voto

GreyCat Puntos146

No entiendo tu problema.

1) crear un archivo de texto con las características seleccionadas id

layer = iface.activeLayer()
# you select all the features with nom in one of the 5 fields
selection = [f.id() for f in layer.getFeatures() if nom in [f['Comune_1'],f['Comune_2'],f['Comune_3'],f['Comune_4'],f['Comune_5']]]
# then you write in a text file the link field of the selected features
with open(newfile, 'w') as outfile:
    for f in layer.getFeatures():
        if f.id() in selection:
            # the default format is unicode
            outfile.write('%s\n' % (f['link']))

2) Después de guardar el lienzo que muestra las características seleccionadas

# select the features
layer.setSelectedFeatures(selection)
canvas.zoomToSelected()
# save the files
canvas.saveAsImage(mnam,None,'TIF')
canvas.saveAsImage(mnam2,None,"PNG")

Y funciona sin problema.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by: