pyQGIS에서 버퍼링?


17

QGIS에서 간단한 파이썬 스크립트를 수행하는 몇 가지 예를 찾고 있습니다. 데이터 세트에서 버퍼 분석을 어떻게 수행합니까?

Esri 설명서와 상당히 일치하는 매뉴얼 및 QGIS 파이썬에서 많이 찾을 수없는 것 같습니다.

답변:



12

PyQGIS Console로 원하는 것을 얻는 방법은 여러 가지가 있습니다.

  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 매개 변수를 얻으려면 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 Danny

1
당신은 또한 for 루프를 사용하여이 작업을 수행 할 수 있으며, 필요하지 않은 경우 당신은 또한 속성을 선택 피할 수 gist.github.com/4094707
나단 W

1
@GISDanny QgsFeature는 기능 (예 : QGIS의 속성 및 형상)에 대한 컨테이너 클래스입니다. 계층은 qgis.utils.iface.activeLayer () 비트이며 QGIS에서 현재 활성 계층을 사용합니다.
Nathan W

파이썬에서 버퍼링 할 때 단위를 지정할 수 있습니까? 점 단위를 피트 단위로 CRS로 설정했다고 생각하지만 포인트 버퍼는 거대합니다. 포인트 레이어는 원래 긴 코드가있는 csv에서 가져 왔지만 벡터 레이어를 만들 때 로컬 시스템을 지정했습니다. 무언가 잘못되었습니다.
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 문서에는 이에 대한 자세한 정보가 있습니다.


sextante 블로그에서 언급할만한 훌륭한 팁입니다. 나는 이것을 어제 찾고 있었다.
어두움
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.