4 votos

¿Cómo crear múltiples buffers basados en una lista de valores?

Estoy buscando un método para buffer geometrías pasando una lista de valores de cantidad de buffer en QGIS. Las capas de polígonos resultantes deben tener un sufijo con la cantidad de buffer de alguna manera. Al pasar, por ejemplo, (10,13,15) esperaría el siguiente resultado (dibujado con Inkscape):

introducir descripción de la imagen aquí

Lo que he intentado hasta ahora:

  • Ninguna de las herramientas disponibles en QGIS (barra de menús y geoprocesamiento) acepta la entrada de esa lista.
  • El complemento 'Multi Ring Buffer' solo calcula buffers equidistantes.
  • El siguiente script funciona hasta ahora, pero QgsGeometryAnalyser.buffer() parece carecer de un parámetro para cuántos segmentos aproximar (así que obtengo bonitos 20-hedros al hacer buffering de un punto)

    radios = [10.0, 13.0, 15.0]
    for r in radios:
        shapeout = 'c:\\temp\\point_buf_%s' % r
        QgsGeometryAnalyser.buffer(iface.mapCanvas.currentLayer(), shapeout, r, False, False, -1)

1 votos

Sin saber cómo está distribuida tu columna de búfer, es un poco complicado, pero echando un vistazo rápido, GRASS podría ser una buena opción. Echa un vistazo a "v.buffer.column". Si utilizas esta herramienta dentro del modelador gráfico de QGIS, podrás automatizar todo el proceso y dar a cada resultado su propio título. Un poco largo, pero podría funcionar.

1 votos

Puedes intentar usar Sextante (ver esta respuesta) en lugar de QgsGeometryAnalyser. Tiene un argumento de "segmento" que podría ser útil.

0 votos

El complemento Multi-distance buffer QGIS permite la especificación de un conjunto de distancias de búfer, por lo que si la entrada manual es una opción, ese complemento debería resolver tu problema.

2voto

Mue Puntos 2469

En lugar de usar QgsGeometryAnalyser, podrías intentar llamar a la función de Procesamiento:

import processing
radiouses = [10.0, 13.0, 15.0]
for r in radouses:
    shapeout = 'c:\\temp\\point_buf_%s' % r
processing.runalg("qgis:fixeddistancebuffer", iface.activeLayer(), r, 99, False, shapeout )

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