{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-boolean-contains/dist/cjs/index.cjs","../../index.ts"],"names":["lineString"],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-boolean-contains/dist/cjs/index.cjs","sourcesContent":[null,"import {\n  BBox,\n  Feature,\n  Geometry,\n  LineString,\n  MultiLineString,\n  MultiPoint,\n  MultiPolygon,\n  Point,\n  Polygon,\n  Position,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { booleanPointOnLine as isPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { getGeom } from \"@turf/invariant\";\nimport { feature, featureCollection, lineString } from \"@turf/helpers\";\nimport { lineSplit } from \"@turf/line-split\";\n\n/**\n * Tests whether geometry a contains geometry b.\n * The interiors of both geometries must intersect, and the interior and boundary of geometry b must not intersect the exterior of geometry a.\n * booleanContains(a, b) is equivalent to booleanWithin(b, a)\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanContains(line, point);\n * //=true\n */\nfunction booleanContains(\n  feature1: Feature<any> | Geometry,\n  feature2: Feature<any> | Geometry\n) {\n  const geom1 = getGeom(feature1);\n  const geom2 = getGeom(feature2);\n  const type1 = geom1.type;\n  const type2 = geom2.type;\n  const coords1 = geom1.coordinates;\n  const coords2 = geom2.coordinates;\n\n  switch (type1) {\n    case \"Point\":\n      switch (type2) {\n        case \"Point\":\n          return compareCoords(coords1, coords2);\n        default:\n          throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n      }\n    case \"MultiPoint\":\n      switch (type2) {\n        case \"Point\":\n          return isPointInMultiPoint(geom1, geom2);\n        case \"MultiPoint\":\n          return isMultiPointInMultiPoint(geom1, geom2);\n        default:\n          throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n      }\n    case \"LineString\":\n      switch (type2) {\n        case \"Point\":\n          return isPointOnLine(geom2, geom1, { ignoreEndVertices: true });\n        case \"LineString\":\n          return isLineOnLine(geom1, geom2);\n        case \"MultiPoint\":\n          return isMultiPointOnLine(geom1, geom2);\n        default:\n          throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n      }\n    case \"Polygon\":\n      switch (type2) {\n        case \"Point\":\n          return booleanPointInPolygon(geom2, geom1, { ignoreBoundary: true });\n        case \"LineString\":\n          return isLineInPoly(geom1, geom2);\n        case \"Polygon\":\n          return isPolyInPoly(geom1, geom2);\n        case \"MultiPoint\":\n          return isMultiPointInPoly(geom1, geom2);\n        case \"MultiPolygon\":\n          return isMultiPolyInPoly(geom1, geom2);\n        default:\n          throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n      }\n    case \"MultiPolygon\":\n      switch (type2) {\n        case \"Point\":\n          return isPointInMultiPolygon(geom1, geom2);\n        case \"MultiPoint\":\n          return isMultiPointInMultiPolygon(geom1, geom2);\n        case \"LineString\":\n          return isLineInMultiPolygon(geom1, geom2);\n        case \"MultiLineString\":\n          return isMultiLineStringInMultiPolygon(geom1, geom2);\n        case \"Polygon\":\n          return isPolygonInMultiPolygon(geom1, geom2);\n        case \"MultiPolygon\":\n          return isMultiPolygonInMultiPolygon(geom1, geom2);\n        default:\n          throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n      }\n    default:\n      throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n  }\n}\n\nfunction isPolygonInMultiPolygon(multiPolygon: MultiPolygon, polygon: Polygon) {\n  // Compute the polygon's bbox once instead of once per member polygon\n  const polygonBbox = calcBbox(polygon);\n  return multiPolygon.coordinates.some((coords) =>\n    isPolyInPoly({ type: \"Polygon\", coordinates: coords }, polygon, polygonBbox)\n  );\n}\n\n/**\n * Is Point inside MultiPolygon\n *\n * @private\n * @param {MultiPolygon} multiPolygon MultiPolygon geometry\n * @param {Point} point Point geometry\n * @returns {boolean} true if point is inside the interior of any polygon in the MultiPolygon\n */\nfunction isPointInMultiPolygon(multiPolygon: MultiPolygon, point: Point) {\n  // booleanPointInPolygon supports MultiPolygon natively - a single call is\n  // significantly cheaper than one wrapped call per member polygon\n  return booleanPointInPolygon(point, multiPolygon, { ignoreBoundary: true });\n}\n\n/**\n * Is MultiPoint inside MultiPolygon\n *\n * @private\n * @param {MultiPolygon} multiPolygon MultiPolygon geometry\n * @param {MultiPoint} multiPoint MultiPoint geometry\n * @returns {boolean} true if no point is outside the MultiPolygon and at least one point is in the interior of some polygon\n */\nfunction isMultiPointInMultiPolygon(\n  multiPolygon: MultiPolygon,\n  multiPoint: MultiPoint\n) {\n  let oneInside = false;\n  for (const coord of multiPoint.coordinates) {\n    // All points must be inside the MultiPolygon (boundary OK)\n    if (!booleanPointInPolygon(coord, multiPolygon)) {\n      return false;\n    }\n    // Track if at least one point is strictly in the interior\n    if (!oneInside) {\n      oneInside = booleanPointInPolygon(coord, multiPolygon, {\n        ignoreBoundary: true,\n      });\n    }\n  }\n  // At least one point must be in the interior (not just on boundary)\n  return oneInside;\n}\n\n/**\n * Is LineString inside MultiPolygon\n *\n * @private\n * @param {MultiPolygon} multiPolygon MultiPolygon geometry\n * @param {LineString} lineString LineString geometry\n * @returns {boolean} true if the LineString is fully contained within a single polygon of the MultiPolygon\n */\nfunction isLineInMultiPolygon(\n  multiPolygon: MultiPolygon,\n  lineString: LineString\n) {\n  return multiPolygon.coordinates.some((coords) =>\n    isLineInPoly({ type: \"Polygon\", coordinates: coords }, lineString)\n  );\n}\n\n/**\n * Is MultiLineString inside MultiPolygon\n *\n * @private\n * @param {MultiPolygon} multiPolygon MultiPolygon geometry\n * @param {MultiLineString} multiLineString MultiLineString geometry\n * @returns {boolean} true if no LineString has any part in the MultiPolygon's exterior (boundary OK) and at least one LineString has a segment in the interior of some polygon\n */\nfunction isMultiLineStringInMultiPolygon(\n  multiPolygon: MultiPolygon,\n  multiLineString: MultiLineString\n) {\n  let oneInterior = false;\n  for (const lineCoords of multiLineString.coordinates) {\n    const line: LineString = { type: \"LineString\", coordinates: lineCoords };\n    // Each line must not touch the exterior of any polygon it overlaps —\n    // lines lying entirely on a polygon's boundary are OK\n    let lineStatus: \"outside\" | \"boundary\" | \"interior\" = \"outside\";\n    for (const polyCoords of multiPolygon.coordinates) {\n      const status = lineInPolyStatus(\n        { type: \"Polygon\", coordinates: polyCoords },\n        line\n      );\n      if (status === \"interior\") {\n        lineStatus = status;\n        break;\n      }\n      if (status === \"boundary\") {\n        lineStatus = status;\n      }\n    }\n    if (lineStatus === \"outside\") {\n      return false;\n    }\n    // At least one line must have a segment strictly in some polygon's interior\n    if (lineStatus === \"interior\") {\n      oneInterior = true;\n    }\n  }\n  return oneInterior;\n}\n\n/**\n * Is MultiPolygon inside MultiPolygon\n *\n * @private\n * @param {MultiPolygon} multiPolygon1 MultiPolygon geometry (container)\n * @param {MultiPolygon} multiPolygon2 MultiPolygon geometry (contained)\n * @returns {boolean} true if every polygon of multiPolygon2 is fully contained within some single polygon of multiPolygon1\n */\nfunction isMultiPolygonInMultiPolygon(\n  multiPolygon1: MultiPolygon,\n  multiPolygon2: MultiPolygon\n) {\n  for (const poly2Coords of multiPolygon2.coordinates) {\n    const poly2: Polygon = { type: \"Polygon\", coordinates: poly2Coords };\n    // Compute the candidate polygon's bbox once instead of per member polygon\n    const poly2Bbox = calcBbox(poly2);\n    const polyInside = multiPolygon1.coordinates.some((poly1Coords) =>\n      isPolyInPoly(\n        { type: \"Polygon\", coordinates: poly1Coords },\n        poly2,\n        poly2Bbox\n      )\n    );\n    if (!polyInside) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction isMultiPolyInPoly(polygon: Polygon, multiPolygon: MultiPolygon) {\n  return multiPolygon.coordinates.every((coords) =>\n    isPolyInPoly(polygon, { type: \"Polygon\", coordinates: coords })\n  );\n}\n\nfunction isPointInMultiPoint(multiPoint: MultiPoint, pt: Point) {\n  let i;\n  let output = false;\n  for (i = 0; i < multiPoint.coordinates.length; i++) {\n    if (compareCoords(multiPoint.coordinates[i], pt.coordinates)) {\n      output = true;\n      break;\n    }\n  }\n  return output;\n}\n\nfunction isMultiPointInMultiPoint(\n  multiPoint1: MultiPoint,\n  multiPoint2: MultiPoint\n) {\n  for (const coord2 of multiPoint2.coordinates) {\n    let matchFound = false;\n    for (const coord1 of multiPoint1.coordinates) {\n      if (compareCoords(coord2, coord1)) {\n        matchFound = true;\n        break;\n      }\n    }\n    if (!matchFound) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction isMultiPointOnLine(lineString: LineString, multiPoint: MultiPoint) {\n  let haveFoundInteriorPoint = false;\n  for (const coord of multiPoint.coordinates) {\n    // Membership check first so points not on the line exit early\n    if (!isPointOnLine(coord, lineString)) {\n      return false;\n    }\n    // Only probe for an interior point until one has been found\n    if (\n      !haveFoundInteriorPoint &&\n      isPointOnLine(coord, lineString, { ignoreEndVertices: true })\n    ) {\n      haveFoundInteriorPoint = true;\n    }\n  }\n  return haveFoundInteriorPoint;\n}\n\nfunction isMultiPointInPoly(polygon: Polygon, multiPoint: MultiPoint) {\n  let oneInside = false;\n  for (const coord of multiPoint.coordinates) {\n    // All points must be inside polygon (boundary OK)\n    if (!booleanPointInPolygon(coord, polygon)) {\n      return false;\n    }\n    // Track if at least one point is strictly in the interior\n    if (!oneInside) {\n      oneInside = booleanPointInPolygon(coord, polygon, {\n        ignoreBoundary: true,\n      });\n    }\n  }\n  // At least one point must be in the interior (not just on boundary)\n  return oneInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n  let haveFoundInteriorPoint = false;\n  const coordinates = lineString2.coordinates;\n  for (let i = 0; i < coordinates.length; i++) {\n    const coords = coordinates[i];\n    // Membership check first so vertices not on the line exit early\n    if (!isPointOnLine(coords, lineString1)) {\n      return false;\n    }\n    // Only probe for an interior point until one has been found\n    if (!haveFoundInteriorPoint) {\n      if (isPointOnLine(coords, lineString1, { ignoreEndVertices: true })) {\n        haveFoundInteriorPoint = true;\n      } else if (i > 0) {\n        // A segment whose endpoints are both on lineString1 (e.g. lineString2's\n        // vertices coincide with lineString1's boundary) still shares interior\n        // with lineString1. Probe the segment midpoint so an interior overlap\n        // is detected even when no vertex of lineString2 is strictly interior.\n        const midpoint: Position = [\n          (coordinates[i - 1][0] + coords[0]) / 2,\n          (coordinates[i - 1][1] + coords[1]) / 2,\n        ];\n        if (isPointOnLine(midpoint, lineString1, { ignoreEndVertices: true })) {\n          haveFoundInteriorPoint = true;\n        }\n      }\n    }\n  }\n  return haveFoundInteriorPoint;\n}\n\nfunction splitLineIntoSegmentsOnPolygon(\n  linestring: LineString,\n  polygon: Polygon\n) {\n  const coords = linestring.coordinates;\n\n  const outputSegments: Feature<LineString>[] = [];\n\n  for (let i = 0; i < coords.length - 1; i++) {\n    const seg = lineString([coords[i], coords[i + 1]]);\n    const split = lineSplit(seg, feature(polygon));\n\n    if (split.features.length === 0) {\n      outputSegments.push(seg);\n    } else {\n      outputSegments.push(...split.features);\n    }\n  }\n\n  return featureCollection(outputSegments);\n}\n\nfunction isLineInPoly(polygon: Polygon, linestring: LineString) {\n  return lineInPolyStatus(polygon, linestring) === \"interior\";\n}\n\n/**\n * Determines how a LineString relates to a Polygon:\n * - \"outside\" if any part of the line lies in the polygon's exterior\n * - \"interior\" if no part lies in the exterior and at least one segment lies in the interior\n * - \"boundary\" if the entire line lies on the polygon's boundary\n *\n * @private\n * @param {Polygon} polygon Polygon geometry\n * @param {LineString} linestring LineString geometry\n * @returns {\"outside\"|\"boundary\"|\"interior\"} the line's relation to the polygon\n */\nfunction lineInPolyStatus(\n  polygon: Polygon,\n  linestring: LineString\n): \"outside\" | \"boundary\" | \"interior\" {\n  const polyBbox = calcBbox(polygon);\n  const lineBbox = calcBbox(linestring);\n\n  if (!doBBoxOverlap(polyBbox, lineBbox)) {\n    return \"outside\";\n  }\n\n  for (const coord of linestring.coordinates) {\n    if (!booleanPointInPolygon(coord, polygon)) {\n      return \"outside\";\n    }\n  }\n\n  let hasInteriorSegment = false;\n  // split intersecting segments and verify their inclusion\n  const lineSegments = splitLineIntoSegmentsOnPolygon(linestring, polygon);\n\n  for (const lineSegment of lineSegments.features) {\n    const midpoint = getMidpoint(\n      lineSegment.geometry.coordinates[0],\n      lineSegment.geometry.coordinates[1]\n    );\n\n    // make sure all segments do not intersect with polygon exterior\n    if (!booleanPointInPolygon(midpoint, polygon)) {\n      return \"outside\";\n    }\n\n    // track whether at least 1 segment intersects with the polygon's interior\n    if (\n      !hasInteriorSegment &&\n      booleanPointInPolygon(midpoint, polygon, { ignoreBoundary: true })\n    ) {\n      hasInteriorSegment = true;\n    }\n  }\n\n  return hasInteriorSegment ? \"interior\" : \"boundary\";\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Geometry|Feature<Polygon>} feature1 Polygon1\n * @param {Geometry|Feature<Polygon>} feature2 Polygon2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(\n  feature1: Feature<Polygon> | Polygon,\n  feature2: Feature<Polygon> | Polygon,\n  feature2Bbox?: BBox\n) {\n  // Handle Nulls\n  if (feature1.type === \"Feature\" && feature1.geometry === null) {\n    return false;\n  }\n  if (feature2.type === \"Feature\" && feature2.geometry === null) {\n    return false;\n  }\n\n  const poly1Bbox = calcBbox(feature1);\n  const poly2Bbox = feature2Bbox ?? calcBbox(feature2);\n  if (!doBBoxOverlap(poly1Bbox, poly2Bbox)) {\n    return false;\n  }\n\n  const poly1 = getGeom(feature1);\n  const coords = getGeom(feature2).coordinates;\n  for (const ring of coords) {\n    for (const coord of ring) {\n      if (!booleanPointInPolygon(coord, feature1)) {\n        return false;\n      }\n    }\n    // Having every vertex inside feature1 is not sufficient when feature1 is concave: an edge of\n    // feature2 can still cross feature1's exterior (e.g. through a notch) while all its vertices\n    // remain inside. Split each edge of feature2 on feature1's boundary and reject if any resulting\n    // sub-segment lies (via its midpoint) strictly in feature1's exterior (#2242).\n    const segments = splitLineIntoSegmentsOnPolygon(\n      { type: \"LineString\", coordinates: ring },\n      poly1\n    );\n    for (const segment of segments.features) {\n      const midpoint = getMidpoint(\n        segment.geometry.coordinates[0],\n        segment.geometry.coordinates[1]\n      );\n      if (\n        !booleanPointInPolygon(midpoint, feature1) &&\n        !isPointOnPolygonBoundary(midpoint, poly1)\n      ) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n// Distance under which a point is treated as lying on a polygon boundary,\n// expressed in the coordinate units of the input (degrees for WGS84 lng/lat).\n// GeoJSON coordinates are only meaningful to about 6 decimal places, roughly\n// 10 cm on the ground, per RFC 7946 section 11.2, so anything closer than this\n// to an edge is treated as coincident with it. This is a real distance, unlike\n// a raw cross-product epsilon which scales with edge length and coordinate\n// magnitude and so is not scale invariant.\n// https://datatracker.ietf.org/doc/html/rfc7946#section-11.2\nconst BOUNDARY_DISTANCE_TOLERANCE = 1e-6;\n\n/**\n * Shortest distance from a point to a line segment on the plane, in the\n * coordinate units of the inputs.\n *\n * @private\n * @param {Position} point point [x, y]\n * @param {Position} start segment start [x, y]\n * @param {Position} end segment end [x, y]\n * @returns {number} distance from the point to the segment\n */\nfunction pointToSegmentDistance(\n  point: Position,\n  start: Position,\n  end: Position\n): number {\n  const dx = end[0] - start[0];\n  const dy = end[1] - start[1];\n  const segmentLengthSquared = dx * dx + dy * dy;\n\n  // Project the point onto the segment, clamping to the endpoints. A\n  // zero-length segment collapses to its shared endpoint (t stays 0).\n  let t = 0;\n  if (segmentLengthSquared > 0) {\n    t =\n      ((point[0] - start[0]) * dx + (point[1] - start[1]) * dy) /\n      segmentLengthSquared;\n    t = Math.max(0, Math.min(1, t));\n  }\n\n  const closestX = start[0] + t * dx;\n  const closestY = start[1] + t * dy;\n  const offsetX = point[0] - closestX;\n  const offsetY = point[1] - closestY;\n  return Math.sqrt(offsetX * offsetX + offsetY * offsetY);\n}\n\n/**\n * Whether a point lies on the boundary of a polygon, within\n * BOUNDARY_DISTANCE_TOLERANCE.\n * Used to distinguish edges that run along the polygon boundary (allowed for containment) from\n * edges that cross into the polygon's exterior. The tolerance absorbs the floating-point\n * error introduced when splitting boundary-coincident edges, while staying far smaller than any\n * real excursion into the exterior.\n *\n * @private\n * @param {Position} point point [x, y]\n * @param {Polygon} polygon polygon geometry\n * @returns {boolean} true if the point lies on any ring of the polygon\n */\nfunction isPointOnPolygonBoundary(point: Position, polygon: Polygon): boolean {\n  return polygon.coordinates.some((ring) => {\n    for (let i = 0; i < ring.length - 1; i++) {\n      if (\n        pointToSegmentDistance(point, ring[i], ring[i + 1]) <=\n        BOUNDARY_DISTANCE_TOLERANCE\n      ) {\n        return true;\n      }\n    }\n    return false;\n  });\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n  if (bbox1[0] > bbox2[0]) {\n    return false;\n  }\n  if (bbox1[2] < bbox2[2]) {\n    return false;\n  }\n  if (bbox1[1] > bbox2[1]) {\n    return false;\n  }\n  if (bbox1[3] < bbox2[3]) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n  return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n  return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport {\n  booleanContains,\n  isPolygonInMultiPolygon,\n  isPointInMultiPoint,\n  isMultiPointInMultiPoint,\n  isMultiPointOnLine,\n  isMultiPointInPoly,\n  isLineOnLine,\n  isLineInPoly,\n  isPolyInPoly,\n  isMultiPolyInPoly,\n  doBBoxOverlap,\n  compareCoords,\n  getMidpoint,\n};\n\nexport default booleanContains;\n"]}