| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp = Object.defineProperty;
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __spreadValues = (a, b) => {
- for (var prop in b || (b = {}))
- if (__hasOwnProp.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- if (__getOwnPropSymbols)
- for (var prop of __getOwnPropSymbols(b)) {
- if (__propIsEnum.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- }
- return a;
- };
- // index.ts
- var _bbox = require('@turf/bbox');
- var _area = require('@turf/area');
- var _booleanpointinpolygon = require('@turf/boolean-point-in-polygon');
- var _explode = require('@turf/explode');
- var _invariant = require('@turf/invariant');
- var _helpers = require('@turf/helpers');
- // lib/grid-to-matrix.js
- var _meta = require('@turf/meta');
- function gridToMatrix(grid, options) {
- options = options || {};
- if (!_helpers.isObject.call(void 0, options)) throw new Error("options is invalid");
- var zProperty = options.zProperty || "elevation";
- var flip = options.flip;
- var flags = options.flags;
- _invariant.collectionOf.call(void 0, grid, "Point", "input must contain Points");
- var pointsMatrix = sortPointsByLatLng(grid, flip);
- var matrix = [];
- for (var r = 0; r < pointsMatrix.length; r++) {
- var pointRow = pointsMatrix[r];
- var row = [];
- for (var c = 0; c < pointRow.length; c++) {
- var point = pointRow[c];
- if (point.properties[zProperty]) row.push(point.properties[zProperty]);
- else row.push(0);
- if (flags === true) point.properties.matrixPosition = [r, c];
- }
- matrix.push(row);
- }
- return matrix;
- }
- function sortPointsByLatLng(points, flip) {
- var pointsByLatitude = {};
- _meta.featureEach.call(void 0, points, function(point) {
- var lat = _invariant.getCoords.call(void 0, point)[1];
- if (!pointsByLatitude[lat]) pointsByLatitude[lat] = [];
- pointsByLatitude[lat].push(point);
- });
- var orderedRowsByLatitude = Object.keys(pointsByLatitude).map(function(lat) {
- var row = pointsByLatitude[lat];
- var rowOrderedByLongitude = row.sort(function(a, b) {
- return _invariant.getCoords.call(void 0, a)[0] - _invariant.getCoords.call(void 0, b)[0];
- });
- return rowOrderedByLongitude;
- });
- var pointMatrix = orderedRowsByLatitude.sort(function(a, b) {
- if (flip) return _invariant.getCoords.call(void 0, a[0])[1] - _invariant.getCoords.call(void 0, b[0])[1];
- else return _invariant.getCoords.call(void 0, b[0])[1] - _invariant.getCoords.call(void 0, a[0])[1];
- });
- return pointMatrix;
- }
- // index.ts
- var _marchingsquares = require('marchingsquares');
- function isobands(pointGrid, breaks, options) {
- options = options || {};
- if (!_helpers.isObject.call(void 0, options)) throw new Error("options is invalid");
- const zProperty = options.zProperty || "elevation";
- const commonProperties = options.commonProperties || {};
- const breaksProperties = options.breaksProperties || [];
- _invariant.collectionOf.call(void 0, pointGrid, "Point", "Input must contain Points");
- if (!breaks) throw new Error("breaks is required");
- if (!Array.isArray(breaks)) throw new Error("breaks is not an Array");
- if (!_helpers.isObject.call(void 0, commonProperties))
- throw new Error("commonProperties is not an Object");
- if (!Array.isArray(breaksProperties))
- throw new Error("breaksProperties is not an Array");
- const matrix = gridToMatrix(pointGrid, { zProperty, flip: true });
- let contours = createContourLines(matrix, breaks, zProperty);
- contours = rescaleContours(contours, matrix, pointGrid);
- const multipolygons = contours.map((contour, index) => {
- if (breaksProperties[index] && !_helpers.isObject.call(void 0, breaksProperties[index])) {
- throw new Error("Each mappedProperty is required to be an Object");
- }
- const contourProperties = __spreadValues(__spreadValues({}, commonProperties), breaksProperties[index]);
- contourProperties[zProperty] = contour[zProperty];
- const multiP = _helpers.multiPolygon.call(void 0,
- contour.groupedRings,
- contourProperties
- );
- return multiP;
- });
- return _helpers.featureCollection.call(void 0, multipolygons);
- }
- function createContourLines(matrix, breaks, property) {
- const contours = [];
- for (let i = 1; i < breaks.length; i++) {
- const lowerBand = +breaks[i - 1];
- const upperBand = +breaks[i];
- const isobandsCoords = _marchingsquares.isoBands.call(void 0, matrix, lowerBand, upperBand - lowerBand);
- const nestedRings = orderByArea(isobandsCoords);
- const groupedRings = groupNestedRings(nestedRings);
- contours.push({
- groupedRings,
- [property]: lowerBand + "-" + upperBand
- });
- }
- return contours;
- }
- function rescaleContours(contours, matrix, points) {
- const gridBbox = _bbox.bbox.call(void 0, points);
- const originalWidth = gridBbox[2] - gridBbox[0];
- const originalHeigth = gridBbox[3] - gridBbox[1];
- const x0 = gridBbox[0];
- const y0 = gridBbox[1];
- const matrixWidth = matrix[0].length - 1;
- const matrixHeight = matrix.length - 1;
- const scaleX = originalWidth / matrixWidth;
- const scaleY = originalHeigth / matrixHeight;
- return contours.map(function(contour) {
- contour.groupedRings = contour.groupedRings.map(
- function(lineRingSet) {
- return lineRingSet.map(function(lineRing) {
- return lineRing.map((point) => [
- point[0] * scaleX + x0,
- point[1] * scaleY + y0
- ]);
- });
- }
- );
- return contour;
- });
- }
- function orderByArea(ringsCoords) {
- const ringsWithArea = ringsCoords.map(function(coords) {
- return { ring: coords, area: _area.area.call(void 0, _helpers.polygon.call(void 0, [coords])) };
- });
- ringsWithArea.sort(function(a, b) {
- return b.area - a.area;
- });
- return ringsWithArea.map(function(x) {
- return x.ring;
- });
- }
- function groupNestedRings(orderedLinearRings) {
- const lrList = orderedLinearRings.map((lr) => {
- return { lrCoordinates: lr, grouped: false };
- });
- const groupedLinearRingsCoords = [];
- while (!allGrouped(lrList)) {
- for (let i = 0; i < lrList.length; i++) {
- if (!lrList[i].grouped) {
- const group = [];
- group.push(lrList[i].lrCoordinates);
- lrList[i].grouped = true;
- const outerMostPoly = _helpers.polygon.call(void 0, [lrList[i].lrCoordinates]);
- for (let j = i + 1; j < lrList.length; j++) {
- if (!lrList[j].grouped) {
- const lrPoly = _helpers.polygon.call(void 0, [lrList[j].lrCoordinates]);
- if (isInside(lrPoly, outerMostPoly)) {
- group.push(lrList[j].lrCoordinates);
- lrList[j].grouped = true;
- }
- }
- }
- groupedLinearRingsCoords.push(group);
- }
- }
- }
- return groupedLinearRingsCoords;
- }
- function isInside(testPolygon, targetPolygon) {
- const points = _explode.explode.call(void 0, testPolygon);
- for (let i = 0; i < points.features.length; i++) {
- if (!_booleanpointinpolygon.booleanPointInPolygon.call(void 0, points.features[i], targetPolygon)) {
- return false;
- }
- }
- return true;
- }
- function allGrouped(list) {
- for (let i = 0; i < list.length; i++) {
- if (list[i].grouped === false) {
- return false;
- }
- }
- return true;
- }
- var turf_isobands_default = isobands;
- exports.default = turf_isobands_default; exports.isobands = isobands;
- //# sourceMappingURL=index.cjs.map
|