pyQGISのバッファリング?


17

QGISで簡単なpythonスクリプトを実行するための例を探しています。データセットのバッファー分析はどのように行いますか?

Esriのドキュメントに完全に一致するマニュアルとQGIS pythonには、あまり見つけることができないようです。

回答:



12

PyQGISコンソールで必要なものを取得するにはさまざまな方法があります。

  1. アラゴンの提案。
  2. 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. Sextanteクラスを使用して:
from sextante.core.Sextante import Sextante
Sextante.runalg("ftools:fixeddistancebuffer","input_path.shp", False, 500, 5, True, "output_path_buffer.shp")

Sextante.alghelp("ftools:fixeddistancebuffer")PyQGIS Consoleで六分儀パラメーターを入力します。

お役に立てれば !


11

基本的なコードが必要な場合は、次を試すことができます。

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

ありがとう-QgsFeatureはレイヤー名ですか、絶対パスを含める必要がありますか?そしてbuffer(5,2)はその距離ですか?
GISダニー

1
forループでこれを行うこともできます。また、必要ない場合は属性の選択を避けることができますgist.github.com/4094707
Nathan W

1
@GISDanny QgsFeatureは、QGISの属性やジオメトリなどの機能のコンテナクラスです。レイヤーはqgis.utils.iface.activeLayer()ビットで、QGISで現在アクティブなレイヤーを使用します。
ネイサンW

Pythonでバッファリングするときに単位を指定することは可能ですか?ポイントレイヤーをバッファリングしようとしているローカルシステムを指定しました。何かが明らかに間違っています。
kflaw

9

最後の返信に追加するちょっとしたこと。

特定のトピックに関するSEXTANTEアルゴリズムを検索するには、Sextante.alglist()を使用します。たとえば、「バッファ」を含むものを検索する場合、次のようにします。

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

そして、あなたは得るでしょう:

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

そうすれば、呼び出すアルゴリズムの名前を見つけることができます(上記の応答で提案されている例では、ftools:fixeddistancebuffer)

SEXTANTEでスクリプトを新しいアルゴリズムに変えることができます。SEXTANTEのドキュメントには、それに関する詳細情報が記載されています。


あなたのセクスタンテのブログで言及する価値のある素晴らしいヒント。昨日これを探していました。
暗闇
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.