使用QGIS基于空间分析获取某些特定范围内的平均值

时间:2017-02-03 20:46:44

标签: geospatial qgis

我正在使用QGIS来计算附加到多边形的平均值 绕一条线。

我想做的是从一行计算用户定义范围内的多边形数据的平均值。

我将如何做到这一点?

我附上了一张图片供参考:

enter image description here

1 个答案:

答案 0 :(得分:0)

应该有几种方法可以做到这一点。最简单的可能this question中的答案,然后使用this question的答案。

但是,你应该可以用一点python来做到这一点。我写了一个只使用一个图层的小脚本(一个点层找到一定半径内的点的平均值,它平均一个名为'cost'的字段):

# get selected feature
layer = iface.activeLayer()
features = layer.selectedFeatures()

# Buffer the feature 10 layer units
buffer = features[0].geometry().buffer(10,-1)

# Will hold features intersecting buffer
inBuffer = []

# get selected features
for feature in layer.getFeatures():
    if (feature.geometry().intersects(buffer)):
        inBuffer.append(feature)

# for calculating the average
total = 0
number = 0

# Sum the features that intersect the buffer of the selection:
field = layer.fieldNameIndex('cost')
for feature in inBuffer:
    total += (feature['cost'])
    number += 1

#Get the average
average = float(total / number)

print (average)

这只采用第一个选定的要素(要素[0])并将搜索半径应用于此,如果您只选择活动图层中的要素,此限制无关紧要

上面的代码可以压缩一点,但我想我会把它分解出来。特别是因为我的python相当有限。

要根据第一层中的选择在第二层中查找平均值,您可以通过抓取所有图层来稍微修改它:

mapcanvas = iface.mapCanvas()
layers = mapcanvas.layers()

然后使用layers[0]layers[1](或layers[i])代替相应位置的图层,例如:

features = layer.selectedFeatures()features = layers[0].selectedFeatures()

表示源功能,

for feature in layer.getFeatures():for feature in layers[1].getFeatures()

field = layer.fieldNameIndex('fieldname')field = layers[1].fieldNameIndex('fieldname')

表示目标要素(平均值)。

希望我发布的代码很容易申请。我可能会确保两个层使用相同的SRS来避免交叉点的任何问题,并记住缓冲区单元是以SRS为单位的。