Files
DefinitelyTyped/turf/turf.d.ts
Denis 727c305d5e Added more methods to Turf (#11558)
* Added more methods to Turf
- circle
- geojsonType
- propReduce
- coordAll
- tesselate

* Replace Object with GeoJSON
2016-09-29 00:11:29 +09:00

1282 lines
45 KiB
TypeScript

// Type definitions for Turf 3.5.2
// Project: http://turfjs.org/
// Definitions by: Guillaume Croteau <https://github.com/gcroteau>, Denis Carriere <https://github.com/DenisCarriere>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference path="../geojson/geojson.d.ts" />
/**
#### TODO:
Update all methods with newest JSDocs & tests based on the latest TurfJS library.
AGGREGATION
- [x] collect
MEASUREMENT
- [ ] along
- [ ] area
- [ ] bboxPolygon
- [ ] bearing
- [ ] center
- [ ] centroid
- [ ] destination
- [ ] distance
- [ ] envelope
- [ ] lineDistance
- [ ] midpoint
- [ ] pointOnSurface
- [ ] square
TRANSFORMATION
- [ ] bezier
- [ ] buffer
- [ ] concave
- [ ] convex
- [ ] difference
- [ ] intersect
- [ ] simplify
- [ ] union
MISC
- [ ] combine
- [ ] explode
- [ ] flip
- [ ] kinks
- [ ] lineSlice
- [ ] pointOnLine
HELPER
- [x] featureCollection
- [x] feature
- [x] lineString
- [x] multiLineString
- [x] point
- [x] multiPoint
- [x] polygon
- [x] multiPolygon
- [x] geometryCollection
DATA
- [x] random
- [x] sample
INTERPOLATION
- [ ] isolines
- [ ] planepoint
- [ ] tin
JOINS
- [x] inside
- [x] tag
- [ ] within
GRIDS
- [x] hexGrid
- [x] pointGrid
- [x] squareGrid
- [x] triangleGrid
CLASSIFICATION
- [ ] nearest
META
- [ ] propEach
- [ ] coordEach
- [ ] coordReduce
- [ ] featureEach
- [ ] getCoord
ASSERTIONS
- [ ] featureOf
- [ ] collectionOf
- [x] bbox
- [x] circle
- [x] geojsonType
- [x] propReduce
- [x] coordAll
- [x] tesselate
*/
declare const turf: turf.TurfStatic;
declare const TemplateUnits: 'miles' | 'nauticalmiles' | 'degrees' | 'radians' | 'inches' | 'yards' | 'meters' | 'metres' | 'kilometers' | 'kilometres'
declare const TemplateType: 'point'| 'points' | 'polygon' | 'polygons'
declare interface OptionsRandom {
bbox?: Array<number>
num_vertices?: number
max_radial_length?: number
}
declare type PropReduceCallback = (memo: any, coord: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>) => any
declare module turf {
interface TurfStatic {
//////////////////////////////////////////////////////
// Aggregation
//////////////////////////////////////////////////////
/**
* Merges a specified property from a FeatureCollection of points into a FeatureCollection of polygons. Given an `inProperty` on points and an `outProperty` for polygons, this finds every point that lies within each polygon, collects the `inProperty` values from those points, and adds them as an array to `outProperty` on the polygon.
*
* @name [collect](http://turfjs.org/docs/#collect)
* @param {FeatureCollection<Polygon>} polygons polygons with values on which to aggregate
* @param {FeatureCollection<Point>} points points to be aggregated
* @param {string} inProperty property to be nested from
* @param {string} outProperty property to be nested into
* @return {FeatureCollection<Polygon>} polygons with properties listed based on `outField`
* @example
* var poly1 = polygon([[[0,0],[10,0],[10,10],[0,10],[0,0]]])
* var poly2 = polygon([[[10,0],[20,10],[20,20],[20,0],[10,0]]])
* var polyFC = featurecollection([poly1, poly2])
* var pt1 = point([5,5], {population: 200})
* var pt2 = point([1,3], {population: 600})
* var pt3 = point([14,2], {population: 100})
* var pt4 = point([13,1], {population: 200})
* var pt5 = point([19,7], {population: 300})
* var ptFC = featurecollection([pt1, pt2, pt3, pt4, pt5])
* var aggregated = aggregate(polyFC, ptFC, 'population', 'values')
*
* aggregated.features[0].properties.values // => [200, 600])
*/
collect(
polygons: GeoJSON.FeatureCollection<GeoJSON.Polygon>,
points: GeoJSON.FeatureCollection<GeoJSON.Point>,
inProperty: string,
outProperty: string
): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
//////////////////////////////////////////////////////
// Measurement
//////////////////////////////////////////////////////
/**
* Takes a line and returns a point at a specified distance along the line.
* @param line Input line
* @param distance Distance along the line
* @param [units=miles] 'miles', 'kilometers', 'radians' or 'degrees'
* @returns Point along the line
*/
along(
line: GeoJSON.Feature<GeoJSON.LineString>,
distance: number,
units?: typeof TemplateUnits
): GeoJSON.Feature<GeoJSON.Point>;
/**
* Takes one or more features and returns their area in square meters.
* @param input Input features
* @returns Area in square meters
*/
area(input: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): number;
/**
* Takes a set of features, calculates the bbox of all input features, and returns a bounding box.
*
* @name bbox
* @param {(Feature|FeatureCollection)} geojson input features
* @return {Array<number>} bbox extent in [minX, minY, maxX, maxY] order
* @example
* var pt1 = point([114.175329, 22.2524])
* var pt2 = point([114.170007, 22.267969])
* var pt3 = point([114.200649, 22.274641])
* var pt4 = point([114.200649, 22.274641])
* var pt5 = point([114.186744, 22.265745])
* var features = featureCollection([pt1, pt2, pt3, pt4, pt5])
*
* var bbox = turf.bbox(features);
*
* var bboxPolygon = turf.bboxPolygon(bbox);
*
* //=bbox
*
* //=bboxPolygon
*/
bbox(bbox: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): Array<number>;
/**
* Takes a {@link Point} and calculates the circle polygon given a radius in degrees, radians, miles, or kilometers; and steps for precision.
*
* @name circle
* @param {Feature<Point>} center center point
* @param {number} radius radius of the circle
* @param {number} [steps=64] number of steps
* @param {string} [units=kilometers] miles, kilometers, degrees, or radians
* @returns {Feature<Polygon>} circle polygon
* @example
* var center = point([-75.343, 39.984]);
* var radius = 5;
* var steps = 10;
* var units = 'kilometers';
*
* var circle = turf.circle(center, radius, steps, units);
*
* //=circle
*/
circle(center: GeoJSON.Feature<GeoJSON.Point>, radius: number, steps?: number, units?: typeof TemplateUnits): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Enforce expectations about types of GeoJSON objects for Turf.
*
* @name geojsonType
* @param {GeoJSON} value any GeoJSON object
* @param {string} type expected GeoJSON type
* @param {string} name name of calling function
* @throws {Error} if value is not the expected type.
*/
geojsonType(value: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>, type: string, name: string): void
/**
* Reduce properties in any GeoJSON object into a single value, similar to how Array.reduce works. However, in this case we lazily run the reduction, so an array of all properties is unnecessary.
*
* @name propReduce
* @param {GeoJSON} layer any GeoJSON object
* @param {Function} callback a method that takes (memo, coord) and returns a new memo
* @param {*} memo the starting value of memo: can be any type.
* @return {*} combined value
*/
propReduce(layer: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>, callback: PropReduceCallback, memo: any): any
/**
* Get all coordinates from any GeoJSON object, returning an array of coordinate arrays.
*
* @name coordAll
* @param {GeoJSON} layer any GeoJSON object
* @returns {Array<Array<Number>>} coordinate position array
*/
coordAll(layer: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): Array<Array<number>>
/**
* Tesselates a {@link Feature<Polygon>} into a {@link FeatureCollection<Polygon>} of triangles using [earcut](https://github.com/mapbox/earcut).
*
* @name tesselate
* @param {Feature<Polygon>} polygon the polygon to tesselate
* @returns {FeatureCollection<Polygon>} a geometrycollection feature
* @example
* var polygon = turf.random('polygon').features[0];
*
* var triangles = turf.tesselate(polygon);
*
* //=triangles
*/
tesselate(poly: GeoJSON.Feature<GeoJSON.Polygon>): GeoJSON.FeatureCollection<GeoJSON.Polygon>
/**
* Takes a bbox and returns an equivalent polygon.
* @param bbox An Array of bounding box coordinates in the form: [xLow, yLow, xHigh, yHigh]
* @returns A Polygon representation of the bounding box
*/
bboxPolygon(bbox: Array<number>): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Takes two points and finds the geographic bearing between them.
* @param start Starting Point
* @param end Ending point
* @returns Bearing in decimal degrees
*/
bearing(start: GeoJSON.Feature<GeoJSON.Point>, end: GeoJSON.Feature<GeoJSON.Point>): number;
/**
* Takes a FeatureCollection and returns the absolute center point of all features.
* @param features Input features
* @returns A Point feature at the absolute center point of all input features
*/
center(features: GeoJSON.FeatureCollection<any>): GeoJSON.Feature<GeoJSON.Point>;
/**
* Takes one or more features and calculates the centroid using the arithmetic mean of all vertices.
* This lessens the effect of small islands and artifacts when calculating the centroid of a set of polygons.
* @param features Input features
* @returns The centroid of the input features
*/
centroid(features: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): GeoJSON.Feature<GeoJSON.Point>;
/**
* Takes a Point and calculates the location of a destination point given a distance in degrees, radians, miles, or kilometers and bearing in degrees.
* This uses the Haversine formula to account for global curvature.
* @param start Starting point
* @param distance Distance from the starting point
* @param bearing Ranging from -180 and 180
* @param units 'miles', 'kilometers', 'radians', or 'degrees'
* @returns Destination point
*/
destination(
start: GeoJSON.Feature<GeoJSON.Point>,
distance: number,
bearing: number,
units?: typeof TemplateUnits
): GeoJSON.Feature<GeoJSON.Point>;
/**
* Calculates the distance between two points in degress, radians, miles, or kilometers.
* This uses the Haversine formula to account for global curvature.
* @param from Origin point
* @param to Destination point
* @param [units=kilometers] 'miles', 'kilometers', 'radians', or 'degrees'
* @returns Distance between the two points
*/
distance(
from: GeoJSON.Feature<GeoJSON.Point>,
to: GeoJSON.Feature<GeoJSON.Point>,
units?: typeof TemplateUnits
): number;
/**
* Takes any number of features and returns a rectangular Polygon that encompasses all vertices.
* @param fc Input features
* @returns A rectangular Polygon feature that encompasses all vertices
*/
envelope(fc: GeoJSON.FeatureCollection<any>): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Takes a line and measures its length in the specified units.
* @param line Line to measure
* @param units 'miles', 'kilometers', 'radians', or 'degrees'
* @returns Length of the input line
*/
lineDistance(
line: GeoJSON.Feature<GeoJSON.LineString>,
units?: typeof TemplateUnits
): number;
/**
* Takes two points and returns a point midway between them.
* @param pt1 First point
* @param pt2 Second point
* @returns A point midway between pt1 and pt2
*/
midpoint(pt1: GeoJSON.Feature<GeoJSON.Point>, pt2: GeoJSON.Feature<GeoJSON.Point>): GeoJSON.Feature<GeoJSON.Point>;
/**
* Takes a feature and returns a Point guaranteed to be on the surface of the feature. Given a Polygon, the point will be in the area of the polygon.
* Given a LineString, the point will be along the string. Given a Point, the point will the same as the input.
* @param input Any feature or set of features
* @returns A point on the surface of input
*/
pointOnSurface(input: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): GeoJSON.Feature<any>;
/**
* Takes a bounding box and calculates the minimum square bounding box that would contain the input.
* @param bbox A bounding box
* @returns A square surrounding bbox
*/
square(bbox: Array<number>): Array<number>;
//////////////////////////////////////////////////////
// Transformation
//////////////////////////////////////////////////////
/**
* Takes a line and returns a curved version by applying a Bezier spline algorithm.
* The bezier spline implementation is by Leszek Rybicki.
* @param line Input LineString
* @param [resolution=10000] Time in milliseconds between points
* @param [sharpness=0.85] A measure of how curvy the path should be between splines
* @returns Curved line
*/
bezier(line: GeoJSON.Feature<GeoJSON.LineString>, resolution?: number, sharpness?: number): GeoJSON.Feature<GeoJSON.LineString>;
/**
* Calculates a buffer for input features for a given radius. Units supported are miles, kilometers, and degrees.
* @param feature Input to be buffered
* @param distance Distance to draw the buffer
* @param units 'miles', 'kilometers', 'radians', or 'degrees'
* @returns Buffered features
*/
buffer(feature: GeoJSON.Feature<GeoJSON.Polygon>, distance: number, units?: typeof TemplateUnits): GeoJSON.Feature<GeoJSON.Polygon>;
buffer(feature: GeoJSON.Feature<GeoJSON.MultiPolygon>, distance: number, units?: typeof TemplateUnits): GeoJSON.Feature<GeoJSON.MultiPolygon>;
buffer(feature: GeoJSON.Feature<GeoJSON.Point>, distance: number, units?: typeof TemplateUnits): GeoJSON.Feature<GeoJSON.Point>;
buffer(feature: GeoJSON.Feature<any>, distance: number, units?: typeof TemplateUnits): GeoJSON.Feature<any>;
buffer(feature: GeoJSON.FeatureCollection<GeoJSON.Polygon>, distance: number, units?: typeof TemplateUnits): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
buffer(feature: GeoJSON.FeatureCollection<GeoJSON.MultiPolygon>, distance: number, units?: typeof TemplateUnits): GeoJSON.FeatureCollection<GeoJSON.MultiPolygon>;
buffer(feature: GeoJSON.FeatureCollection<GeoJSON.Point>, distance: number, units?: typeof TemplateUnits): GeoJSON.FeatureCollection<GeoJSON.Point>;
buffer(feature: GeoJSON.FeatureCollection<any>, distance: number, units?: typeof TemplateUnits): GeoJSON.FeatureCollection<any>;
/**
* Takes a set of points and returns a concave hull polygon. Internally, this implements a Monotone chain algorithm.
* @param points Input points
* @param maxEdge The size of an edge necessary for part of the hull to become concave (in miles)
* @param units Used for maxEdge distance (miles or kilometers)
* @returns A concave hull
*/
concave(
points: GeoJSON.FeatureCollection<GeoJSON.Point>,
maxEdge: number,
units?: typeof TemplateUnits
): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Takes a set of points and returns a convex hull polygon. Internally this uses the convex-hull module that implements a monotone chain hull.
* @param input Input points
* @returns A convex hull
*/
convex(
input: GeoJSON.FeatureCollection<GeoJSON.Point>
): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Finds the difference between two polygons by clipping the second polygon from the first.
* @param poly1 Input Polygon feaure
* @param poly2 Polygon feature to difference from poly1
* @returns A Polygon feature showing the area of poly1 excluding the area of poly2
*/
difference(
poly1: GeoJSON.Feature<GeoJSON.Polygon>,
poly2: GeoJSON.Feature<GeoJSON.Polygon>
): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Takes two Features and finds their intersection.
* If they share a border, returns the border if they don't intersect, returns undefined.
*
* @name [intersect](http://turfjs.org/docs/#intersect)
* @param {Feature<Polygon>} poly1
* @param {Feature<Polygon>} poly2
* @returns {Feature|undefined} A feature representing the point(s) they share (in case of a {Point} or {MultiPoint}), the borders they share (in case of a {LineString} or a {MultiLineString}), the area they share (in case of {Polygon} or {MultiPolygon}). If they do not share any point, returns `undefined`.
* @example
* var poly1 = polygon([[
* [-122.801742, 45.48565],
* [-122.801742, 45.60491],
* [-122.584762, 45.60491],
* [-122.584762, 45.48565],
* [-122.801742, 45.48565]
* ]]);
*
* var poly2 = polygon([[
* [-122.520217, 45.535693],
* [-122.64038, 45.553967],
* [-122.720031, 45.526554],
* [-122.669906, 45.507309],
* [-122.723464, 45.446643],
* [-122.532577, 45.408574],
* [-122.487258, 45.477466],
* [-122.520217, 45.535693]
* ]]);
* var polygons = featureCollection([poly1, poly2]);
*
* var intersection = turf.intersect(poly1, poly2);
*
* //=polygons
*
* //=intersection
*/
intersect(
feature1: GeoJSON.Feature<GeoJSON.Polygon>,
feature2: GeoJSON.Feature<GeoJSON.Polygon>
): GeoJSON.Feature<GeoJSON.Point | GeoJSON.LineString | GeoJSON.Polygon>;
intersect(
feature1: GeoJSON.Feature<any>,
feature2: GeoJSON.Feature<any>
): GeoJSON.Feature<any>;
/**
* Takes a LineString or Polygon and returns a simplified version.
* Internally uses simplify-js to perform simplification.
* @param feature Feature to be simplified
* @param tolerance Simplification tolerance
* @param highQuality Whether or not to spend more time to create a higher-quality simplification with a different algorithm
* @returns A simplified feature
*/
simplify(feature: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any> | GeoJSON.GeometryCollection, tolerance: number, highQuality: boolean): GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any> | GeoJSON.GeometryCollection;
/**
* Takes two polygons and returns a combined polygon.
* If the input polygons are not contiguous, this function returns a MultiPolygon feature.;
* @param poly1 Input polygon
* @param poly2 Another input polygon
* @returns A combined Polygon or MultiPolygon feature
*/
union(poly1: GeoJSON.Feature<GeoJSON.Polygon>, poly2: GeoJSON.Feature<GeoJSON.Polygon>): GeoJSON.Feature<GeoJSON.Polygon | GeoJSON.MultiPolygon>;
//////////////////////////////////////////////////////
// Misc
//////////////////////////////////////////////////////
/**
* Combines a FeatureCollection of Point, LineString, or Polygon features into MultiPoint, MultiLineString, or MultiPolygon features.
* @param fc A FeatureCollection of any type
* @returns A FeatureCollection of corresponding type to input
*/
combine(fc: GeoJSON.FeatureCollection<any>): GeoJSON.FeatureCollection<any>;
/**
* Takes a feature or set of features and returns all positions as points.
* @param input Input features
* @returns Points representing the exploded input features
*/
explode(input: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): GeoJSON.FeatureCollection<GeoJSON.Point>;
/**
* Takes input features and flips all of their coordinates from [x, y] to [y, x].
* @param input Input features
* @returns A feature or set of features of the same type as input with flipped coordinates
*/
flip(input: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>;
/**
* Takes a polygon and returns points at all self-intersections.
* @param polygon Input polygon
* @returns Self-intersections
*/
kinks(polygon: GeoJSON.Feature<GeoJSON.Polygon>): GeoJSON.FeatureCollection<GeoJSON.Point>;
/**
* Takes a line, a start Point, and a stop point and returns the line in between those points.
* @param point1 Starting point
* @param point2 Stopping point
* @param line Line to slice
* @returns Sliced line
*/
lineSlice(point1: GeoJSON.Feature<GeoJSON.Point>, point2: GeoJSON.Feature<GeoJSON.Point>, line: GeoJSON.Feature<GeoJSON.LineString>): GeoJSON.Feature<GeoJSON.LineString>;
/**
* Takes a Point and a LineString and calculates the closest Point on the LineString.
* @param line Line to snap to
* @param point Point to snap from
* @returns Closest point on the line to point
*/
pointOnLine(line: GeoJSON.Feature<GeoJSON.LineString>, point: GeoJSON.Feature<GeoJSON.Point>): GeoJSON.Feature<GeoJSON.Point>;
//////////////////////////////////////////////////////
// Helper
//////////////////////////////////////////////////////
/**
* Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
*
* @name [featureCollection](http://turfjs.org/docs/#featurecollection)
* @param {Feature[]} features input features
* @returns {FeatureCollection} a FeatureCollection of input features
* @example
* var features = [
* turf.point([-75.343, 39.984], {name: 'Location A'}),
* turf.point([-75.833, 39.284], {name: 'Location B'}),
* turf.point([-75.534, 39.123], {name: 'Location C'})
* ]
*
* var fc = turf.featureCollection(features)
*
* //=fc
*/
featureCollection(features: Array<GeoJSON.Feature<any>>): GeoJSON.FeatureCollection<any>;
/**
* Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
*
* @name [feature](http://turfjs.org/docs/#feature)
* @param {Geometry} geometry input geometry
* @param {Object} properties properties
* @returns {FeatureCollection} a FeatureCollection of input features
* @example
* var geometry = {
* "type": "Point",
* "coordinates": [
* 67.5,
* 32.84267363195431
* ]
* }
*
* var feature = turf.feature(geometry)
*
* //=feature
*/
feature(geometry:GeoJSON.Feature<any>, properties?: any): GeoJSON.Feature<any>;
/**
* Creates a {@link LineString} based on a coordinate array. Properties can be added optionally.
*
* @name [lineString](http://turfjs.org/docs/#linestring)
* @param {Array<Array<number>>} coordinates an array of Positions
* @param {Object=} properties an Object of key-value pairs to add as properties
* @returns {Feature<LineString>} a LineString feature
* @throws {Error} if no coordinates are passed
* @example
* var linestring1 = turf.lineString([
* [-21.964416, 64.148203],
* [-21.956176, 64.141316],
* [-21.93901, 64.135924],
* [-21.927337, 64.136673]
* ])
* var linestring2 = turf.lineString([
* [-21.929054, 64.127985],
* [-21.912918, 64.134726],
* [-21.916007, 64.141016],
* [-21.930084, 64.14446]
* ], {name: 'line 1', distance: 145})
*
* //=linestring1
*
* //=linestring2
*/
lineString(coordinates: Array<Array<number>>, properties?: any): GeoJSON.Feature<GeoJSON.LineString>;
/**
* Creates a {@link Feature<MultiLineString>} based on a coordinate array. Properties can be added optionally.
*
* @name [multiLineString](http://turfjs.org/docs/#multilinestring)
* @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
* @param {Object=} properties an Object of key-value pairs to add as properties
* @returns {Feature<MultiLineString>} a MultiLineString feature
* @throws {Error} if no coordinates are passed
* @example
* var multiLine = turf.multiLineString([[[0,0],[10,10]]])
*
* //=multiLine
*
*/
multiLineString(coordinates: Array<Array<Array<number>>>, properties?: any): GeoJSON.Feature<GeoJSON.MultiLineString>;
/**
* Takes coordinates and properties (optional) and returns a new {@link Point} feature.
*
* @name [point](http://turfjs.org/docs/#point)
* @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
* @param {Object=} properties an Object that is used as the {@link Feature}'s
* properties
* @returns {Feature<Point>} a Point feature
* @example
* var pt1 = turf.point([-75.343, 39.984]);
*
* //=pt1
*/
point(coordinates: Array<number>, properties?: any): GeoJSON.Feature<GeoJSON.Point>;
/**
* Creates a {@link Feature<MultiPoint>} based on a coordinate array. Properties can be added optionally.
*
* @name [multiPoint](http://turfjs.org/docs/#multipoint)
* @param {Array<Array<number>>} coordinates an array of Positions
* @param {Object=} properties an Object of key-value pairs to add as properties
* @returns {Feature<MultiPoint>} a MultiPoint feature
* @throws {Error} if no coordinates are passed
* @example
* var multiPt = turf.multiPoint([[0,0],[10,10]])
*
* //=multiPt
*
*/
multiPoint(coordinates: Array<Array<number>>, properties?: any): GeoJSON.Feature<GeoJSON.MultiPoint>;
/**
* Takes an array of LinearRings and optionally an {@link Object} with properties and returns a {@link Polygon} feature.
*
* @name [polygon](http://turfjs.org/docs/#polygon)
* @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
* @param {Object=} properties a properties object
* @returns {Feature<Polygon>} a Polygon feature
* @throws {Error} throw an error if a LinearRing of the polygon has too few positions
* or if a LinearRing of the Polygon does not have matching Positions at the
* beginning & end.
* @example
* var polygon = turf.polygon([[
* [-2.275543, 53.464547],
* [-2.275543, 53.489271],
* [-2.215118, 53.489271],
* [-2.215118, 53.464547],
* [-2.275543, 53.464547]
* ]], { name: 'poly1', population: 400});
*
* //=polygon
*/
polygon(coordinates: Array<Array<Array<number>>>, properties?: any): GeoJSON.Feature<GeoJSON.Polygon>;
/**
* Creates a {@link Feature<MultiPolygon>} based on a coordinate array. Properties can be added optionally.
*
* @name [multiPolygon](http://turfjs.org/docs/#multipolygon)
* @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
* @param {Object=} properties an Object of key-value pairs to add as properties
* @returns {Feature<MultiPolygon>} a multipolygon feature
* @throws {Error} if no coordinates are passed
* @example
* var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]);
*
* //=multiPoly
*
*/
multiPolygon(coordinates: Array<Array<Array<Array<number>>>>, properties?: any): GeoJSON.Feature<GeoJSON.MultiPolygon>;
/**
* Creates a {@link Feature<GeometryCollection>} based on acoordinate array. Properties can be added optionally.
*
* @name [geometryCollection](http://turfjs.org/docs/#geometrycollection)
* @param {Array<{Geometry}>} geometries an array of GeoJSON Geometries
* @param {Object=} properties an Object of key-value pairs to add as properties
* @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
* @example
* var point = {
* "type": "Point",
* "coordinates": [100, 0]
* };
* var line = {
* "type": "LineString",
* "coordinates": [ [101, 0], [102, 1] ]
* };
* var collection = turf.geometryCollection([point, line]);
*
* //=collection
*/
geometryCollection(geometries: Array<GeoJSON.GeometryObject>, properties?: any): GeoJSON.GeometryCollection;
//////////////////////////////////////////////////////
// Data
//////////////////////////////////////////////////////
/**
* Generates random {@link GeoJSON} data, including {@link Point|Points} and {@link Polygon|Polygons}, for testing and experimentation.
*
* @name [random](http://turfjs.org/docs/#random)
* @param {String} [type='point'] type of features desired: 'points' or 'polygons'
* @param {Number} [count=1] how many geometries should be generated.
* @param {Object} options options relevant to the feature desired. Can include:
* @param {Array<number>} options.bbox a bounding box inside of which geometries
* are placed. In the case of {@link Point} features, they are guaranteed to be within this bounds,
* while {@link Polygon} features have their centroid within the bounds.
* @param {Number} [options.num_vertices=10] options.vertices the number of vertices added
* to polygon features.
* @param {Number} [options.max_radial_length=10] the total number of decimal
* degrees longitude or latitude that a polygon can extent outwards to
* from its center.
* @return {FeatureCollection} generated random features
* @example
* var points = turf.random('points', 100, {
* bbox: [-70, 40, -60, 60]
* })
*
* //=points
*
* var polygons = turf.random('polygons', 4, {
* bbox: [-70, 40, -60, 60]
* })
*
* //=polygons
*/
random(type?: 'point', count?: number, options?: OptionsRandom): GeoJSON.FeatureCollection<GeoJSON.Point>;
random(type?: 'points', count?: number, options?: OptionsRandom): GeoJSON.FeatureCollection<GeoJSON.Point>;
random(type?: 'polygon', count?: number, options?: OptionsRandom): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
random(type?: 'polygons', count?: number, options?: OptionsRandom): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
random(type?: typeof TemplateType, count?: number, options?: OptionsRandom): GeoJSON.FeatureCollection<any>;
/**
* Takes a {@link FeatureCollection} and returns a FeatureCollection with given number of {@link Feature|features} at random.
*
* @name [sample](http://turfjs.org/docs/#sample)
* @param {FeatureCollection} featurecollection set of input features
* @param {number} num number of features to select
* @return {FeatureCollection} a FeatureCollection with `n` features
* @example
* var points = turf.random('points', 1000);
*
* //=points
*
* var sample = turf.sample(points, 10);
*
* //=sample
*/
sample(featurecollection: GeoJSON.FeatureCollection<any>, num: number): GeoJSON.FeatureCollection<any>;
//////////////////////////////////////////////////////
// GRIDS
//////////////////////////////////////////////////////
/**
* Takes a bounding box and a cell size in degrees and returns a {@link FeatureCollection} of flat-topped hexagons ({@link Polygon} features) aligned in an "odd-q" vertical grid as described in [Hexagonal Grids](http://www.redblobgames.com/grids/hexagons/).
*
* @name [hexGrid](http://turfjs.org/docs/#hexgrid)
* @param {Array<number>} bbox bounding box in [minX, minY, maxX, maxY] order
* @param {number} cellSize dimension of cell in specified units
* @param {string} units used in calculating cellSize ('miles' or 'kilometers')
* @param {boolean} triangles whether to return as triangles instead of hexagons
* @return {FeatureCollection<Polygon>} a hexagonal grid
* @example
* var bbox = [-96,31,-84,40];
* var cellSize = 50;
* var units = 'miles';
*
* var hexgrid = turf.hexGrid(bbox, cellSize, units);
*
* //=hexgrid
*/
hexGrid(
bbox: Array<number>,
cellSize: number,
units?: typeof TemplateUnits,
triangles?: boolean
): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
/**
* Takes a bounding box and a cell depth and returns a set of {@link Point|points} in a grid.
*
* @name [pointGrid](http://turfjs.org/docs/#pointgrid)
* @param {Array<number>} bbox extent in [minX, minY, maxX, maxY] order
* @param {number} cellSize the distance across each cell
* @param {string} [units=kilometers] used in calculating cellSize, can be degrees, radians, miles, or kilometers
* @return {FeatureCollection<Point>} grid of points
* @example
* var extent = [-70.823364, -33.553984, -70.473175, -33.302986];
* var cellSize = 3;
* var units = 'miles';
*
* var grid = turf.pointGrid(extent, cellSize, units);
*
* //=grid
*/
pointGrid(
bbox: Array<number>,
cellSize: number,
units?: typeof TemplateUnits
): GeoJSON.FeatureCollection<GeoJSON.Point>;
/**
* Takes a bounding box and a cell depth and returns a set of square {@link Polygon|polygons} in a grid.
*
* @name [squareGrid](http://turfjs.org/docs/#squaregrid)
* @param {Array<number>} bbox extent in [minX, minY, maxX, maxY] order
* @param {number} cellSize width of each cell
* @param {string} [units=kilometers] used in calculating cellSize, can be degrees, radians, miles, or kilometers
* @return {FeatureCollection<Polygon>} grid a grid of polygons
* @example
* var bbox = [-96,31,-84,40]
* var cellSize = 10
* var units = 'miles'
*
* var squareGrid = turf.squareGrid(bbox, cellSize, units)
*
* //=squareGrid
*/
squareGrid(
bbox: Array<number>,
cellSize: number,
units?: typeof TemplateUnits
): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
/**
* Takes a bounding box and a cell depth and returns a set of triangular {@link Polygon|polygons} in a grid.
*
* @name [triangleGrid](http://turfjs.org/docs/#trianglegrid))
* @param {Array<number>} bbox extent in [minX, minY, maxX, maxY] order
* @param {number} cellSize dimension of each cell
* @param {string} [units=kilometers] used in calculating cellSize, can be degrees, radians, miles, or kilometers
* @return {FeatureCollection<Polygon>} grid of polygons
* @example
* var bbox = [-96,31,-84,40]
* var cellSize = 10;
* var units = 'miles';
*
* var triangleGrid = turf.triangleGrid(extent, cellSize, units);
*
* //=triangleGrid
*/
triangleGrid(
bbox: Array<number>,
cellSize: number,
units?: typeof TemplateUnits
): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
//////////////////////////////////////////////////////
// Interpolation
//////////////////////////////////////////////////////
/**
* Takes points with z-values and an array of value breaks and generates isolines.
* @param points Input points
* @param z The property name in points from which z-values will be pulled
* @param resolution Resolution of the underlying grid
* @param breaks Where to draw contours
* @returns Isolines
*/
isolines(points: GeoJSON.FeatureCollection<GeoJSON.Point>, z: string, resolution: number, breaks: Array<number>): GeoJSON.FeatureCollection<GeoJSON.LineString>;
/**
* Takes a triangular plane as a Polygon and a Point within that triangle and returns the z-value at that point.
* The Polygon needs to have properties a, b, and c that define the values at its three corners.
* @param interpolatedPoint The Point for which a z-value will be calculated
* @param triangle A Polygon feature with three vertices
* @returns The z-value for interpolatedPoint
*/
planepoint(interpolatedpoint: GeoJSON.Feature<GeoJSON.Point>, triangle: GeoJSON.Feature<GeoJSON.Polygon>): number;
/**
* Takes a set of points and the name of a z-value property and creates a Triangulated Irregular Network, or a TIN for short, returned as a collection of Polygons.
* These are often used for developing elevation contour maps or stepped heat visualizations.
* This triangulates the points, as well as adds properties called a, b, and c representing the value of the given propertyName at each of the points that represent the corners of the triangle.
* @param points Input points
* @param [propertyName] Name of the property from which to pull z values This is optional: if not given, then there will be no extra data added to the derived triangles.
* @returns TIN output
*/
tin(points: GeoJSON.FeatureCollection<GeoJSON.Point>, propertyName?: string): GeoJSON.FeatureCollection<GeoJSON.Polygon>;
//////////////////////////////////////////////////////
// Joins
//////////////////////////////////////////////////////
/**
* Takes a {<Point>} and a {<Polygon>} or {<MultiPolygon>} and determines if the point resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.
*
* @name [inside](http://turfjs.org/docs/#inside)
* @param {Feature<Point>} point input point
* @param {Feature<(Polygon|MultiPolygon)>} polygon input polygon or multipolygon
* @return {Boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon
* @example
* var pt = point([-77, 44])
* var poly = polygon([[[-81, 41], [-81, 47], [-72, 47], [-72, 41], [-81, 41]]])
*
* var isInside = turf.inside(pt, poly)
*
* //=isInside
*/
inside(
point: GeoJSON.Feature<GeoJSON.Point>,
polygon: GeoJSON.Feature<GeoJSON.Polygon>
): boolean;
/**
* Takes a {FeatureCollection<Point>} and a {FeatureCollection<Polygon>} and performs a spatial join.
*
* @name [tag](http://turfjs.org/docs/#inside)
* @param {FeatureCollection<Point>} points input points
* @param {FeatureCollection<Polygon>} polygons input polygons
* @param {string} field property in `polygons` to add to joined {<Point>} features
* @param {string} outField property in `points` in which to store joined property from `polygons`
* @return {FeatureCollection<Point>} points with `containingPolyId` property containing values from `polyId`
* @example
* var pt1 = point([-77, 44])
* var pt2 = point([-77, 38])
* var poly1 = polygon([[[-81, 41], [-81, 47], [-72, 47], [-72, 41], [-81, 41]]], {pop: 1000})
* var poly2 = polygon([[[-81, 35], [-81, 41], [-72, 41], [-72, 35], [-81, 35]]], {pop: 3000})
*
* var points = featureCollection([pt1, pt2])
* var polygons = featureCollection([poly1, poly2])
*
* var tagged = turf.tag(points, polygons, 'pop', 'population')
* //=tagged
*/
tag(
points: GeoJSON.FeatureCollection<GeoJSON.Point>,
polygons: GeoJSON.FeatureCollection<GeoJSON.Polygon>,
field: string,
outField: string
): GeoJSON.FeatureCollection<GeoJSON.Point>;
/**
* Takes a set of points and a set of polygons and returns the points that fall within the polygons.
* @param points Input points
* @param polygons Input polygons
* @returns Points that land within at least one polygon
*/
within(
points: GeoJSON.FeatureCollection<GeoJSON.Point>,
polygons: GeoJSON.FeatureCollection<GeoJSON.Polygon>
): GeoJSON.FeatureCollection<GeoJSON.Point>;
//////////////////////////////////////////////////////
// Classification
//////////////////////////////////////////////////////
/**
* Takes a reference point and a set of points and returns the point from the set closest to the reference.
* @param point The reference point
* @param against Input point set
* @returns The closest point in the set to the reference point
*/
nearest(
point: GeoJSON.Feature<GeoJSON.Point>,
against: GeoJSON.FeatureCollection<GeoJSON.Point>
): GeoJSON.Feature<GeoJSON.Point>;
}
}
// NPM Stable version of Turf
declare module "turf" {
export = turf
}
// Latest version of Turf
declare module "@turf/turf" {
export = turf
}
// AGGREGATION
declare module "@turf/collect" {
const collect: typeof turf.collect;
export = collect;
}
// MEASUREMENT
declare module "@turf/along" {
const along: typeof turf.along;
export = along;
}
declare module "@turf/area" {
const area: typeof turf.area;
export = area;
}
declare module "@turf/bbox-polygon" {
const bboxPolygon: typeof turf.bboxPolygon;
export = bboxPolygon;
}
declare module "@turf/bearing" {
const bearing: typeof turf.bearing;
export = bearing;
}
declare module "@turf/center" {
const center: typeof turf.center;
export = center;
}
declare module "@turf/centroid" {
const centroid: typeof turf.centroid;
export = centroid;
}
declare module "@turf/destination" {
const destination: typeof turf.destination;
export = destination;
}
declare module "@turf/distance" {
const distance: typeof turf.distance;
export = distance;
}
declare module "@turf/envelope" {
const envelope: typeof turf.envelope;
export = envelope;
}
declare module "@turf/line-distance" {
const lineDistance: typeof turf.lineDistance;
export = lineDistance;
}
declare module "@turf/midpoint" {
const midpoint: typeof turf.midpoint;
export = midpoint;
}
declare module "@turf/point-on-surface" {
const pointOnSurface: typeof turf.pointOnSurface;
export = pointOnSurface;
}
declare module "@turf/square" {
const square: typeof turf.square;
export = square;
}
// TRANSFORMATION
declare module "@turf/bezier" {
const bezier: typeof turf.bezier;
export = bezier;
}
declare module "@turf/buffer" {
const buffer: typeof turf.buffer;
export = buffer;
}
declare module "@turf/concave" {
const concave: typeof turf.concave;
export = concave;
}
declare module "@turf/convex" {
const convex: typeof turf.convex;
export = convex;
}
declare module "@turf/difference" {
const difference: typeof turf.difference;
export = difference;
}
declare module "@turf/intersect" {
const intersect: typeof turf.intersect;
export = intersect;
}
declare module "@turf/simplify" {
const simplify: typeof turf.simplify;
export = simplify;
}
declare module "@turf/union" {
const union: typeof turf.union;
export = union;
}
// MISC
declare module "@turf/combine" {
const combine: typeof turf.combine;
export = combine;
}
declare module "@turf/explode" {
const explode: typeof turf.explode;
export = explode;
}
declare module "@turf/flip" {
const flip: typeof turf.flip;
export = flip;
}
declare module "@turf/kinks" {
const kinks: typeof turf.kinks;
export = kinks;
}
declare module "@turf/line-slice" {
const lineSlice: typeof turf.lineSlice;
export = lineSlice;
}
declare module "@turf/point-on-line" {
const pointOnLine: typeof turf.pointOnLine;
export = pointOnLine;
}
// HELPER
declare module "@turf/helpers" {
const helpers: {
featureCollection: typeof turf.featureCollection,
feature: typeof turf.feature,
lineString: typeof turf.lineString,
multiLineString: typeof turf.multiLineString,
point: typeof turf.point,
multiPoint: typeof turf.multiPoint,
polygon: typeof turf.polygon,
multiPolygon: typeof turf.multiPolygon,
geometryCollection: typeof turf.geometryCollection,
};
export = helpers;
}
// DATA
declare module "@turf/random" {
const random: typeof turf.random;
export = random;
}
declare module "@turf/sample" {
const sample: typeof turf.sample;
export = sample;
}
// INTERPOLATION
declare module "@turf/isolines" {
const isolines: typeof turf.isolines;
export = isolines;
}
declare module "@turf/planepoint" {
const planepoint: typeof turf.planepoint;
export = planepoint;
}
declare module "@turf/tin" {
const tin: typeof turf.tin;
export = tin;
}
// JOINS
declare module "@turf/inside" {
const inside: typeof turf.inside;
export = inside;
}
declare module "@turf/tag" {
const tag: typeof turf.tag;
export = tag;
}
declare module "@turf/within" {
const within: typeof turf.within;
export = within;
}
// GRIDS
declare module "@turf/hex-grid" {
const hexGrid: typeof turf.hexGrid;
export = hexGrid;
}
declare module "@turf/point-grid" {
const pointGrid: typeof turf.pointGrid;
export = pointGrid;
}
declare module "@turf/square-grid" {
const squareGrid: typeof turf.squareGrid;
export = squareGrid;
}
declare module "@turf/triangle-grid" {
const triangleGrid: typeof turf.triangleGrid;
export = triangleGrid;
}
// CLASSIFICATION
declare module "@turf/nearest" {
const nearest: typeof turf.nearest;
export = nearest;
}
// // META
// declare module "@turf/propEach" {
// const propEach: typeof turf.propEach;
// export = propEach;
// }
// declare module "@turf/coordEach" {
// const coordEach: typeof turf.coordEach;
// export = coordEach;
// }
// declare module "@turf/coordReduce" {
// const coordReduce: typeof turf.coordReduce;
// export = coordReduce;
// }
// declare module "@turf/featureEach" {
// const featureEach: typeof turf.featureEach;
// export = featureEach;
// }
// declare module "@turf/getCoord" {
// const getCoord: typeof turf.getCoord;
// export = getCoord;
// }
// // ASSERTIONS
// declare module "@turf/featureOf" {
// const featureOf: typeof turf.featureOf;
// export = featureOf;
// }
// declare module "@turf/collectionOf" {
// const collectionOf: typeof turf.collectionOf;
// export = collectionOf;
// }
declare module "@turf/bbox" {
const bbox: typeof turf.bbox;
export = bbox;
}
declare module "@turf/circle" {
const circle: typeof turf.circle;
export = circle;
}
declare module "@turf/geojsonType" {
const geojsonType: typeof turf.geojsonType;
export = geojsonType;
}
declare module "@turf/propReduce" {
const propReduce: typeof turf.propReduce;
export = propReduce;
}
declare module "@turf/coordAll" {
const coordAll: typeof turf.coordAll;
export = coordAll;
}
declare module "@turf/tesselate" {
const tesselate: typeof turf.tesselate;
export = tesselate;
}