{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-point-on-feature/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-point-on-feature/dist/cjs/index.cjs","sourcesContent":[null,"import type { Feature, Point } from \"geojson\";\nimport type { AllGeoJSON } from \"@turf/helpers\";\nimport { explode } from \"@turf/explode\";\nimport { center as centroid } from \"@turf/center\";\nimport { nearestPoint } from \"@turf/nearest-point\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { featureCollection, feature, point } from \"@turf/helpers\";\n\n/**\n * Takes a Feature or FeatureCollection and returns a {@link Point} guaranteed to be on the surface of the feature.\n *\n * * Given a {@link Polygon}, the point will be in the area of the polygon\n * * Given a {@link LineString}, the point will be along the string\n * * Given a {@link Point}, the point will the same as the input\n *\n * @function\n * @param {GeoJSON} geojson any Feature or FeatureCollection\n * @returns {Feature} a point on the surface of `input`\n * @example\n * var polygon = turf.polygon([[\n * [116, -36],\n * [131, -32],\n * [146, -43],\n * [155, -25],\n * [133, -9],\n * [111, -22],\n * [116, -36]\n * ]]);\n *\n * var pointOnPolygon = turf.pointOnFeature(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, pointOnPolygon];\n */\nfunction pointOnFeature(geojson: AllGeoJSON): Feature {\n // normalize\n const fc = normalize(geojson);\n\n // get centroid\n const cent = centroid(fc);\n\n // check to see if centroid is on surface\n let onSurface = false;\n let i = 0;\n while (!onSurface && i < fc.features.length) {\n const geom = fc.features[i].geometry;\n let x, y, x1, y1, x2, y2;\n let onLine = false;\n if (geom.type === \"Point\") {\n if (\n cent.geometry.coordinates[0] === geom.coordinates[0] &&\n cent.geometry.coordinates[1] === geom.coordinates[1]\n ) {\n onSurface = true;\n }\n } else if (geom.type === \"MultiPoint\") {\n let onMultiPoint = false;\n let k = 0;\n while (!onMultiPoint && k < geom.coordinates.length) {\n if (\n cent.geometry.coordinates[0] === geom.coordinates[k][0] &&\n cent.geometry.coordinates[1] === geom.coordinates[k][1]\n ) {\n onSurface = true;\n onMultiPoint = true;\n }\n k++;\n }\n } else if (geom.type === \"LineString\") {\n let k = 0;\n while (!onLine && k < geom.coordinates.length - 1) {\n x = cent.geometry.coordinates[0];\n y = cent.geometry.coordinates[1];\n x1 = geom.coordinates[k][0];\n y1 = geom.coordinates[k][1];\n x2 = geom.coordinates[k + 1][0];\n y2 = geom.coordinates[k + 1][1];\n if (pointOnSegment(x, y, x1, y1, x2, y2)) {\n onLine = true;\n onSurface = true;\n }\n k++;\n }\n } else if (geom.type === \"MultiLineString\") {\n let j = 0;\n while (j < geom.coordinates.length) {\n onLine = false;\n let k = 0;\n const line = geom.coordinates[j];\n while (!onLine && k < line.length - 1) {\n x = cent.geometry.coordinates[0];\n y = cent.geometry.coordinates[1];\n x1 = line[k][0];\n y1 = line[k][1];\n x2 = line[k + 1][0];\n y2 = line[k + 1][1];\n if (pointOnSegment(x, y, x1, y1, x2, y2)) {\n onLine = true;\n onSurface = true;\n }\n k++;\n }\n j++;\n }\n } else if (geom.type === \"Polygon\" || geom.type === \"MultiPolygon\") {\n if (booleanPointInPolygon(cent, geom)) {\n onSurface = true;\n }\n }\n i++;\n }\n if (onSurface) {\n return cent;\n } else {\n const vertices = featureCollection([]);\n for (let f = 0; f < fc.features.length; f++) {\n vertices.features = vertices.features.concat(\n explode(fc.features[f]).features\n );\n }\n // Remove distanceToPoint properties from nearestPoint()\n return point(nearestPoint(cent, vertices).geometry.coordinates);\n }\n}\n\n/**\n * Normalizes any GeoJSON to a FeatureCollection\n *\n * @private\n * @name normalize\n * @param {GeoJSON} geojson Any GeoJSON\n * @returns {FeatureCollection} FeatureCollection\n */\nfunction normalize(geojson: AllGeoJSON) {\n if (geojson.type !== \"FeatureCollection\") {\n if (geojson.type !== \"Feature\") {\n return featureCollection([feature(geojson)]);\n }\n return featureCollection([geojson]);\n }\n return geojson;\n}\n\nfunction pointOnSegment(\n x: number,\n y: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number\n) {\n const ab = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ap = Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n const pb = Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y));\n return ab === ap + pb;\n}\n\nexport { pointOnFeature };\nexport default pointOnFeature;\n"]}