area property Null safety
The area pf the Polygon in square meters.
Implementation
double get area {
num rad(num value) => value * pi / 180;
double ringArea(LinearRing ring) {
// ignore: constant_identifier_names
const WGS84_RADIUS = 6378137;
double ringAreaSum = 0;
if (ring.coordinates.length > 2) {
for (int i = 0; i < coordinates.length; i++) {
var lowerIndex = i;
var middleIndex = i + 1;
var upperIndex = i + 2;
if (i == ring.coordinates.length - 2) {
lowerIndex = ring.coordinates.length - 2;
middleIndex = ring.coordinates.length - 1;
upperIndex = 0;
} else if (i == ring.coordinates.length - 1) {
lowerIndex = ring.coordinates.length - 1;
middleIndex = 0;
upperIndex = 1;
}
var p1 = ring.coordinates[lowerIndex];
var p2 = ring.coordinates[middleIndex];
var p3 = ring.coordinates[upperIndex];
ringAreaSum +=
(rad(p3.longitude) - rad(p1.longitude)) * sin(rad(p2.latitude));
}
ringAreaSum = ringAreaSum * WGS84_RADIUS * WGS84_RADIUS / 2;
}
return ringAreaSum;
}
double polygonArea(List<LinearRing> rings) {
double polyArea = 0;
if (rings.isNotEmpty) {
polyArea += ringArea(rings[0]).abs();
for (var hole in rings.getRange(1, coordinates.length)) {
polyArea -= ringArea(hole).abs();
}
}
return polyArea;
}
return polygonArea(coordinates);
}