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 :

enter image description here

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

or an approach in QGIS:

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

"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.

enter image description here

  • 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


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

enter image description here

Note: As a roughness parameter I have used 1.


| improve this answer | |
  • 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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.