QGIS에서의 사각 버퍼 작성 방법

11647 단어 QGISGIS파이썬Buffer

목적



QGIS에는 지점에서 원 버퍼를 만드는 기능이 있지만 사각형 버퍼의 기존 기능은 현재 없다.
QGIS의 파이썬 콘솔에서 사각형 버퍼를 만드는 방법입니다.


QGIS2.x용 SOURCE (이 기사는 QGIS3.x도 지원합니다)

소개



지점 데이터의 좌표계 (CRS)를 의식합시다.


  • 원 Buffer를 작성해도, 버퍼 처리를 실행하기 전에 input Point data의 좌표계(CRS)를 확인해 주세요
  • → 위도 경도 관계의 좌표계라면(WGS84, SRID 4326), 버퍼의 거리를 500으로 설정하는 경우, 500도의 버퍼가 작성된다
  • 좌표계로 수정하려면 Input 지점 데이터 레이어에서 내보내고 아래 좌표계에서 선택하십시오.
  • UTM 51 N (SRID 32651) → 오키나와 변
  • UTM 52 N (SRID 32652) → 규슈 ~ 히로시마 · 마쓰야마 베
  • UTM 53 N (SRID 32653) → 히로시마 ~ 오사카 ~ 시즈오카 베
  • UTM 54 N (SRID 32654) → 시즈오카~관동~도호쿠~홋카이도
  • UTM 55 N (SRID 32655) → 홋카이도 오비히로의 동쪽에서 ~
  • 출처

  • 다른 meters unit의 좌표계 (CRS)도 OK



  • QGIS에서 선택 CRS 사례


    사각형 버퍼 만들기



    1. 레이어를 클릭하여 선택





    2. Python Console 보기





    3. 아래의 코드 복사



    QGIS version 2.x용

    QGIS2용
    layer = iface.activeLayer()
    
    feats = [ feat for feat in layer.getFeatures() ]
    
    epsg = layer.crs().postgisSrid()
    
    uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer&field=x:real&field=y:real&field=point_id:integer""&index=yes"
    
    mem_layer = QgsVectorLayer(uri,
                               'square_buffer',
                               'memory')
    
    prov = mem_layer.dataProvider()
    
    for i, feat in enumerate(feats):
        point = feat.geometry().asPoint()
        new_feat = QgsFeature()
        new_feat.setAttributes([i, point[0], point[1], feat.id()])
        tmp_feat = feat.geometry().buffer(500, -1).boundingBox().asWktPolygon()
        new_feat.setGeometry(QgsGeometry.fromWkt(tmp_feat))
        prov.addFeatures([new_feat])
    
    ##### QGIS 2.x の場合
    QgsMapLayerRegistry.instance().addMapLayer(mem_layer) 
    
    

    QGIS version 3.x용

    QGIS3용
    layer = iface.activeLayer()
    
    feats = [ feat for feat in layer.getFeatures() ]
    
    epsg = layer.crs().postgisSrid()
    
    uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer&field=x:real&field=y:real&field=point_id:integer""&index=yes"
    
    mem_layer = QgsVectorLayer(uri,
                               'square_buffer',
                               'memory')
    
    prov = mem_layer.dataProvider()
    
    for i, feat in enumerate(feats):
        point = feat.geometry().asPoint()
        new_feat = QgsFeature()
        new_feat.setAttributes([i, point[0], point[1], feat.id()])
        tmp_feat = feat.geometry().buffer(500, -1).boundingBox().asWktPolygon()
        new_feat.setGeometry(QgsGeometry.fromWkt(tmp_feat))
        prov.addFeatures([new_feat])
    
    
    ##### QGIS 3.x の場合
    QgsProject.instance().addMapLayer(mem_layer) 
    

    ※ 이 라인에 거리를 설정할 수 있다 (아래에 500m)tmp_feat = feat.geometry().buffer(500, -1).boundingBox().asWktPolygon()

    4. Python Console에 Paste하고 실행



    Console의 아래 부분에 Paste하면 이 느낌이 되어 Enter로 실행


    5. 만든 사각형 Buffer 저장



    square_buffer의 새 레이어가 저장되지 않으므로 내보내기를 의식하십시오


    요약



    사각형 Buffer를 만들 수 있지만 Console Python에서 코드의 copipe 엄마입니다.
    잘 작성하게 되면, QGIS 개인 툴을 스스로 만든 것이 좋다.

     
     

    이상

    좋은 웹페이지 즐겨찾기