7 votos

Genere de manera eficiente capas de Voronoi en qgis a través de Python

Los siguientes comandos de python ambos aparecen a la función cuando se llama en qgis 2.6 para generar los diagramas de Voronoi:

processing.runalg("qgis:voronoipolygons", pointLayer, 1, None)
processing.runalg("grass:v.voronoi",pointLayer,False,False, bbox,-1,0.0001,0, None)

pero ninguno de ellos parece funcionar bien. La primera (qgis) es extremadamente lento, teniendo 38 segundos con 180 puntos vs 2 segundos para que la hierba método. El método de qgis también parece ignorar la variable de salida cuando se especifica ("C:/tmp/output.shp" en lugar de Ninguno), pero la capa de salida no aparece en el panel de Capas para que yo pueda iterar a través de las capas y encontrarlo.

El segundo algoritmo parece ignorar el parámetro de salida (de nuevo, "C:/tmp/output.shp" en lugar de Ninguno), y el resultado no parece aparecer en la capa de panel. Tratando de utilizar la memoria:nombre genera un mensaje de error. Sin embargo, los siguientes resultados en un archivo temporal de la ruta se volvió:

output = processing.runalg("grass:v.voronoi",PointLayer,False,False, bbox,-1,0.0001,0, None)
print output.output

Mi conjuntos de datos va a tener miles de puntos, por lo que el qgis biblioteca es demasiado lento y la hierba de la biblioteca requiere una solución para obtener el resultado.

Es allí una manera de hacer qgis:voronoipolygons correr más rápido? Hay una sintaxis que me falta para obtener el resultado de la capa del algoritmo? Va a ser un resultado intermedio utilizado para los cálculos de futuro para el almacenamiento de la memoria es el preferido.

4voto

Mue Puntos 2469

Bastante viejo post, pero va a publicar una respuesta posible, que le permita ejecutar los algoritmos a partir de un guión fuera de QGIS. Los algoritmos deben ejecutar más rápido, más memoria estaría disponible sin tener cargado de QGIS. Tenga en cuenta que esto asume que usted ha instalado QGIS a través de la OSGeo4W instalador.


Siga el primer par de pasos como se describe por @gcarrillo aquí: Problema con la importación de qgis.core cuando la escritura independiente PyQGIS secuencia de comandos. Yo uso el .archivo bat para hacer la vida más fácil.

Una vez que los CAMINOS son de tipo python en la línea de comandos y, a continuación, copie/pegue el siguiente código (editar las rutas de acceso y los parámetros de etc. a sus necesidades:

import os, sys, glob
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *

from os.path import expanduser
home = expanduser("~")

QgsApplication( [], False, home + "/AppData/Local/Temp" )

QgsApplication.setPrefixPath("C://OSGeo4W64//apps//qgis", True)
QgsApplication.initQgis()
app = QApplication([])

sys.path.append(home + '/.qgis2/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

point_directory = home + "/Desktop/Test//"     # Change to path containing point shapefiles
output = "C:/tmp//"                            # Path to save outputs

os.chdir(point_directory)
for pointLayer in glob.glob("*.shp"):
        output_0=general.runalg("qgis:voronoipolygons", pointLayer, 1, output + pointLayer)
        # For follow-on algorithms, use output_0 as input
        # Can also replace this with grass algorithms

He probado mediante el seguimiento de los algoritmos y reemplazado ciertas salidas con None (si no quiero que la salida de un determinado algoritmo) y funciona para mí. Por supuesto, esto sería diferente de lo que usted necesita, pero espero que te ayude un poco :)

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