How to calculate polyarea in metres using latitude and longitude coordinates

I would like to know how I can calculate polyarea in metres from known latitude and longitude GPS coordinates. I have time data for 18 individuals and would like to know the area provided by the outermost individuals. I am currently using convhull to identify the outermost players and then using this to index into polyarea function. While this gives me an area, the result is in degrees at latitude and longitude are in degrees (e.g. I get an answer of 8.745314499722379e-07). I cannot simply use the distdim function as this provides a conversion for distances (e.g. converting the above area to metres using distdim = 0.0972m). Is there a way to overcome this or calculate the area in metres?

 Accepted Answer

"the result is in degrees at latitude and longitude are in degrees"
No, the result would be in degrees squared. But you would have the problem that degrees in one direction are not the same size as degrees in a different direction.
You cannot use polyarea for this because you are not working with a planar surface where Euclidean distances apply. You need to calculate surface area on the oblate ellipsoid or whatever world model you are using.
You can use areaint() for that: areaint() is specifically designed to take lat/long readings and calculate surface area on sphere or oblate sphereoid.

6 Comments

Thank you, this worked! Is it appropriate for me to just use the Earth's radius like in the link you attached?
It depends on the accuracy you want. The example showed a calculation for a representative radius of a sphere. If you are concerned with the effects of polar flattening, for example, then pass in a reference ellipsoid; see https://www.mathworks.com/help/map/ref/areaint.html
The GPS coordinates I have are from soccer players playing on a rectangular field in Australia. I would like to accurately measure the polygonal area created the outermost players on the field. How would I appropriately pass in a reference ellipsoid?
In that case, I suspect the error introduced by the curve of the Earth would be much less than the error in GPS coordinates.
http://www.davidsenesac.com/Information/line_of_sight.html calculates approximately 8 inches of curvature per mile. I see elsewhere that a competition soccer field is 110 m. If I have my calculations right, that would lead to a curvature of 1/2 inch on the length. The GPS coordinates, on the other hand, are likely at best 2 meter accuracy unless you are using survey grade. See https://gis.stackexchange.com/questions/43617/what-is-the-maximum-theoretical-accuracy-of-gps
Okay so you're saying that it is likely that the error from the units themselves will outweigh the error from the curvature of the earth?
If that is the case should I use areaint() with earths radius or just convhull?
areaint() since your inputs are in latitude and longitude, I would think.

Sign in to comment.

More Answers (1)

1 Comment

This doesn't really address the issue raised. As mentioned in the question, I could simply use the distdim function to convert lengths given in degrees to metres, however I need to find the area in metres squared.

Sign in to comment.

Products

Release

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!