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.