I am working on wind rose data. I have some points on lines (streets) in my Postgres/PostGIS DB. The sample data scenario is:
First, I computed street orientation of this line using PostGIS commands
ST_Azimuth() like this:
Select -- line_dir = line direction (orientation) in degrees (degrees(ST_Azimuth(line_end_pt, line_start_pt)))::int As line_dir, -- assign the line direction as the lower bound of sector 1 (of 30 degree) (degrees(ST_Azimuth(line_end_pt, line_start_pt)))::int As lower_bound_sector1, -- add 30 degree to lower bound to get the upper bound as each sector is of 30 degree max. (degrees(ST_Azimuth(line_end_pt, line_start_pt)))::int + 30 As upper_bound from ( Select pt_on_line.geom as pt, line.geom As line, ST_StartPoint(ST_LineMerge(line.geom)) As line_start_pt, ST_EndPoint(ST_LineMerge(line.geom)) As line_end_pt from pt_on_line Left join line on ST_DWithin(pt_on_line.geom, line.geom, 0.1) ) As foo;
Now starting with this street orientation, I need to generate a wind rose of 12 sectors (each of 30 degree having its lower bound and upper bounds) as geometry around this point on line in a radius of 50 meter. In the above code, I have assigned street direction as lower bound of sector_1 and added 30 degree to the lower bound. This approach might be unrealistic though. The expected output could be something similar to this.
How can I draw these 12 wind sectors (geometry) around this point starting from line's orientation?
Using the answer of @MichalZimmermann, here is the screen shot of wind rose generation using PostGIS and visualized in QGIS.