答案 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为单位的。