Is there a way to render lines with a smooth (bezier) curves in QGIS?

Check out the Generalizer plugin, it should do what you want. The plugin has smoothing options which work quite well.

It doesn't change how your lines are rendered but instead makes a new shapefile with smoothing (or simplification/generalization) applied.

enter image description here

enter image description here


Using QGIS + GRASS plugin:

Add the Grass toolbar from the "Manage Plugins" window. add grass tools plugin to qgis

Your lines will need to be a grass vector, so convert them into a new or existing GRASS mapset.

From the GRASS toolbar, select GRASS Tools... enter image description here

Look for the module: v.generalize (WIKI tutorial here)

You can then choose several different generalizing algorithms: GRASS tool v.generalize algorithms selection

Note the algorithms: Chaiken, Hermite or even Sliding Average. There are several others as well!

The differences can be seen in the wiki pictures: v.generalize simplify differences example

from Wiki: "Note, that a difference between "Chaiken" and "Hermite" is that the lines produced by "Chaiken" "inscribe" the orginal lines whereas the "Hermite" lines "circumscribe" the original lines as can be seen in the picture [above]. (Black line is original line, green line is "Chaiken" and blue is "Hermite")


Using uDig + jgrasstools or grass:

If you have difficulty getting desirable results from GRASS's v.generalize, try the latest version of uDig with jgrasstools. You can also grab the grass jar from the same place as jgrasstools.

Once uDig is installed and up and running, enable the Spatial Toolbox: Window > Show View > Other... enable spatial toolbox in uDig

Un-dock the toolbar for easier readability (right-click Spatial Toolbox tab > Detach...): detaching spatial toolbox in uDig

Load the required jgrasstools and grass (optional) modules: loading jgrasstools/grass into udig

Don't forget to set your grass parameters (point to grass executable or bat file on windows, or grass command in linux ie, /usr/bin/grass) if you load the grass jar file as well: setting grass parameters in uDig

Finally! Using the tools from jgrasstools (not grass) you can generalize the line easily with Vector Processing > LineSmootherJaiTools Vector Processing to LineSmootherJaiTools in uDig

Be sure to set the input and output properly (works on Shapefiles only, so no need to convert your data to mapsets/locations for grass): input and output settings for Spatial Toolbox in uDig

Once done setting the smoothing tolerance (0.0 - 1.0) and input/output, press the Play button on the Spatial Toolbox window (top right): play module in Spatial Toolbox for uDig

Results:
uDig simplify jgrasstools results...


You can use geometry generator to smooth without changing the original data:

enter image description here

Tags:

Rendering

Qgis