10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QGISでの四角バッファ作成方法

Posted at

#目的
QGISには、地点から円Bufferの作る機能がありますが、四角Bufferの既存機能は、現在ない。
QGISのPython Consoleで四角Bufferを作る方法です。
image.png

:point_right:QGIS2.x用のSOURCE (この記事にQGIS3.xも対応してる)

#はじめに
##地点データの座標系(CRS)を意識しましょう:earth_africa:

  • 円Bufferを作っても、バッファー処理を実行する前にinput Point dataの座標系(CRS)を確認してください
    • → 緯度経度関係の座標系だと(WGS84, SRID 4326)、バッファーの距離を500に設定する場合、500度のバッファーを作成される:scream:
    • 座標系に修正したければ、Input 地点データのレイヤーからExportして、下記の座標系で選択してください
      • 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:thumbsup_tone2:

QGISでの選択CRSの事例
Capture d’écran 2018-07-25 à 18.41.23.png

#四角Bufferの作成
####1. レイヤーをClickで選択する
image.png

####2. Python Consoleを表示
Capture d’écran 2018-07-25 à 18.46.22.png

####3. 下記のCodeをコピー
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で実行する
Capture d’écran 2018-07-25 à 19.02.11.png

####5. 作られた四角Bufferを保存
square_bufferの新レイヤーが保存していないので、Exportを意識してください:bulb:
Capture d’écran 2018-07-25 à 19.04.07.png

#まとめ
四角Bufferを作られますが、Console Pythonでcodeのコピペのママです。
よく作成するになれば、QGIS個人ツールを自分で作らた方がいい。

 
 

以上:v_tone2::red_circle::black_circle:

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?