isPointInside method
Determines if a point is inside
point
is the point to check, represented as a List<double>
containing
the longitude and latitude coordinates.
Returns true
if the point is inside the polygon; otherwise, false.
Implementation
bool isPointInside(List<double> point) {
var coords = <List<List<double>>>[];
var pt = convertToWebMercator(point[0], point[1]);
for (final ring in coordinates) {
final transformedRing = <List<double>>[];
for (final point in ring) {
final List<double> transformedPoint =
convertToWebMercator(point[0], point[1]);
transformedRing.add(transformedPoint);
}
coords.add(transformedRing);
}
var outer = coords.first;
bool inside = false;
for (int i = 0, j = outer.length - 1; i < outer.length; j = i++) {
if (((outer[i][1] > pt[1]) != (outer[j][1] > pt[1])) &&
(pt[0] <
(outer[j][0] - outer[i][0]) *
(pt[1] - outer[i][1]) /
(outer[j][1] - outer[i][1]) +
outer[i][0])) {
inside = !inside;
}
}
return inside;
}