{"version":3,"sources":["../../index.ts"],"sourcesContent":["import {\n BBox,\n Feature,\n Polygon,\n FeatureCollection,\n GeoJsonProperties,\n} from \"geojson\";\nimport { distance } from \"@turf/distance\";\nimport { intersect } from \"@turf/intersect\";\nimport { polygon, featureCollection, Units } from \"@turf/helpers\";\n\n/**\n * Creates a grid of triangular polygons.\n *\n * @function\n * @param {BBox} bbox extent of grid in [minX, minY, maxX, maxY] order\n * @param {number} cellSide dimension of each grid cell. Two triangles are created in each cell.\n * @param {Object} [options={}] Optional parameters\n * @param {Units} [options.units='kilometers'] used in calculating cellSide. Supports all valid Turf {@link https://github.com/Turfjs/turf/blob/master/packages/turf-helpers/README_UNITS.md Units}\n * @param {Feature} [options.mask] if passed a Polygon or MultiPolygon, the grid Points will be created only inside it\n * @param {Object} [options.properties={}] passed to each point of the grid\n * @returns {FeatureCollection} grid of polygons\n * @example\n * var bbox = [-95, 30 ,-85, 40];\n * var cellSide = 50;\n * var options = {units: 'miles'};\n *\n * var triangleGrid = turf.triangleGrid(bbox, cellSide, options);\n *\n * //addToMap\n * var addToMap = [triangleGrid];\n */\nfunction triangleGrid

(\n bbox: BBox,\n cellSide: number,\n options: {\n units?: Units;\n properties?: P;\n mask?: Feature;\n } = {}\n): FeatureCollection {\n // Containers\n var results: Feature[] = [];\n\n // Input Validation is being handled by Typescript\n\n // if (cellSide === null || cellSide === undefined) throw new Error('cellSide is required');\n // if (!isNumber(cellSide)) throw new Error('cellSide is invalid');\n // if (!bbox) throw new Error('bbox is required');\n // if (!Array.isArray(bbox)) throw new Error('bbox must be array');\n // if (bbox.length !== 4) throw new Error('bbox must contain 4 numbers');\n // if (mask && ['Polygon', 'MultiPolygon'].indexOf(getType(mask)) === -1) throw new Error('options.mask must be a (Multi)Polygon');\n\n // Main\n var xFraction =\n cellSide / distance([bbox[0], bbox[1]], [bbox[2], bbox[1]], options);\n var cellWidth = xFraction * (bbox[2] - bbox[0]);\n var yFraction =\n cellSide / distance([bbox[0], bbox[1]], [bbox[0], bbox[3]], options);\n var cellHeight = yFraction * (bbox[3] - bbox[1]);\n\n var xi = 0;\n var currentX = bbox[0];\n while (currentX <= bbox[2]) {\n var yi = 0;\n var currentY = bbox[1];\n while (currentY <= bbox[3]) {\n var cellTriangle1 = null;\n var cellTriangle2 = null;\n\n if (xi % 2 === 0 && yi % 2 === 0) {\n cellTriangle1 = polygon(\n [\n [\n [currentX, currentY],\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n cellTriangle2 = polygon(\n [\n [\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY + cellHeight],\n ],\n ],\n options.properties\n );\n } else if (xi % 2 === 0 && yi % 2 === 1) {\n cellTriangle1 = polygon(\n [\n [\n [currentX, currentY],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n cellTriangle2 = polygon(\n [\n [\n [currentX, currentY],\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n } else if (yi % 2 === 0 && xi % 2 === 1) {\n cellTriangle1 = polygon(\n [\n [\n [currentX, currentY],\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n cellTriangle2 = polygon(\n [\n [\n [currentX, currentY],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n } else if (yi % 2 === 1 && xi % 2 === 1) {\n cellTriangle1 = polygon(\n [\n [\n [currentX, currentY],\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY],\n ],\n ],\n options.properties\n );\n cellTriangle2 = polygon(\n [\n [\n [currentX, currentY + cellHeight],\n [currentX + cellWidth, currentY + cellHeight],\n [currentX + cellWidth, currentY],\n [currentX, currentY + cellHeight],\n ],\n ],\n options.properties\n );\n }\n if (options.mask) {\n if (intersect(featureCollection([options.mask, cellTriangle1!])))\n results.push(cellTriangle1!);\n if (intersect(featureCollection([options.mask, cellTriangle2!])))\n results.push(cellTriangle2!);\n } else {\n results.push(cellTriangle1!);\n results.push(cellTriangle2!);\n }\n\n currentY += cellHeight;\n yi++;\n }\n xi++;\n currentX += cellWidth;\n }\n return featureCollection(results);\n}\n\nexport { triangleGrid };\nexport default triangleGrid;\n"],"mappings":"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","names":[]}