4 votos

Cómo mostrar un diálogo "Guardar Como" para archivos raster?

Estoy escribiendo un plugin de QGIS en python. Necesito mostrar un diálogo "Guardar como" de la ventana con el fin de permitir que el usuario seleccione la ruta de acceso del ráster de salida de archivo. Qué necesito para crear una QFileDialog y agregar manualmente todos los formatos de mapa de bits apoyado por QGIS o ¿existe un método para cargar estos formatos de algún lugar? O, mejor, ¿existe un método para mostrar un diálogo "Guardar Como" de la ventana preparado para la gestión de archivos raster?

Gracias!

5voto

Andrea Puntos 71

La navegación por el QGIS código fuente, he encontrado una función específica, llamada buildSupportedRasterFileFilter. Este código funciona bien en el QGIS consola de python:

from PyQt4.QtCore import *
a = QString()
QgsRasterLayer.buildSupportedRasterFileFilter(a)
# "a" contains a string that can be used in a Dialog Window.
...

Ahora estoy buscando un método similar que excluye sólo lectura formatos.

EDIT: Hay una muy buena aplicación de un procedimiento para abrir archivos ráster en la GDAL Herramientas de plugins. Para usarlo:

  1. Descargar el QGIS código fuente. Copie el archivo [source_dir]/python/plugins/GdalTools/tools/GdalTools_utils.py a su directorio de plugins.
  2. Dentro de su ventana de diálogo en la clase, importar el módulo:

    import GdalTools_utils as Utils
    
  3. implementar el siguiente método:

    def get_raster_name(self):
    
        lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
        # rasterize supports output file creation for GDAL 1.8
        gdalVersion = Utils.GdalConfig.version()
        if gdalVersion >= "1.8.0":
            fileDialogFunc = Utils.FileDialog.getSaveFileName
        else:
            fileDialogFunc = Utils.FileDialog.getOpenFileName
        outputFile = fileDialogFunc(self, self.tr( "Select the raster file to save the results to" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter)
        if outputFile.isEmpty():
            return
        Utils.FileFilter.setLastUsedRasterFilter(lastUsedFilter)
    
        # required either -ts or -tr to create the output file 
        if gdalVersion >= "1.8.0":
            if not QtCore.QFileInfo(outputFile).exists():
                QMessageBox.information( self, self.tr( "Output size required" ), self.tr( "The output file doesn't exist. You must set up the output size to create it." ) )
        return outputFile
    

Ahora, llame al método cuando se necesita un archivo. El código es tomado de un otro archivo de la Gdal Herramientas (doRasterize.py). Recuerde insertar un aviso de derechos de autor en la utils archivo, para especificar que se han tomado desde el QGIS código fuente.

2voto

Munez B.N Puntos 31

No hay hechos de diálogo. Los formatos de mapa de bits apoyado por QGIS dependen de la GDAL versión utilizada. Usted puede obtener una lista de formatos de archivo y extensiones compatibles con la versión instalada de GDAL como este:

import gdal

    gdal.AllRegister()
    for i in range(0, gdal.GetDriverCount()):
        drv = gdal.GetDriver(i)
        drv_meta = drv.GetMetadata()
        if 'DMD_EXTENSION' in drv_meta:
            print "%s: .%s" % (drv.LongName, drv_meta['DMD_EXTENSION'])

Alternativamente, usted puede decidir cual de los "típicos" GDAL formatos apoyará y codificar el cuadro de diálogo.

0voto

Pablo Puntos 6414

Siga los menús "raster" > "conversión" > "traducir", esto le permite guardar la trama como cualquier deseable formato. Si usted todavía desea escribir su propia "Guardar como..." usted puede mirar en la fuente a agarrar la lista de formatos.

enter image description here

0voto

stsquad Puntos 2893
import gdal

gdal.AllRegister()
for i in range(0, gdal.GetDriverCount()):
    drv = gdal.GetDriver(i)
    drv_meta = drv.GetMetadata()
    if 'DMD_EXTENSION' in drv_meta:
        print "%s: .%s" % (drv.LongName, drv_meta['DMD_EXTENSION'])

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:

X