isPointInside method

bool isPointInside(
  1. List<double> point
)

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;
}