¿Buffering en pyQGIS?

16

Estoy buscando algunos ejemplos para hacer scripts de Python simples en QGIS. ¿Cómo haría un análisis de búfer en un conjunto de datos?

Parece que no puedo encontrar mucho en el manual y QGIS python que coincida con la documentación de Esri.

    
pregunta GIS Danny 16.11.2012 - 00:37

4 respuestas

5

Eche un vistazo al Libro de cocina de PyQGIS .

Siga el ejemplo sobre cómo iterar sobre una capa vectorial. Accediendo a la geometría, puede aplicar el método buffer (). Consulte también la API de QGIS: enlace

    
respondido por el webrian 16.11.2012 - 09:45
10

Tiene diferentes formas de obtener lo que quiere con la consola de PyQGIS:

  1. sugerencia de Aragón;
  2. utilizando la clase QgsGeometryAnalyzer:
from qgis.utils import iface
from qgis.analysis import QgsGeometryAnalyzer 
mc = iface.mapCanvas() 
layer = mc.currentLayer()
QgsGeometryAnalyzer().buffer(layer, "path_to/output.shp", 500, False, False, -1)
  1. utilizando la clase Sextante:
from sextante.core.Sextante import Sextante
Sextante.runalg("ftools:fixeddistancebuffer","input_path.shp", False, 500, 5, True, "output_path_buffer.shp")

Para obtener los parámetros de sextante, escriba Sextante.alghelp("ftools:fixeddistancebuffer") en PyQGIS Console.

Espero que esto ayude!

    
respondido por el lrssvt 16.11.2012 - 23:52
10

Si quieres un código básico, puedes probar:

#Don't forget to Toggle Editing

lyr = qgis.utils.iface.activeLayer()
provider = lyr.dataProvider()
feat= QgsFeature()
alls = provider.attributeIndexes()
provider.select(alls)

while provider.nextFeature(feat):
    buff = feat.geometry().buffer(5,2)
    lyr.dataProvider().changeGeometryValues({feat.id(): buff})
    
respondido por el Aragon 16.11.2012 - 10:33
8

Solo una pequeña cosa para agregar a la última respuesta.

Para buscar un algoritmo SEXTANTE sobre un tema determinado, use Sextante.alglist (). Por ejemplo, en el caso de buscar algo que contenga "búfer", harías

>>> from sextante.core.Sextante import Sextante
>>> Sextante.alglist("buffer")

Y obtendrías:

Grid Buffer------------------------------------------>saga:gridbuffer
Grid Proximity Buffer-------------------------------->saga:gridproximitybuffer
Shapes Buffer---------------------------------------->saga:shapesbuffer
Threshold Buffer------------------------------------->saga:thresholdbuffer
Fixed distance buffer-------------------------------->ftools:fixeddistancebuffer
Variable distance buffer----------------------------->ftools:variabledistancebuffer
r.buffer - Creates a raster map layer showing buffer zones surrounding cells that contain non-NULL category values.--->grass:r.buffer
v.buffer.angle--------------------------------------->grass:v.buffer.angl
v.buffer.column - Creates a buffer around features of given type.--->grass:v.buffer.column
v.buffer.distance - Creates a buffer around features of given type.--->grass:v.buffer.distance
v.buffer.minordistance------------------------------->grass:v.buffer.minordistance

De esta manera, puede encontrar el nombre del algoritmo al que llamar (ftools: fixeddistancebuffer, en el ejemplo propuesto en la respuesta anterior)

Puedes convertir tu script en un nuevo algoritmo en SEXTANTE. La documentación de SEXTANTE tiene información detallada al respecto.

    
respondido por el Victor Olaya Ferrero 17.11.2012 - 05:47

Lea otras preguntas en las etiquetas