123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 'use strict';
- var pointInPolygon = require('@turf/boolean-point-in-polygon');
- var helpers = require('@turf/helpers');
- var meta = require('@turf/meta');
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
- var pointInPolygon__default = /*#__PURE__*/_interopDefaultLegacy(pointInPolygon);
- /**
- * Finds {@link Points} or {@link MultiPoint} coordinate positions that fall within {@link (Multi)Polygon(s)}.
- *
- * @name pointsWithinPolygon
- * @param {Feature|FeatureCollection<Point|MultiPoint>} points Point(s) or MultiPoint(s) as input search
- * @param {FeatureCollection|Geometry|Feature<Polygon|MultiPolygon>} polygons (Multi)Polygon(s) to check if points are within
- * @returns {FeatureCollection<Point|MultiPoint>} Point(s) or MultiPoint(s) with positions that land within at least one polygon. The geometry type will match what was passsed in
- * @example
- * var points = turf.points([
- * [-46.6318, -23.5523],
- * [-46.6246, -23.5325],
- * [-46.6062, -23.5513],
- * [-46.663, -23.554],
- * [-46.643, -23.557]
- * ]);
- *
- * var searchWithin = turf.polygon([[
- * [-46.653,-23.543],
- * [-46.634,-23.5346],
- * [-46.613,-23.543],
- * [-46.614,-23.559],
- * [-46.631,-23.567],
- * [-46.653,-23.560],
- * [-46.653,-23.543]
- * ]]);
- *
- * var ptsWithin = turf.pointsWithinPolygon(points, searchWithin);
- *
- * //addToMap
- * var addToMap = [points, searchWithin, ptsWithin]
- * turf.featureEach(ptsWithin, function (currentFeature) {
- * currentFeature.properties['marker-size'] = 'large';
- * currentFeature.properties['marker-color'] = '#000';
- * });
- */
- function pointsWithinPolygon(points, polygons) {
- var results = [];
- meta.featureEach(points, function (point) {
- var contained = false;
- if (point.geometry.type === "Point") {
- meta.geomEach(polygons, function (polygon) {
- if (pointInPolygon__default['default'](point, polygon)) contained = true;
- });
- if (contained) {
- results.push(point);
- }
- } else if (point.geometry.type === "MultiPoint") {
- var pointsWithin = [];
- meta.geomEach(polygons, function (polygon) {
- meta.coordEach(point, function (pointCoord) {
- if (pointInPolygon__default['default'](pointCoord, polygon)) {
- contained = true;
- pointsWithin.push(pointCoord);
- }
- });
- });
- if (contained) {
- results.push(helpers.multiPoint(pointsWithin));
- }
- } else {
- throw new Error("Input geometry must be a Point or MultiPoint");
- }
- });
- return helpers.featureCollection(results);
- }
- module.exports = pointsWithinPolygon;
- module.exports.default = pointsWithinPolygon;
|