2

The area calculations in my project derived from the attribute field show values way below actual area, because the attribute field assumes the project CRS (EPSG:3857). However, this CRS should remain unchanged as it is the same CRS used for the Bing basemap in the project. The layers in my project are projected using ESPG:4326. This should also remain unchanged as this allows the correct lat/lon to be displayed.

Note - when using the measurement tool or adding geometry attributes the correct area (or close to correct) can be displayed by calculating ellipsoidal area.

My project requires that the attribute fields are pre-determined, so the previously mentioned techniques do not seem viable solutions.

So, given that the project CRS is not suited for calculating area... is there any way to correctly calculate area in the attribute field of a QGIS 3.4.3 project with multiple CRS?

1 Answer 1

1

For measuring correctly the area, you need to project your data to a CRS suitable to your spatial extent, for example you can check which UTM zone covers your extent and re-project your data to it. Note that the default unit then is square meters.

So If you are just interested to keep displaying your Lat/Lon then create a new field in the Field Calculator and fill it with your geometry like that:geom_to_wkt( $geometry), in the case of polygons or lines, this will produce long strings of Coordinates, so not sure why would you to display them in this case!.

If you don't want to do that for some reason (like your data covers a huge area and projected coordinates won't be accurate anymore ), you could then add your data to PostGIS and create a Geography column, populate it with your data, then use ST_Area(geog), which will give you results in square meters as well.

4
  • Thanks muri. Can I ask how you check which UTM zone covers your extent?
    – Ryan Bell
    Jan 8, 2019 at 14:50
  • 1
    Update: found a solution using the following: y(transform($geometry, 'EPSG:3857', 'EPSG:4326'))
    – Ryan Bell
    Jan 8, 2019 at 14:57
  • 2
    OK, this means you chose Pseudo-Mercator as CRS. To calculate area just wrap your expression with area for your polygons: area(transform( $geometry , 'EPSG:xxxx', 'EPSG:yyyy')).
    – muri
    Jan 8, 2019 at 15:16
  • Also, you can calculate ellipsoidal distances and areas with the $lenght and $area expressions, if you choose an Ellipsoid (instead of None/Planimetric) in the project General Properties, regardless of the CRS of the layers or the project. Jan 8, 2019 at 15:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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