0

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?

0

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.

  • Thanks muri. Can I ask how you check which UTM zone covers your extent? – Ryan Bell Jan 8 at 14:50
  • 1
    Update: found a solution using the following: y(transform($geometry, 'EPSG:3857', 'EPSG:4326')) – Ryan Bell Jan 8 at 14:57
  • 1
    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 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. – Gabriel De Luca Jan 8 at 15:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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