I have a line and a point layers and trying to find points 100m to the left of each line.
The image below shows the single-sided buffer result. As can clearly be seen, one of the buffers is generated on the right side. But of course, it is the left side of the line direction.
How can I make sure the buffers are generated on the same side?
Here is the script I want to improve:
point_lyr = QgsProject.instance().mapLayersByName("POINTS")[0]
line_lyr = QgsProject.instance().mapLayersByName("LINES")[0]
i = 1
interval = 100 # meter
# Find all points to the left of each lines
for l in line_lyr.getFeatures():
buffer = l.geometry().singleSidedBuffer(interval, 1, Qgis.BufferSide.Left)
# find the points in the buffer
# assign the lane number (i)
i += 1
Best Answer
You can use the fact that all lines are parallel and calculate the angle of the lines. Define a main angle (e.g. from the first line), and if a line does not fit that main angle draw the buffer on the otherside.
You could add a tolerance if they are not perfectly parallel. E.g. by using
math.isclose()
with a relative or absolute tolerance:Or do some more fancy stuff like: