80

How do I calculate areas of an area shapefile in square meters or in acres (ha)?

I didn't find that functionality in the vector tools.

79

Make the layer editable, then use the field calculator (Layer>Open attribute table>Field Calculator/Ctrl+I or right click shapefile>Open attribute table>Field Calculator/Ctrl+I). There is an operator "$area" that will calculate the area of each row in the table. All units will be calculated in the units of the projection, so you probably want to project it to a projection that uses feet or metres before doing that, rather than lat/lon.

| improve this answer | |
  • 8
    In current versions of QGIS if your data is in a Geographic CRS you can use the function transform() to project the geometries to a projected system (Preferably an equal area one) without the need to duplicate your data. In the Field calculator, something like this should work: area($geometry, 'EPSG:4326','EPSG:3763') – Alexandre Neto Feb 3 '16 at 23:11
  • 11
    @AlexandreNeto: Do you mean area(transform($geometry, 'EPSG:4326','EPSG:3763'))? – Stewart Macdonald Apr 20 '17 at 5:33
  • @smacdonald yes, my mistake. – Alexandre Neto Apr 20 '17 at 6:58
21

This can also be done with Vector|Geometry Tools|Add/export geometry columns, which creates a new shapefile with area and perimeter (or length) columns added.

Edit: (using the tool above, you can also unselect "save as new shape-file" in V1.8, the shapefile is now only updated!)

Using the field calculator is probably a better idea, though, as it doesn't require the creation of a new shapefile.

| improve this answer | |
  • You can't change the attributes of the shapefile without enabling editing first, (calculating area counts as editing the attributes, you are adding a new column). Keep in mind that all units will be calculated in the units of the projection (meters bu default), so you to re-project it to a projected coordinate system first. – Hasan Mustafa Feb 4 '16 at 4:42
5

I wrote a script specifically for this. If you don't want to reproject your data, you can compute the area using ellipsoidal math.

Processing Toolbox -> Tools -> Get scripts from on-line scripts collection -> Ellipsoidal Area

You will find the script installed in Processing Toolbox -> Utils -> Ellipsoidal area

The tool should be self explanatory and will allow you to calculate area in units of your choice regardless of projection.

| improve this answer | |
3

If the areas you are looking at are liable to change, such as looking at infrastructure layouts, catchment areas, study areas etc, I find it useful to simply label the areas, instead of adding them as attributes.

Label-> round($area/10000,2)||' ha'

This way you don't need to remember to update the catchment areas in the attribute tables as often.

| improve this answer | |
  • won't this save your values as strings? I would advise against saving numerical data as strings and instead include the area unit in the field name. – thymaro Feb 26 at 16:02
1

If not getting very accurate area calculations does not bother you (or if you do not want to play with different options in the field calculator as mentioned by some of the answers and comments above), in the current version of QGIS (i.e., QGIS 3.12) there is an easy way to deal with this. Go to "Project >> Properties >> General" and change the units for distance and area measurements. Now $area in the field calculator automatically transform the CRS for area (and for other geometric calculations if that matters).

However, I personally recommend doing the method by @Alexandre as it will give you more accurate results. Though you have to do a little search that what will be the 3rd parameter of transform function, i.e., most suitable CRS for your area of interest and its units.

enter image description here

| improve this answer | |

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