PyQGIS'de tamponlama?


17

QGIS basit python komut dosyaları yapmak için bazı örnekler arıyorum. Veri kümesinde nasıl arabellek analizi yapabilirim?

Esri belgelerine oldukça uygun olan el kitabında ve QGIS python'da fazla bir şey bulamıyorum.

Yanıtlar:



12

PyQGIS Konsolu ile istediğinizi elde etmenin farklı yolları var:

  1. Aragon'un önerisi;
  2. QgsGeometryAnalyzer sınıfını kullanarak:
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. Sextante sınıfını kullanarak:
from sextante.core.Sextante import Sextante
Sextante.runalg("ftools:fixeddistancebuffer","input_path.shp", False, 500, 5, True, "output_path_buffer.shp")

Sextante parametrelerini almak için Sextante.alghelp("ftools:fixeddistancebuffer")PyQGIS Konsolu'na yazın.

Bu yardımcı olur umarım !


11

temel kod istiyorsanız, deneyebilirsiniz:

#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})

Teşekkürler - QgsFeature katman adı mı yoksa mutlak bir yol içermeli mi? Tampon (5,2) bu mesafe mi?
CBS Danny

1
bunu bir for döngüsü ile de yapabilirsiniz ve ayrıca gerekli değilse özellikleri seçmekten de kaçınabilirsiniz gist.github.com/4094707
Nathan W

1
@GISDanny QgsFeature, QGIS'deki özellik ve geometri gibi bir özellik için bir kap sınıfıdır. Katman qgis.utils.iface.activeLayer () bitidir ve QGIS'de etkin olan katmanı kullanır.
Nathan W

Python'da arabelleğe alırken birimleri belirtmek mümkün mü? Bir nokta katmanı arabelleğe almaya çalışıyorum. yerel bir sistem belirledim. Bir şeyler yanlış.
kflaw

9

Son cevaba eklemek için küçük bir şey.

Belirli bir konuyla ilgili bir SEXTANTE algoritması aramak için Sextante.alglist () kullanın. Örneğin, "tampon" içeren bir şey ararken,

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

Ve şunu elde edersiniz:

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

Bu şekilde, çağrılacak algoritmanın adını bulabilirsiniz (ftools: fixeddistancebuffer, yukarıdaki cevapta önerilen örnekte)

Senaryonuzu SEXTANTE içinde yeni bir algoritmaya dönüştürebilirsiniz. SEXTANTE belgelerinde bununla ilgili ayrıntılı bilgiler bulunur.


Bu sextante blogunda bahsetmeye değer harika bir ipucu. Bunu dün arıyordum.
underdark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.