{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-point-to-polygon-distance/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"AAAA;ACAA,uEAAsC;AAStC,mEAAoC;AACpC,sDAA8B;AAC9B,4CAAwB;AACxB,kCAA4B;AAC5B,wCAA+B;AAgBxB,SAAS,sBAAA,CACd,KAAA,EACA,qBAAA,EAIA,QAAA,EAGI,CAAC,CAAA,EACG;AAvCV,EAAA,IAAA,EAAA,EAAA,EAAA;AAwCE,EAAA,MAAM,OAAA,EAAA,CAAS,GAAA,EAAA,OAAA,CAAQ,MAAA,EAAA,GAAR,KAAA,EAAA,GAAA,EAAkB,UAAA;AACjC,EAAA,MAAM,MAAA,EAAA,CAAQ,GAAA,EAAA,OAAA,CAAQ,KAAA,EAAA,GAAR,KAAA,EAAA,GAAA,EAAiB,YAAA;AAE/B,EAAA,GAAA,CAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA;AAC/C,EAAA,GAAA,CAAI,CAAC,qBAAA;AACH,IAAA,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA;AAExD,EAAA,MAAM,KAAA,EAAO,gCAAA,qBAA6B,CAAA;AAE1C,EAAA,GAAA,CAAI,IAAA,CAAK,KAAA,IAAS,cAAA,EAAgB;AAChC,IAAA,MAAM,UAAA,EAAY,IAAA,CAAK,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,MAAA,EAAA,GACtC,sBAAA,CAAuB,KAAA,EAAO,8BAAA,MAAc,CAAA,EAAG,EAAE,MAAA,EAAQ,MAAM,CAAC;AAAA,IAClE,CAAA;AACA,IAAA,OACE,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,EAAA,EAAA,CAClC,0DAAA,KAAsB,EAAO,qBAAqB,EAAA,EAAI,CAAA,EAAA,EAAK,CAAA,CAAA;AAAA,EAEhE;AAEA,EAAA,GAAA,CAAI,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA,EAAG;AAE/B,IAAA,MAAM,CAAC,gBAAA,EAAkB,GAAG,iBAAiB,EAAA,EAAI,IAAA,CAAK,WAAA,CAAY,GAAA;AAAA,MAChE,CAAC,MAAA,EAAA,GACC,sBAAA,CAAuB,KAAA,EAAO,8BAAA,CAAS,MAAM,CAAC,CAAA,EAAG,EAAE,MAAA,EAAQ,MAAM,CAAC;AAAA,IACtE,CAAA;AACA,IAAA,GAAA,CAAI,iBAAA,GAAoB,CAAA,EAAG,OAAO,gBAAA;AAElC,IAAA,MAAM,yBAAA,EAA2B,IAAA,CAAK,GAAA,CAAI,GAAG,iBAAiB,CAAA;AAE9D,IAAA,GAAA,CAAI,yBAAA,EAA2B,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,CAAI,wBAAwB,CAAA;AAE1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,wBAAA,EAA0B,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAC,CAAA;AAAA,EACtE;AAEA,EAAA,MAAM,MAAA,EAAQ,0CAAA,IAAkB,CAAA;AAChC,EAAA,IAAI,YAAA,EAAc,QAAA;AAClB,EAAA,+BAAA,KAAY,EAAO,CAAC,OAAA,EAAA,GAAY;AAC9B,IAAA,YAAA,EAAc,IAAA,CAAK,GAAA;AAAA,MACjB,WAAA;AAAA,MACA,sDAAA,KAAoB,EAAO,OAAA,EAAgC;AAAA,QACzD,MAAA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,0DAAA,KAAsB,EAAO,IAAI,EAAA,EAAI,CAAC,YAAA,EAAc,WAAA;AAC7D;AAEA,IAAO,uCAAA,EAAQ,sBAAA;AD7Cf;AACE;AACA;AACF,kHAAC","file":"/home/runner/work/turf/turf/packages/turf-point-to-polygon-distance/dist/cjs/index.cjs","sourcesContent":[null,"import { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport {\n Feature,\n Point,\n Polygon,\n MultiPolygon,\n LineString,\n Position,\n} from \"geojson\";\nimport { pointToLineDistance } from \"@turf/point-to-line-distance\";\nimport { polygonToLine } from \"@turf/polygon-to-line\";\nimport { getGeom } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\nimport { polygon, Units } from \"@turf/helpers\";\n\n/**\n * Calculates the distance from a point to the edges of a polygon or multi-polygon.\n * Returns negative values for points inside the polygon.\n * Handles polygons with holes and multi-polygons.\n * A hole is treated as the exterior of the polygon.\n *\n * @param {Feature | Point | Position} point Input point\n * @param {Feature | Polygon | MultiPolygon} polygonOrMultiPolygon Input polygon or multipolygon\n * @param {Object} options Optional parameters\n * @param {Units} options.units Units of the result e.g. \"kilometers\", \"miles\", \"meters\"\n * @param {\"geodesic\" | \"planar\"} options.method Method of the result\n * @returns {number} Distance in meters (negative values for points inside the polygon)\n * @throws {Error} If input geometries are invalid\n */\nexport function pointToPolygonDistance(\n point: Feature | Point | Position,\n polygonOrMultiPolygon:\n | Feature\n | Polygon\n | MultiPolygon,\n options: {\n units?: Units;\n method?: \"geodesic\" | \"planar\";\n } = {}\n): number {\n const method = options.method ?? \"geodesic\";\n const units = options.units ?? \"kilometers\";\n // Input validation\n if (!point) throw new Error(\"point is required\");\n if (!polygonOrMultiPolygon)\n throw new Error(\"polygon or multi-polygon is required\");\n\n const geom = getGeom(polygonOrMultiPolygon);\n\n if (geom.type === \"MultiPolygon\") {\n const distances = geom.coordinates.map((coords) =>\n pointToPolygonDistance(point, polygon(coords), { method, units })\n );\n return (\n Math.min(...distances.map(Math.abs)) *\n (booleanPointInPolygon(point, polygonOrMultiPolygon) ? -1 : 1)\n );\n }\n\n if (geom.coordinates.length > 1) {\n // Has holes\n const [exteriorDistance, ...interiorDistances] = geom.coordinates.map(\n (coords) =>\n pointToPolygonDistance(point, polygon([coords]), { method, units })\n );\n if (exteriorDistance >= 0) return exteriorDistance;\n // point is inside the exterior polygon shape\n const smallestInteriorDistance = Math.min(...interiorDistances);\n // point is inside one of the holes?\n if (smallestInteriorDistance < 0) return Math.abs(smallestInteriorDistance);\n // find which is closer, the distance to the hole or the distance to the edge of the exterior\n return Math.min(smallestInteriorDistance, Math.abs(exteriorDistance));\n }\n // The actual distance operation - on a normal, hole-less polygon in meters\n const lines = polygonToLine(geom);\n let minDistance = Infinity;\n flattenEach(lines, (feature) => {\n minDistance = Math.min(\n minDistance,\n pointToLineDistance(point, feature as Feature, {\n method,\n units,\n })\n );\n });\n\n return booleanPointInPolygon(point, geom) ? -minDistance : minDistance;\n}\n\nexport default pointToPolygonDistance;\n"]}