Based on xunilk code in previous post I improved it to add mean distances to "MeanDist" field, while I can print mean distance for each point id, but this data didn't write in attribute of layer. what is the problem for add data to the attribute?
from PyQt4.QtCore import *
import itertools
import numpy as np
layer = iface.activeLayer()
feats = [ feat for feat in layer.getFeatures() ]
n = len(feats)
comb = range(n)
distances = [ [] for i in range(n) ]
indexes = [ [] for i in range(n) ]
for i, j in itertools.combinations(comb, 2):
dist = feats[i].geometry().distance(feats[j].geometry())
if dist < 500:
i_dist= distances[i].append(dist)
i_index= indexes[i].append([i,j])
j_dist= distances[j].append(dist)
j_index= indexes[j].append([i,j])
prov = layer.dataProvider()
layer.startEditing()
if prov.fieldNameIndex("MeanDist") == -1:
prov.addAttributes([QgsField("MeanDist", QVariant.Double, "double", 10, 2)])
else:
pass
for feature in layer.getFeatures():
attrName = "MeanDist"
for i, group in enumerate(distances):
if i == feature.id():
print feature.id(), np.mean(group) # print for test results, it must remove.
prov.changeAttributeValues({feature.id() : {prov.fieldNameMap()[attrName]: np.mean(group)}})
layer.updateFeature(feature)
layer.updateFields()
layer.commitChanges()