"use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts var _explode = require('@turf/explode'); var _center = require('@turf/center'); var _nearestpoint = require('@turf/nearest-point'); var _booleanpointinpolygon = require('@turf/boolean-point-in-polygon'); var _helpers = require('@turf/helpers'); function pointOnFeature(geojson) { const fc = normalize(geojson); const cent = _center.center.call(void 0, fc); let onSurface = false; let i = 0; while (!onSurface && i < fc.features.length) { const geom = fc.features[i].geometry; let x, y, x1, y1, x2, y2; let onLine = false; if (geom.type === "Point") { if (cent.geometry.coordinates[0] === geom.coordinates[0] && cent.geometry.coordinates[1] === geom.coordinates[1]) { onSurface = true; } } else if (geom.type === "MultiPoint") { let onMultiPoint = false; let k = 0; while (!onMultiPoint && k < geom.coordinates.length) { if (cent.geometry.coordinates[0] === geom.coordinates[k][0] && cent.geometry.coordinates[1] === geom.coordinates[k][1]) { onSurface = true; onMultiPoint = true; } k++; } } else if (geom.type === "LineString") { let k = 0; while (!onLine && k < geom.coordinates.length - 1) { x = cent.geometry.coordinates[0]; y = cent.geometry.coordinates[1]; x1 = geom.coordinates[k][0]; y1 = geom.coordinates[k][1]; x2 = geom.coordinates[k + 1][0]; y2 = geom.coordinates[k + 1][1]; if (pointOnSegment(x, y, x1, y1, x2, y2)) { onLine = true; onSurface = true; } k++; } } else if (geom.type === "MultiLineString") { let j = 0; while (j < geom.coordinates.length) { onLine = false; let k = 0; const line = geom.coordinates[j]; while (!onLine && k < line.length - 1) { x = cent.geometry.coordinates[0]; y = cent.geometry.coordinates[1]; x1 = line[k][0]; y1 = line[k][1]; x2 = line[k + 1][0]; y2 = line[k + 1][1]; if (pointOnSegment(x, y, x1, y1, x2, y2)) { onLine = true; onSurface = true; } k++; } j++; } } else if (geom.type === "Polygon" || geom.type === "MultiPolygon") { if (_booleanpointinpolygon.booleanPointInPolygon.call(void 0, cent, geom)) { onSurface = true; } } i++; } if (onSurface) { return cent; } else { const vertices = _helpers.featureCollection.call(void 0, []); for (let f = 0; f < fc.features.length; f++) { vertices.features = vertices.features.concat( _explode.explode.call(void 0, fc.features[f]).features ); } return _helpers.point.call(void 0, _nearestpoint.nearestPoint.call(void 0, cent, vertices).geometry.coordinates); } } function normalize(geojson) { if (geojson.type !== "FeatureCollection") { if (geojson.type !== "Feature") { return _helpers.featureCollection.call(void 0, [_helpers.feature.call(void 0, geojson)]); } return _helpers.featureCollection.call(void 0, [geojson]); } return geojson; } function pointOnSegment(x, y, x1, y1, x2, y2) { const ab = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); const ap = Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); const pb = Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)); return ab === ap + pb; } var turf_point_on_feature_default = pointOnFeature; exports.default = turf_point_on_feature_default; exports.pointOnFeature = pointOnFeature; //# sourceMappingURL=index.cjs.map