#目的
QGISには、地点から円Bufferの作る機能がありますが、四角Bufferの既存機能は、現在ない。
QGISのPython Consoleで四角Bufferを作る方法です。
QGIS2.x用のSOURCE (この記事にQGIS3.xも対応してる)
#はじめに
##地点データの座標系(CRS)を意識しましょう
- 円Bufferを作っても、バッファー処理を実行する前にinput Point dataの座標系(CRS)を確認してください
- → 緯度経度関係の座標系だと(WGS84, SRID 4326)、バッファーの距離を500に設定する場合、500度のバッファーを作成される
- 座標系に修正したければ、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
#四角Bufferの作成
####1. レイヤーをClickで選択する
####3. 下記のCodeをコピー
QGIS version 2.x 用
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 用
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の新レイヤーが保存していないので、Exportを意識してください
#まとめ
四角Bufferを作られますが、Console Pythonでcodeのコピペのママです。
よく作成するになれば、QGIS個人ツールを自分で作らた方がいい。
以上