.. only:: html
Vector calculator
============================================================
.. note:: In this lesson we will see how to add new attributes to a vector layer based on a mathematical expression, using the vector calculator.
We already know how to use the raster calculator to create new raster layers using mathematical expressions. A similar algorithm is available for vector layers, and generates a new layer with the same attributes of the input layer, plus an additional one with the result of the expression entered. The algorithm is called *Field calculator* and has the following parameters dialog.
.. image:: img/vector_calculator/field_calculator.png
.. note:: In newer versions of Processing the interface has changed considerably, it's more powerful and easier to use.
Here are a few examples of using that algorithm.
First, let's calculate the population density of white people in each polygon, which represents a census. We have two fields in the attributes table that we can use for that, namely ``WHITE`` and ``SHAPE_AREA``. We just have to divide them and multiply by one million (to have density per square km), so we can use the following formula in the corresponding field
::
( "WHITE" / "SHAPE_AREA" ) * 1000000
The parameters dialog should be filled as shown below.
.. figure:: img/vector_calculator/density.png
This will generate a new field named ``WHITE_DENS``
Now let's calculate the ratio between the ``MALES`` and ``FEMALES`` fields to create a new one that indicates if male population is numerically predominant over female population.
Enter the following formula
::
"MALES" / "FEMALES"
This time the parameters window should look like this before pressing the *OK* button.
.. image:: img/vector_calculator/ratio.png
In earlier version, since both fields are of type integer, the result would be truncated to an integer. In this case the formula should be: ``1.0 * "MALES" / "FEMALES"``, to indicate that we want floating point number a result.
We can use conditional functions to have a new field with ``male`` or ``female`` text strings instead of those ratio value, using the following formula::
CASE WHEN "MALES" > "FEMALES" THEN 'male' ELSE 'female' END
The parameters window should look like this.
.. image:: img/vector_calculator/predominance.png
A python field calculator is available in the *Advanced Python field calculator*, which will not be detailed here
.. image:: img/vector_calculator/advanced.png