campusMapContainsPoint function

bool campusMapContainsPoint(
  1. CampusMapPolygon polygon,
  2. CampusMapPoint point
)

Tests whether point lies inside the exterior and outside all polygon holes.

Implementation

bool campusMapContainsPoint(CampusMapPolygon polygon, CampusMapPoint point) {
  bool contains(List<CampusMapPoint> ring) {
    var inside = false;
    for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {
      final a = ring[i];
      final b = ring[j];
      if ((a.latitude > point.latitude) != (b.latitude > point.latitude) &&
          point.longitude <
              (b.longitude - a.longitude) *
                      (point.latitude - a.latitude) /
                      (b.latitude - a.latitude) +
                  a.longitude) {
        inside = !inside;
      }
    }
    return inside;
  }

  return polygon.rings.isNotEmpty &&
      contains(polygon.rings.first) &&
      !polygon.rings.skip(1).any(contains);
}