From 848b9d84676b802a37e6d0d9dca226780c9f311c Mon Sep 17 00:00:00 2001 From: gcroteau Date: Tue, 24 Nov 2015 19:52:59 -0500 Subject: [PATCH] Completed the Measurement definitions. --- turf/turf-test.ts | 157 ++++++++++++++++++++++++++++++++++++++++++---- turf/turf.d.ts | 135 ++++++++++++++++++++++++++++++++------- 2 files changed, 259 insertions(+), 33 deletions(-) diff --git a/turf/turf-test.ts b/turf/turf-test.ts index 5d1a73a93..c248ebda1 100644 --- a/turf/turf-test.ts +++ b/turf/turf-test.ts @@ -71,6 +71,112 @@ var polygons = { ] }; +var polygon = { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [[ + [105.818939,21.004714], + [105.818939,21.061754], + [105.890007,21.061754], + [105.890007,21.004714], + [105.818939,21.004714] + ]] + } +}; + +var features = { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.522259, 35.4691] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.502754, 35.463455] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.508269, 35.463245] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.516809, 35.465779] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.515372, 35.467072] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.509363, 35.463053] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.511123, 35.466601] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.518547, 35.469327] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.519706, 35.469659] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.517839, 35.466998] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.508678, 35.464942] + } + }, { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [-97.514914, 35.463453] + } + } + ] +}; + ////////////////////////////////////////////////////////////////////////// // Tests Aggregation ////////////////////////////////////////////////////////////////////////// @@ -82,18 +188,53 @@ var polygons = { // -- Test along -- var along = turf.along(line, 1, 'miles'); -var result = { - "type": "FeatureCollection", - "features": [line, along] -}; - // -- Test area -- var area = turf.area(polygons); +// -- Test bboxPolygon -- +var bbox = [0, 0, 10, 10]; +var poly = turf.bboxPolygon(bbox); + +// -- Test bearing -- +var bearing = turf.bearing(point1, point2); + +// -- Test center +var centerPt = turf.center(features); + +// -- Test centroid -- +var centroidPt = turf.centroid(poly); + +// -- Test destination -- +var distance = 50; +var bearing = 90; +var units = 'miles'; +var destination = turf.destination(point1, distance, bearing, units); + // -- Test distance -- var units = "miles"; var distance = turf.distance(point1, point2, units); +// -- Test envelope -- +var enveloped = turf.envelope(polygons); + +// -- Test extent -- +var bbox = turf.extent(polygons); + +// -- Test lineDistance +var length = turf.lineDistance(line, 'miles'); + +// -- Test midpoint -- +var midpointed = turf.midpoint(point1, point2); + +// -- Test pointOnSurface -- +var pointOnPolygon = turf.pointOnSurface(polygon); + +// -- Test size -- +var resized = turf.size(bbox, 2); + +// -- Test square -- +var squared = turf.square(bbox); + ////////////////////////////////////////////////////////////////////////// // Tests Transformation ////////////////////////////////////////////////////////////////////////// @@ -104,12 +245,6 @@ var distance = turf.distance(point1, point2, units); // -- Test pointOnLine -- var snapped = turf.pointOnLine(line, point1); -snapped.properties['marker-color'] = '#00f' - -result = { - "type": "FeatureCollection", - "features": [line, point1, snapped] -}; ////////////////////////////////////////////////////////////////////////// // Tests Helper diff --git a/turf/turf.d.ts b/turf/turf.d.ts index 15e9478db..2b0c69c13 100644 --- a/turf/turf.d.ts +++ b/turf/turf.d.ts @@ -6,13 +6,13 @@ /// declare module turf { - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Aggregation - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Measurement - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// /** * Takes a line and returns a point at a specified distance along the line. @@ -29,7 +29,46 @@ declare module turf { * @returns Area in square meters */ function area(input: GeoJSON.Feature | GeoJSON.FeatureCollection): number; - + + /** + * 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 + */ + function bboxPolygon(bbox: Array): GeoJSON.Feature; + + /** + * Takes two points and finds the geographic bearing between them. + * @param start Starting Point + * @param end Ending point + * @returns Bearing in decimal degrees + */ + function bearing(start: GeoJSON.Feature, end: GeoJSON.Feature): 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 + */ + function center(features: GeoJSON.FeatureCollection): GeoJSON.Feature; + + /** + * 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 + */ + function centroid(features: GeoJSON.Feature | GeoJSON.FeatureCollection): GeoJSON.Feature; + + /** + * 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, degrees or radians + * @returns Destination point + */ + function destination(start: GeoJSON.Feature, distance: number, bearing: number, units: string): GeoJSON.Feature; + /** * 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 @@ -39,13 +78,65 @@ declare module turf { */ function distance(from: GeoJSON.Feature, to: GeoJSON.Feature, units?: string): number; - ////////////////////////////////////////////////////////////////////////// - // Transformation - ////////////////////////////////////////////////////////////////////////// + /** + * 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 + */ + function envelope(fc: GeoJSON.FeatureCollection): GeoJSON.Feature; - ////////////////////////////////////////////////////////////////////////// + /** + * Takes a set of features, calculates the extent of all input features, and returns a bounding box. + * @param input Input features + * @returns The bounding box of input given as an array in WSEN order (west, south, east, north) + */ + function extent(input: GeoJSON.Feature | GeoJSON.FeatureCollection): Array; + + /** + * Takes a line and measures its length in the specified units. + * @param line Line to measure + * @param units Can be degrees, radians, miles, or kilometers + * @returns Length of the input line + */ + function lineDistance(line: GeoJSON.Feature, units: string): 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 + */ + function midpoint(pt1: GeoJSON.Feature, pt2: GeoJSON.Feature): GeoJSON.Feature; + + /** + * 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 + */ + function pointOnSurface(input: GeoJSON.Feature | GeoJSON.FeatureCollection): GeoJSON.Feature; + + /** + * Takes a bounding box and returns a new bounding box with a size expanded or contracted by a factor of X. + * @param bbox A bounding box + * @param factor The ratio of the new bbox to the input bbox + * @returns The resized bbox + */ + function size(bbox: Array, factor: number): Array; + + /** + * 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 + */ + function square(bbox: Array): Array; + + ////////////////////////////////////////////////////// + // Transformation + ////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////// // Misc - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// /** * Takes a Point and a LineString and calculates the closest Point on the LineString. @@ -55,27 +146,27 @@ declare module turf { */ function pointOnLine(line: GeoJSON.Feature, point: GeoJSON.Feature): GeoJSON.Feature; - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Helper - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Data - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Interpolation - //////////////////////////////////////////////////////////////////////////; + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Joins - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Classification - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// // Types - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// }