# Transferring attributes to neighbors in point layer using QGIS

My goal is to create a wind map for an area about 300 kmĀ² in QGIS.

For this i have the data of only one weather station. The idea is to estimate the wind speed by the roughness lenght and the elevation. With a DEM i extract a homogeneous point layer with the elevation as attributes (the roughness i got from a land cover layer).

Now i want to transfer the wind speed, starting from the point from which i got the wind data, to the eight surrounding points (as shown in the second picture). With this given attribute every point shall perform an internal calculation (logarithmic profile calculation) and pass the result (their wind speed) to the next points until all points in the layer contain the value. If a point gets more than one different value from the surrounding points, it should do the calculation with the mean value (the structure, which is shown in the second picture, is just an example; in this case there are no overlays) . Unfortunately, I don't know how to transfer the attribute to the neighbors. How can I do that?

The logarithmic profile calculation is :

v=wind speed, h=height and z=roughness

or an approach in QGIS:

``````case
when "VALUE_2" > 0 then round("Windgeschw" * (log(2.7183, ((10 + "VALUE" - "VALUE_2")/"Rauhigkeit"))/log(2.7183, (10/"Rauhigkeit"))), 1)
else ''
end
``````

where
`"VALUE"` is height at the point
`"VALUE_2"` is the given height from point 1
`"Rauhigkeit"` is roughness
`"Windgeschw"` is the given wind speed from point1

After that the result should be given to the next points.

• Can you edit and explain how the values will propagate through neighbouring points? For example, if an uncalculated point has two neighbours with Value_1, which one is used? – Simbamangu Oct 3 at 12:15

IMHO you are making things a bit complicated, I think that there is no need in the gradual point calculus because all new values are comming from one point

Let's assume there is a layer `"pois"` with its corresponding attribute table accordingly, see image below.

Note: On the image above there is only one point with the wind data, i.e. a point with `"id" = 1`.

In the Attribute Table apply the following expression

``````attribute(get_feature('pois','id',1),'v')*ln("h"/1)/ln(attribute(get_feature('pois','id',1),'h')/1)
``````

click 'Update All' and get the output for other points, see image below

Note: As a roughness parameter I have used 1.

References:

• Thanks for this idea Taras! But I'm not sure how to continue then. If I pass the wind speed from the new points to the next ones (in the same way), all wind speeds will overlay each other... In my opinion, the transfer should only take place away from the initial point, so they can not overlap the previous points...or what do you think? – user169441 Oct 5 at 12:05
• Okay, then I have a question, do you need the calculation done for all points or just for eight neighbors? Should it be done once or step-by-step? – Taras Oct 5 at 12:07
• I need this calculation for all points ;) in the best case it should be done in one step (perhaps with a loop?)... – user169441 Oct 6 at 11:34
• Can you please explain one thing for me. If you you want this calculation to be applied for all points, why do you need to look for eight neighbors? So, for all points simply use `attribute(get_feature('pois','id',4),'v')*ln("h"/1)/ln(attribute(get_feature('pois','id',4),'h')/1)`, basically skip the selection part. – Taras Oct 6 at 11:51
• Hi Taras, sorry for the long break and thanks for your helpfullness but your approach doesn't fit. Look at the Picture above: v1 should be passed to v3 and the result of the logarithmic calculation v3' should be passed to v12. If i pass v1 to v12 the result becomes imprecise. But yesterday i found a new data source from which i get more initial values so i can try another approach :) – user169441 Oct 16 at 9:01