如何在QGIS中创建正方形缓冲区


目的

QGIS具有从一个点创建圆形缓冲区的功能,但是目前没有用于方形缓冲区的功能。
如何在QGIS Python控制台中制作方形缓冲区。
image.png

:point_right: QGIS2.x的源(QGIS3.x也支持本文)

介绍

注意点数据:earth_africa:的坐标系(CRS)

  • 即使创建了圆形缓冲区,也要在执行缓冲区处理之前检查输入点数据的坐标系(CRS)。

    • →在纬度/经度坐标系(WGS84,SRID 4326)中,如果缓冲区距离设置为500,则会创建一个500度的缓冲区:scream:

    • 如果要将其修改为坐标系,请从"输入点"数据层中将其导出,然后在下面的坐标系中选择它。

      • 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)→从北海道带广东边来?

        • 资源
      • 其他仪表单位坐标系(CRS)可以:thumbsup_tone2:

QGIS选择CRS案例研究
Capture d’e?cran 2018-07-25 a? 18.41.23.png

创建一个方形缓冲区

1.单击以选择一个层

image.png

2.显示Python控制台

Capture d’e?cran 2018-07-25 a? 18.46.22.png

3.复制下面的代码

QGIS版本2.x的

对于QGIS2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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版本3.x的

对于QGIS3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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控制台,然后运行

粘贴到控制台的底部,它将看起来像这样,请按Enter
Capture d’e?cran 2018-07-25 a? 19.02.11.png

5.保存创建的正方形缓冲区

请注意导出,因为未保存square_buffer的新层:bulb:
Capture d’e?cran 2018-07-25 a? 19.04.07.png

概要

您可以创建一个正方形缓冲区,但我是Console Python中代码复制和粘贴的妈妈。
如果您经常创建它,则应该创建自己的QGIS个人工具。

<铅>

或更多:v_tone2: :red_circle: :black_circle: