@turf/transform-scale 7.1.0-alpha.7 → 7.1.0-alpha.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,38 +4,40 @@
4
4
 
5
5
  ## transformScale
6
6
 
7
- Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger).
8
- If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature.
7
+ Scale GeoJSON objects from a given point by a scaling factor e.g. factor=2
8
+ would make each object 200% larger.
9
+ If a FeatureCollection is provided, the origin point will be calculated
10
+ based on each individual feature *unless* an exact
9
11
 
10
12
  ### Parameters
11
13
 
12
- * `geojson` **[GeoJSON][1]** GeoJSON to be scaled
13
- * `factor` **[number][2]** of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.
14
- * `options` **[Object][3]** Optional parameters (optional, default `{}`)
14
+ * `geojson` **([GeoJSON][1] | [GeometryCollection][2])** objects to be scaled
15
+ * `factor` **[number][3]** of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.
16
+ * `options` **[Object][4]** Optional parameters (optional, default `{}`)
15
17
 
16
- * `options.origin` **([string][4] | [Coord][5])** Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid) (optional, default `'centroid'`)
17
- * `options.mutate` **[boolean][6]** allows GeoJSON input to be mutated (significant performance increase if true) (optional, default `false`)
18
+ * `options.origin` **(Corners | [Coord][5])** Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid) (optional, default `'centroid'`)
19
+ * `options.mutate` **[boolean][6]** allows GeoJSON input to be mutated (significant performance improvement if true) (optional, default `false`)
18
20
 
19
21
  ### Examples
20
22
 
21
23
  ```javascript
22
- var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);
23
- var scaledPoly = turf.transformScale(poly, 3);
24
+ const poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);
25
+ const scaledPoly = turf.transformScale(poly, 3);
24
26
 
25
27
  //addToMap
26
- var addToMap = [poly, scaledPoly];
28
+ const addToMap = [poly, scaledPoly];
27
29
  scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};
28
30
  ```
29
31
 
30
- Returns **[GeoJSON][1]** scaled GeoJSON
32
+ Returns **([GeoJSON][1] | [GeometryCollection][2])** scaled GeoJSON
31
33
 
32
34
  [1]: https://tools.ietf.org/html/rfc7946#section-3
33
35
 
34
- [2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
36
+ [2]: https://tools.ietf.org/html/rfc7946#section-3.1.8
35
37
 
36
- [3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
38
+ [3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
37
39
 
38
- [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
40
+ [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
39
41
 
40
42
  [5]: https://tools.ietf.org/html/rfc7946#section-3.1.1
41
43
 
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.js
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
2
2
  var _clone = require('@turf/clone');
3
3
  var _center = require('@turf/center');
4
4
  var _centroid = require('@turf/centroid');
@@ -13,33 +13,39 @@ function transformScale(geojson, factor, options) {
13
13
  options = options || {};
14
14
  if (!_helpers.isObject.call(void 0, options))
15
15
  throw new Error("options is invalid");
16
- var origin = options.origin;
17
- var mutate = options.mutate;
16
+ const origin = options.origin || "centroid";
17
+ const mutate = options.mutate || false;
18
18
  if (!geojson)
19
19
  throw new Error("geojson required");
20
20
  if (typeof factor !== "number" || factor <= 0)
21
21
  throw new Error("invalid factor");
22
- var originIsPoint = Array.isArray(origin) || typeof origin === "object";
22
+ const originIsPoint = Array.isArray(origin) || typeof origin === "object";
23
23
  if (mutate !== true)
24
24
  geojson = _clone.clone.call(void 0, geojson);
25
25
  if (geojson.type === "FeatureCollection" && !originIsPoint) {
26
26
  _meta.featureEach.call(void 0, geojson, function(feature, index) {
27
- geojson.features[index] = scale(feature, factor, origin);
27
+ geojson.features[index] = scale(
28
+ feature,
29
+ factor,
30
+ origin
31
+ );
28
32
  });
29
33
  return geojson;
30
34
  }
31
35
  return scale(geojson, factor, origin);
32
36
  }
33
37
  function scale(feature, factor, origin) {
34
- var isPoint = _invariant.getType.call(void 0, feature) === "Point";
35
- origin = defineOrigin(feature, origin);
38
+ const isPoint = _invariant.getType.call(void 0, feature) === "Point";
39
+ const originCoord = defineOrigin(feature, origin);
36
40
  if (factor === 1 || isPoint)
37
41
  return feature;
38
42
  _meta.coordEach.call(void 0, feature, function(coord) {
39
- var originalDistance = _rhumbdistance.rhumbDistance.call(void 0, origin, coord);
40
- var bearing = _rhumbbearing.rhumbBearing.call(void 0, origin, coord);
41
- var newDistance = originalDistance * factor;
42
- var newCoord = _invariant.getCoords.call(void 0, _rhumbdestination.rhumbDestination.call(void 0, origin, newDistance, bearing));
43
+ const originalDistance = _rhumbdistance.rhumbDistance.call(void 0, originCoord, coord);
44
+ const bearing = _rhumbbearing.rhumbBearing.call(void 0, originCoord, coord);
45
+ const newDistance = originalDistance * factor;
46
+ const newCoord = _invariant.getCoords.call(void 0,
47
+ _rhumbdestination.rhumbDestination.call(void 0, originCoord, newDistance, bearing)
48
+ );
43
49
  coord[0] = newCoord[0];
44
50
  coord[1] = newCoord[1];
45
51
  if (coord.length === 3)
@@ -53,11 +59,11 @@ function defineOrigin(geojson, origin) {
53
59
  origin = "centroid";
54
60
  if (Array.isArray(origin) || typeof origin === "object")
55
61
  return _invariant.getCoord.call(void 0, origin);
56
- var bbox = geojson.bbox ? geojson.bbox : _bbox.bbox.call(void 0, geojson, { recalculate: true });
57
- var west = bbox[0];
58
- var south = bbox[1];
59
- var east = bbox[2];
60
- var north = bbox[3];
62
+ const bbox = geojson.bbox ? geojson.bbox : _bbox.bbox.call(void 0, geojson, { recompute: true });
63
+ const west = bbox[0];
64
+ const south = bbox[1];
65
+ const east = bbox[2];
66
+ const north = bbox[3];
61
67
  switch (origin) {
62
68
  case "sw":
63
69
  case "southwest":
@@ -1 +1 @@
1
- {"version":3,"sources":["../../index.js"],"names":[],"mappings":"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","sourcesContent":["import { clone } from \"@turf/clone\";\nimport { center } from \"@turf/center\";\nimport { centroid } from \"@turf/centroid\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { rhumbBearing } from \"@turf/rhumb-bearing\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, isObject } from \"@turf/helpers\";\nimport { getCoord, getCoords, getType } from \"@turf/invariant\";\n\n/**\n * Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger).\n * If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature.\n *\n * @name transformScale\n * @param {GeoJSON} geojson GeoJSON to be scaled\n * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.\n * @param {Object} [options={}] Optional parameters\n * @param {string|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} scaled GeoJSON\n * @example\n * var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * var scaledPoly = turf.transformScale(poly, 3);\n *\n * //addToMap\n * var addToMap = [poly, scaledPoly];\n * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformScale(geojson, factor, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var origin = options.origin;\n var mutate = options.mutate;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor <= 0)\n throw new Error(\"invalid factor\");\n var originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n // Scale each Feature separately\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n featureEach(geojson, function (feature, index) {\n geojson.features[index] = scale(feature, factor, origin);\n });\n return geojson;\n }\n // Scale Feature/Geometry\n return scale(geojson, factor, origin);\n}\n\n/**\n * Scale Feature/Geometry\n *\n * @private\n * @param {Feature|Geometry} feature GeoJSON Feature/Geometry\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {string|Coord} [origin=\"centroid\"] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @returns {Feature|Geometry} scaled GeoJSON Feature/Geometry\n */\nfunction scale(feature, factor, origin) {\n // Default params\n var isPoint = getType(feature) === \"Point\";\n origin = defineOrigin(feature, origin);\n\n // Shortcut no-scaling\n if (factor === 1 || isPoint) return feature;\n\n // Scale each coordinate\n coordEach(feature, function (coord) {\n var originalDistance = rhumbDistance(origin, coord);\n var bearing = rhumbBearing(origin, coord);\n var newDistance = originalDistance * factor;\n var newCoord = getCoords(rhumbDestination(origin, newDistance, bearing));\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n\n delete feature.bbox;\n\n return feature;\n}\n\n/**\n * Define Origin\n *\n * @private\n * @param {GeoJSON} geojson GeoJSON\n * @param {string|Coord} origin sw/se/nw/ne/center/centroid\n * @returns {Feature<Point>} Point origin\n */\nfunction defineOrigin(geojson, origin) {\n // Default params\n if (origin === undefined || origin === null) origin = \"centroid\";\n\n // Input Coord\n if (Array.isArray(origin) || typeof origin === \"object\")\n return getCoord(origin);\n\n // Define BBox\n var bbox = geojson.bbox\n ? geojson.bbox\n : turfBBox(geojson, { recalculate: true });\n var west = bbox[0];\n var south = bbox[1];\n var east = bbox[2];\n var north = bbox[3];\n\n switch (origin) {\n case \"sw\":\n case \"southwest\":\n case \"westsouth\":\n case \"bottomleft\":\n return point([west, south]);\n case \"se\":\n case \"southeast\":\n case \"eastsouth\":\n case \"bottomright\":\n return point([east, south]);\n case \"nw\":\n case \"northwest\":\n case \"westnorth\":\n case \"topleft\":\n return point([west, north]);\n case \"ne\":\n case \"northeast\":\n case \"eastnorth\":\n case \"topright\":\n return point([east, north]);\n case \"center\":\n return center(geojson);\n case undefined:\n case null:\n case \"centroid\":\n return centroid(geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n}\n\nexport { transformScale };\nexport default transformScale;\n"]}
1
+ {"version":3,"sources":["../../index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Corners, Coord } from \"@turf/helpers\";\nimport { FeatureCollection, GeoJSON, GeometryCollection } from \"geojson\";\nimport { clone } from \"@turf/clone\";\nimport { center } from \"@turf/center\";\nimport { centroid } from \"@turf/centroid\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { rhumbBearing } from \"@turf/rhumb-bearing\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, isObject } from \"@turf/helpers\";\nimport { getCoord, getCoords, getType } from \"@turf/invariant\";\n\n/**\n * Scale GeoJSON objects from a given point by a scaling factor e.g. factor=2\n * would make each object 200% larger.\n * If a FeatureCollection is provided, the origin point will be calculated\n * based on each individual feature _unless_ an exact\n *\n * @name transformScale\n * @param {GeoJSON|GeometryCollection} geojson objects to be scaled\n * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.\n * @param {Object} [options={}] Optional parameters\n * @param {Corners|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance improvement if true)\n * @returns {GeoJSON|GeometryCollection} scaled GeoJSON\n * @example\n * const poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * const scaledPoly = turf.transformScale(poly, 3);\n *\n * //addToMap\n * const addToMap = [poly, scaledPoly];\n * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformScale<T extends GeoJSON | GeometryCollection>(\n geojson: T,\n factor: number,\n options?: {\n origin?: Corners | Coord;\n mutate?: boolean;\n }\n): T {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const origin = options.origin || \"centroid\";\n const mutate = options.mutate || false;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor <= 0)\n throw new Error(\"invalid factor\");\n const originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n // Scale each Feature separately if a feature collection AND the user didn't\n // pass a single explicit point to scale the whole collection from.\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n featureEach(geojson, function (feature, index) {\n // The type guard above is not recognised in the callback so we have to\n // cast to accept responsibility.\n (geojson as FeatureCollection).features[index] = scale(\n feature,\n factor,\n origin\n );\n });\n return geojson;\n }\n // Scale Feature/Geometry\n return scale(geojson, factor, origin);\n}\n\n/**\n * Scale Feature/Geometry\n *\n * @private\n * @param {GeoJSON|GeometryCollection} feature feature or geometry collection to scale\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {Corners|Coord} [origin=\"centroid\"] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @returns {GeoJSON|GeometryCollection} scaled GeoJSON Feature/Geometry\n */\nfunction scale<T extends GeoJSON | GeometryCollection>(\n feature: T,\n factor: number,\n origin: Corners | Coord\n): T {\n // Default params\n const isPoint = getType(feature) === \"Point\";\n // Work with a Coord equivalent of the origin from here on.\n const originCoord: Coord = defineOrigin(feature, origin);\n\n // Shortcut no-scaling\n if (factor === 1 || isPoint) return feature;\n\n // Scale each coordinate\n coordEach(feature, function (coord) {\n const originalDistance = rhumbDistance(originCoord, coord);\n const bearing = rhumbBearing(originCoord, coord);\n const newDistance = originalDistance * factor;\n const newCoord = getCoords(\n rhumbDestination(originCoord, newDistance, bearing)\n );\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n\n delete feature.bbox;\n\n return feature;\n}\n\n/**\n * Define Origin\n *\n * @private\n * @param {GeoJSON|GeometryCollection} geojson GeoJSON\n * @param {Corners|Coord} origin sw/se/nw/ne/center/centroid\n * @returns {Feature<Point>} Point origin\n */\nfunction defineOrigin(\n geojson: GeoJSON | GeometryCollection,\n origin: Corners | Coord\n): Coord {\n // Default params\n if (origin === undefined || origin === null) origin = \"centroid\";\n\n // Input Coord\n if (Array.isArray(origin) || typeof origin === \"object\")\n return getCoord(origin);\n\n // Define BBox\n const bbox = geojson.bbox\n ? geojson.bbox\n : turfBBox(geojson, { recompute: true });\n const west = bbox[0];\n const south = bbox[1];\n const east = bbox[2];\n const north = bbox[3];\n\n // Having to disable eslint below for lines which fail the no-fallthrough\n // rule, though only because of the ts-expect-error rules. Once we remove\n // southeast, bottomright, rightbottom, etc we should be able to remove all\n // these supressions.\n /* eslint-disable no-fallthrough */\n switch (origin) {\n case \"sw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomleft\":\n return point([west, south]);\n case \"se\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomright\":\n return point([east, south]);\n case \"nw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topleft\":\n return point([west, north]);\n case \"ne\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topright\":\n return point([east, north]);\n case \"center\":\n return center(geojson);\n case undefined:\n case null:\n case \"centroid\":\n return centroid(geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n /* eslint-enable no-fallthrough */\n}\n\nexport { transformScale };\nexport default transformScale;\n"]}
@@ -1,15 +1,30 @@
1
- import { AllGeoJSON, Corners, Coord } from '@turf/helpers';
1
+ import { Corners, Coord } from '@turf/helpers';
2
+ import { GeoJSON, GeometryCollection } from 'geojson';
2
3
 
3
4
  /**
4
- * http://turfjs.org/docs/#transformscale
5
+ * Scale GeoJSON objects from a given point by a scaling factor e.g. factor=2
6
+ * would make each object 200% larger.
7
+ * If a FeatureCollection is provided, the origin point will be calculated
8
+ * based on each individual feature _unless_ an exact
9
+ *
10
+ * @name transformScale
11
+ * @param {GeoJSON|GeometryCollection} geojson objects to be scaled
12
+ * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.
13
+ * @param {Object} [options={}] Optional parameters
14
+ * @param {Corners|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)
15
+ * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance improvement if true)
16
+ * @returns {GeoJSON|GeometryCollection} scaled GeoJSON
17
+ * @example
18
+ * const poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);
19
+ * const scaledPoly = turf.transformScale(poly, 3);
20
+ *
21
+ * //addToMap
22
+ * const addToMap = [poly, scaledPoly];
23
+ * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};
5
24
  */
6
- declare function transformScale<T extends AllGeoJSON>(
7
- geojson: T,
8
- factor: number,
9
- options?: {
25
+ declare function transformScale<T extends GeoJSON | GeometryCollection>(geojson: T, factor: number, options?: {
10
26
  origin?: Corners | Coord;
11
27
  mutate?: boolean;
12
- }
13
- ): T;
28
+ }): T;
14
29
 
15
30
  export { transformScale as default, transformScale };
@@ -1,15 +1,30 @@
1
- import { AllGeoJSON, Corners, Coord } from '@turf/helpers';
1
+ import { Corners, Coord } from '@turf/helpers';
2
+ import { GeoJSON, GeometryCollection } from 'geojson';
2
3
 
3
4
  /**
4
- * http://turfjs.org/docs/#transformscale
5
+ * Scale GeoJSON objects from a given point by a scaling factor e.g. factor=2
6
+ * would make each object 200% larger.
7
+ * If a FeatureCollection is provided, the origin point will be calculated
8
+ * based on each individual feature _unless_ an exact
9
+ *
10
+ * @name transformScale
11
+ * @param {GeoJSON|GeometryCollection} geojson objects to be scaled
12
+ * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.
13
+ * @param {Object} [options={}] Optional parameters
14
+ * @param {Corners|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)
15
+ * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance improvement if true)
16
+ * @returns {GeoJSON|GeometryCollection} scaled GeoJSON
17
+ * @example
18
+ * const poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);
19
+ * const scaledPoly = turf.transformScale(poly, 3);
20
+ *
21
+ * //addToMap
22
+ * const addToMap = [poly, scaledPoly];
23
+ * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};
5
24
  */
6
- declare function transformScale<T extends AllGeoJSON>(
7
- geojson: T,
8
- factor: number,
9
- options?: {
25
+ declare function transformScale<T extends GeoJSON | GeometryCollection>(geojson: T, factor: number, options?: {
10
26
  origin?: Corners | Coord;
11
27
  mutate?: boolean;
12
- }
13
- ): T;
28
+ }): T;
14
29
 
15
30
  export { transformScale as default, transformScale };
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // index.js
1
+ // index.ts
2
2
  import { clone } from "@turf/clone";
3
3
  import { center } from "@turf/center";
4
4
  import { centroid } from "@turf/centroid";
@@ -13,33 +13,39 @@ function transformScale(geojson, factor, options) {
13
13
  options = options || {};
14
14
  if (!isObject(options))
15
15
  throw new Error("options is invalid");
16
- var origin = options.origin;
17
- var mutate = options.mutate;
16
+ const origin = options.origin || "centroid";
17
+ const mutate = options.mutate || false;
18
18
  if (!geojson)
19
19
  throw new Error("geojson required");
20
20
  if (typeof factor !== "number" || factor <= 0)
21
21
  throw new Error("invalid factor");
22
- var originIsPoint = Array.isArray(origin) || typeof origin === "object";
22
+ const originIsPoint = Array.isArray(origin) || typeof origin === "object";
23
23
  if (mutate !== true)
24
24
  geojson = clone(geojson);
25
25
  if (geojson.type === "FeatureCollection" && !originIsPoint) {
26
26
  featureEach(geojson, function(feature, index) {
27
- geojson.features[index] = scale(feature, factor, origin);
27
+ geojson.features[index] = scale(
28
+ feature,
29
+ factor,
30
+ origin
31
+ );
28
32
  });
29
33
  return geojson;
30
34
  }
31
35
  return scale(geojson, factor, origin);
32
36
  }
33
37
  function scale(feature, factor, origin) {
34
- var isPoint = getType(feature) === "Point";
35
- origin = defineOrigin(feature, origin);
38
+ const isPoint = getType(feature) === "Point";
39
+ const originCoord = defineOrigin(feature, origin);
36
40
  if (factor === 1 || isPoint)
37
41
  return feature;
38
42
  coordEach(feature, function(coord) {
39
- var originalDistance = rhumbDistance(origin, coord);
40
- var bearing = rhumbBearing(origin, coord);
41
- var newDistance = originalDistance * factor;
42
- var newCoord = getCoords(rhumbDestination(origin, newDistance, bearing));
43
+ const originalDistance = rhumbDistance(originCoord, coord);
44
+ const bearing = rhumbBearing(originCoord, coord);
45
+ const newDistance = originalDistance * factor;
46
+ const newCoord = getCoords(
47
+ rhumbDestination(originCoord, newDistance, bearing)
48
+ );
43
49
  coord[0] = newCoord[0];
44
50
  coord[1] = newCoord[1];
45
51
  if (coord.length === 3)
@@ -53,11 +59,11 @@ function defineOrigin(geojson, origin) {
53
59
  origin = "centroid";
54
60
  if (Array.isArray(origin) || typeof origin === "object")
55
61
  return getCoord(origin);
56
- var bbox = geojson.bbox ? geojson.bbox : turfBBox(geojson, { recalculate: true });
57
- var west = bbox[0];
58
- var south = bbox[1];
59
- var east = bbox[2];
60
- var north = bbox[3];
62
+ const bbox = geojson.bbox ? geojson.bbox : turfBBox(geojson, { recompute: true });
63
+ const west = bbox[0];
64
+ const south = bbox[1];
65
+ const east = bbox[2];
66
+ const north = bbox[3];
61
67
  switch (origin) {
62
68
  case "sw":
63
69
  case "southwest":
@@ -1 +1 @@
1
- {"version":3,"sources":["../../index.js"],"sourcesContent":["import { clone } from \"@turf/clone\";\nimport { center } from \"@turf/center\";\nimport { centroid } from \"@turf/centroid\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { rhumbBearing } from \"@turf/rhumb-bearing\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, isObject } from \"@turf/helpers\";\nimport { getCoord, getCoords, getType } from \"@turf/invariant\";\n\n/**\n * Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger).\n * If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature.\n *\n * @name transformScale\n * @param {GeoJSON} geojson GeoJSON to be scaled\n * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.\n * @param {Object} [options={}] Optional parameters\n * @param {string|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} scaled GeoJSON\n * @example\n * var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * var scaledPoly = turf.transformScale(poly, 3);\n *\n * //addToMap\n * var addToMap = [poly, scaledPoly];\n * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformScale(geojson, factor, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var origin = options.origin;\n var mutate = options.mutate;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor <= 0)\n throw new Error(\"invalid factor\");\n var originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n // Scale each Feature separately\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n featureEach(geojson, function (feature, index) {\n geojson.features[index] = scale(feature, factor, origin);\n });\n return geojson;\n }\n // Scale Feature/Geometry\n return scale(geojson, factor, origin);\n}\n\n/**\n * Scale Feature/Geometry\n *\n * @private\n * @param {Feature|Geometry} feature GeoJSON Feature/Geometry\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {string|Coord} [origin=\"centroid\"] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @returns {Feature|Geometry} scaled GeoJSON Feature/Geometry\n */\nfunction scale(feature, factor, origin) {\n // Default params\n var isPoint = getType(feature) === \"Point\";\n origin = defineOrigin(feature, origin);\n\n // Shortcut no-scaling\n if (factor === 1 || isPoint) return feature;\n\n // Scale each coordinate\n coordEach(feature, function (coord) {\n var originalDistance = rhumbDistance(origin, coord);\n var bearing = rhumbBearing(origin, coord);\n var newDistance = originalDistance * factor;\n var newCoord = getCoords(rhumbDestination(origin, newDistance, bearing));\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n\n delete feature.bbox;\n\n return feature;\n}\n\n/**\n * Define Origin\n *\n * @private\n * @param {GeoJSON} geojson GeoJSON\n * @param {string|Coord} origin sw/se/nw/ne/center/centroid\n * @returns {Feature<Point>} Point origin\n */\nfunction defineOrigin(geojson, origin) {\n // Default params\n if (origin === undefined || origin === null) origin = \"centroid\";\n\n // Input Coord\n if (Array.isArray(origin) || typeof origin === \"object\")\n return getCoord(origin);\n\n // Define BBox\n var bbox = geojson.bbox\n ? geojson.bbox\n : turfBBox(geojson, { recalculate: true });\n var west = bbox[0];\n var south = bbox[1];\n var east = bbox[2];\n var north = bbox[3];\n\n switch (origin) {\n case \"sw\":\n case \"southwest\":\n case \"westsouth\":\n case \"bottomleft\":\n return point([west, south]);\n case \"se\":\n case \"southeast\":\n case \"eastsouth\":\n case \"bottomright\":\n return point([east, south]);\n case \"nw\":\n case \"northwest\":\n case \"westnorth\":\n case \"topleft\":\n return point([west, north]);\n case \"ne\":\n case \"northeast\":\n case \"eastnorth\":\n case \"topright\":\n return point([east, north]);\n case \"center\":\n return center(geojson);\n case undefined:\n case null:\n case \"centroid\":\n return centroid(geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n}\n\nexport { transformScale };\nexport default transformScale;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../index.ts"],"sourcesContent":["import { Corners, Coord } from \"@turf/helpers\";\nimport { FeatureCollection, GeoJSON, GeometryCollection } from \"geojson\";\nimport { clone } from \"@turf/clone\";\nimport { center } from \"@turf/center\";\nimport { centroid } from \"@turf/centroid\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { rhumbBearing } from \"@turf/rhumb-bearing\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, isObject } from \"@turf/helpers\";\nimport { getCoord, getCoords, getType } from \"@turf/invariant\";\n\n/**\n * Scale GeoJSON objects from a given point by a scaling factor e.g. factor=2\n * would make each object 200% larger.\n * If a FeatureCollection is provided, the origin point will be calculated\n * based on each individual feature _unless_ an exact\n *\n * @name transformScale\n * @param {GeoJSON|GeometryCollection} geojson objects to be scaled\n * @param {number} factor of scaling, positive values greater than 0. Numbers between 0 and 1 will shrink the geojson, numbers greater than 1 will expand it, a factor of 1 will not change the geojson.\n * @param {Object} [options={}] Optional parameters\n * @param {Corners|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance improvement if true)\n * @returns {GeoJSON|GeometryCollection} scaled GeoJSON\n * @example\n * const poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * const scaledPoly = turf.transformScale(poly, 3);\n *\n * //addToMap\n * const addToMap = [poly, scaledPoly];\n * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformScale<T extends GeoJSON | GeometryCollection>(\n geojson: T,\n factor: number,\n options?: {\n origin?: Corners | Coord;\n mutate?: boolean;\n }\n): T {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const origin = options.origin || \"centroid\";\n const mutate = options.mutate || false;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor <= 0)\n throw new Error(\"invalid factor\");\n const originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n // Scale each Feature separately if a feature collection AND the user didn't\n // pass a single explicit point to scale the whole collection from.\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n featureEach(geojson, function (feature, index) {\n // The type guard above is not recognised in the callback so we have to\n // cast to accept responsibility.\n (geojson as FeatureCollection).features[index] = scale(\n feature,\n factor,\n origin\n );\n });\n return geojson;\n }\n // Scale Feature/Geometry\n return scale(geojson, factor, origin);\n}\n\n/**\n * Scale Feature/Geometry\n *\n * @private\n * @param {GeoJSON|GeometryCollection} feature feature or geometry collection to scale\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {Corners|Coord} [origin=\"centroid\"] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @returns {GeoJSON|GeometryCollection} scaled GeoJSON Feature/Geometry\n */\nfunction scale<T extends GeoJSON | GeometryCollection>(\n feature: T,\n factor: number,\n origin: Corners | Coord\n): T {\n // Default params\n const isPoint = getType(feature) === \"Point\";\n // Work with a Coord equivalent of the origin from here on.\n const originCoord: Coord = defineOrigin(feature, origin);\n\n // Shortcut no-scaling\n if (factor === 1 || isPoint) return feature;\n\n // Scale each coordinate\n coordEach(feature, function (coord) {\n const originalDistance = rhumbDistance(originCoord, coord);\n const bearing = rhumbBearing(originCoord, coord);\n const newDistance = originalDistance * factor;\n const newCoord = getCoords(\n rhumbDestination(originCoord, newDistance, bearing)\n );\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n\n delete feature.bbox;\n\n return feature;\n}\n\n/**\n * Define Origin\n *\n * @private\n * @param {GeoJSON|GeometryCollection} geojson GeoJSON\n * @param {Corners|Coord} origin sw/se/nw/ne/center/centroid\n * @returns {Feature<Point>} Point origin\n */\nfunction defineOrigin(\n geojson: GeoJSON | GeometryCollection,\n origin: Corners | Coord\n): Coord {\n // Default params\n if (origin === undefined || origin === null) origin = \"centroid\";\n\n // Input Coord\n if (Array.isArray(origin) || typeof origin === \"object\")\n return getCoord(origin);\n\n // Define BBox\n const bbox = geojson.bbox\n ? geojson.bbox\n : turfBBox(geojson, { recompute: true });\n const west = bbox[0];\n const south = bbox[1];\n const east = bbox[2];\n const north = bbox[3];\n\n // Having to disable eslint below for lines which fail the no-fallthrough\n // rule, though only because of the ts-expect-error rules. Once we remove\n // southeast, bottomright, rightbottom, etc we should be able to remove all\n // these supressions.\n /* eslint-disable no-fallthrough */\n switch (origin) {\n case \"sw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomleft\":\n return point([west, south]);\n case \"se\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomright\":\n return point([east, south]);\n case \"nw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topleft\":\n return point([west, north]);\n case \"ne\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topright\":\n return point([east, north]);\n case \"center\":\n return center(geojson);\n case undefined:\n case null:\n case \"centroid\":\n return centroid(geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n /* eslint-enable no-fallthrough */\n}\n\nexport { transformScale };\nexport default transformScale;\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@turf/transform-scale",
3
- "version": "7.1.0-alpha.7+0ce6ecca0",
3
+ "version": "7.1.0-alpha.70+948cdafaf",
4
4
  "description": "turf transform-scale module",
5
5
  "author": "Turf Authors",
6
6
  "contributors": [
@@ -60,9 +60,9 @@
60
60
  "test:types": "tsc --esModuleInterop --module node16 --moduleResolution node16 --noEmit --strict types.ts"
61
61
  },
62
62
  "devDependencies": {
63
- "@turf/bbox-polygon": "^7.1.0-alpha.7+0ce6ecca0",
64
- "@turf/hex-grid": "^7.1.0-alpha.7+0ce6ecca0",
65
- "@turf/truncate": "^7.1.0-alpha.7+0ce6ecca0",
63
+ "@turf/bbox-polygon": "^7.1.0-alpha.70+948cdafaf",
64
+ "@turf/hex-grid": "^7.1.0-alpha.70+948cdafaf",
65
+ "@turf/truncate": "^7.1.0-alpha.70+948cdafaf",
66
66
  "@types/benchmark": "^2.1.5",
67
67
  "@types/tape": "^4.2.32",
68
68
  "benchmark": "^2.1.4",
@@ -71,19 +71,22 @@
71
71
  "tape": "^5.7.2",
72
72
  "tsup": "^8.0.1",
73
73
  "tsx": "^4.6.2",
74
+ "typescript": "^5.2.2",
74
75
  "write-json-file": "^5.0.0"
75
76
  },
76
77
  "dependencies": {
77
- "@turf/bbox": "^7.1.0-alpha.7+0ce6ecca0",
78
- "@turf/center": "^7.1.0-alpha.7+0ce6ecca0",
79
- "@turf/centroid": "^7.1.0-alpha.7+0ce6ecca0",
80
- "@turf/clone": "^7.1.0-alpha.7+0ce6ecca0",
81
- "@turf/helpers": "^7.1.0-alpha.7+0ce6ecca0",
82
- "@turf/invariant": "^7.1.0-alpha.7+0ce6ecca0",
83
- "@turf/meta": "^7.1.0-alpha.7+0ce6ecca0",
84
- "@turf/rhumb-bearing": "^7.1.0-alpha.7+0ce6ecca0",
85
- "@turf/rhumb-destination": "^7.1.0-alpha.7+0ce6ecca0",
86
- "@turf/rhumb-distance": "^7.1.0-alpha.7+0ce6ecca0"
78
+ "@turf/bbox": "^7.1.0-alpha.70+948cdafaf",
79
+ "@turf/center": "^7.1.0-alpha.70+948cdafaf",
80
+ "@turf/centroid": "^7.1.0-alpha.70+948cdafaf",
81
+ "@turf/clone": "^7.1.0-alpha.70+948cdafaf",
82
+ "@turf/helpers": "^7.1.0-alpha.70+948cdafaf",
83
+ "@turf/invariant": "^7.1.0-alpha.70+948cdafaf",
84
+ "@turf/meta": "^7.1.0-alpha.70+948cdafaf",
85
+ "@turf/rhumb-bearing": "^7.1.0-alpha.70+948cdafaf",
86
+ "@turf/rhumb-destination": "^7.1.0-alpha.70+948cdafaf",
87
+ "@turf/rhumb-distance": "^7.1.0-alpha.70+948cdafaf",
88
+ "@types/geojson": "^7946.0.10",
89
+ "tslib": "^2.6.2"
87
90
  },
88
- "gitHead": "0ce6ecca05829690270fec6d6bed2003495fe0ea"
91
+ "gitHead": "948cdafaf70606d2e27fcc79973fa48ee1182067"
89
92
  }