@turf/helpers vs @turf/invariant vs @turf/meta vs @turf/turf
Geospatial Analysis Libraries Comparison
1 Year
@turf/helpers@turf/invariant@turf/meta@turf/turf
What's Geospatial Analysis Libraries?

The Turf.js suite provides a collection of geospatial analysis libraries that enable developers to work with geographic data in JavaScript. These libraries are designed to facilitate various geospatial operations, such as calculating distances, manipulating geometries, and performing spatial analysis. Each package serves a unique purpose within the Turf ecosystem, allowing for modular usage depending on the specific needs of a project. By leveraging these tools, developers can efficiently handle complex geospatial tasks and integrate geographic data into their applications.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
@turf/helpers5,924,2709,573151 kB2542 months agoMIT
@turf/invariant4,928,4679,57345.6 kB2542 months agoMIT
@turf/meta4,789,4929,573217 kB2542 months agoMIT
@turf/turf1,112,3019,573620 kB2542 months agoMIT
Feature Comparison: @turf/helpers vs @turf/invariant vs @turf/meta vs @turf/turf

Functionality

  • @turf/helpers:

    @turf/helpers offers a wide range of utility functions for creating, manipulating, and transforming geometries. It includes functions for calculating areas, distances, and various geometric operations, making it a versatile tool for geospatial developers.

  • @turf/invariant:

    @turf/invariant focuses on geometry validation and type-checking, ensuring that the geometries adhere to the GeoJSON format. This package is crucial for maintaining data quality and preventing errors in geospatial applications.

  • @turf/meta:

    @turf/meta provides functions for working with collections of geometries, allowing developers to easily iterate over features and perform operations like filtering, mapping, and reducing. It simplifies the process of handling multiple geometries at once.

  • @turf/turf:

    @turf/turf is a comprehensive package that consolidates all Turf functionalities, providing a one-stop solution for geospatial analysis. It includes everything from basic geometry operations to advanced spatial analyses, making it suitable for a wide range of applications.

Ease of Use

  • @turf/helpers:

    @turf/helpers is designed for ease of use, with intuitive function names and straightforward parameters. This makes it accessible for developers who may be new to geospatial programming.

  • @turf/invariant:

    @turf/invariant is simple to integrate into existing projects, providing clear error messages and validation checks that help developers quickly identify and fix issues with their geometries.

  • @turf/meta:

    @turf/meta is user-friendly for developers working with multiple geometries, as it abstracts away the complexity of iterating over collections, allowing for cleaner and more readable code.

  • @turf/turf:

    @turf/turf offers a seamless experience for users who want to access a wide array of functions without needing to manage multiple imports. Its comprehensive nature simplifies the development process.

Performance

  • @turf/helpers:

    @turf/helpers is optimized for performance, ensuring that common geospatial operations can be executed quickly and efficiently, which is essential for applications that require real-time data processing.

  • @turf/invariant:

    @turf/invariant performs validation checks without significant overhead, allowing developers to maintain data integrity without sacrificing performance.

  • @turf/meta:

    @turf/meta is efficient in handling collections of geometries, providing optimized functions that minimize processing time when working with large datasets.

  • @turf/turf:

    @turf/turf is designed to handle complex geospatial analyses efficiently, leveraging the strengths of its individual packages while providing a unified interface for performance.

Modularity

  • @turf/helpers:

    @turf/helpers is highly modular, allowing developers to import only the functions they need, which helps reduce bundle size and improve loading times.

  • @turf/invariant:

    @turf/invariant can be used independently, making it easy to integrate into existing projects that require geometry validation without pulling in unnecessary dependencies.

  • @turf/meta:

    @turf/meta is modular in design, enabling developers to use it alongside other Turf packages without conflicts, promoting a clean architecture in geospatial applications.

  • @turf/turf:

    @turf/turf provides a comprehensive solution but may lead to larger bundle sizes if all functions are imported. Developers should consider their specific needs when choosing between modular imports and the complete package.

Community and Support

  • @turf/helpers:

    @turf/helpers benefits from a large community of users and contributors, ensuring that developers can find ample resources, documentation, and support for their geospatial projects.

  • @turf/invariant:

    @turf/invariant is part of the Turf.js ecosystem, which has a strong community backing, providing users with access to forums and discussions regarding best practices and troubleshooting.

  • @turf/meta:

    @turf/meta enjoys community support as part of the Turf.js suite, with documentation and examples available to help developers understand its usage and capabilities.

  • @turf/turf:

    @turf/turf has extensive documentation and a vibrant community, making it easy for developers to find help and resources for implementing geospatial analysis in their applications.

How to Choose: @turf/helpers vs @turf/invariant vs @turf/meta vs @turf/turf
  • @turf/helpers:

    Choose @turf/helpers if you need a comprehensive set of utility functions for manipulating geometries and performing common geospatial tasks. It is ideal for developers looking for reusable code snippets to streamline their geospatial operations.

  • @turf/invariant:

    Select @turf/invariant when you require validation and type-checking for geometries. This package is essential for ensuring that the geometries you work with conform to the GeoJSON specification, making it a good choice for projects that prioritize data integrity.

  • @turf/meta:

    Use @turf/meta if your project involves iterating over multiple geometries or features. This package provides functions that facilitate operations on collections of geometries, making it suitable for tasks that require batch processing or aggregation of geospatial data.

  • @turf/turf:

    Opt for @turf/turf when you need a complete suite of geospatial functions in one package. It is the go-to choice for developers who want to access all Turf functionalities without managing multiple imports, making it convenient for comprehensive geospatial analysis.

README for @turf/helpers

@turf/helpers

helpers

Units

Linear measurement units.

⚠️ Warning. Be aware of the implications of using radian or degree units to measure distance. The distance represented by a degree of longitude varies depending on latitude.

See https://www.thoughtco.com/degree-of-latitude-and-longitude-distance-4070616 for an illustration of this behaviour.

Type: ("meters" | "metres" | "millimeters" | "millimetres" | "centimeters" | "centimetres" | "kilometers" | "kilometres" | "miles" | "nauticalmiles" | "inches" | "yards" | "feet" | "radians" | "degrees")

AreaUnits

Area measurement units.

Type: (Exclude<Units, ("radians" | "degrees")> | "acres" | "hectares")

Grid

Grid types.

Type: ("point" | "square" | "hex" | "triangle")

Corners

Shorthand corner identifiers.

Type: ("sw" | "se" | "nw" | "ne" | "center" | "centroid")

Lines

Geometries made up of lines i.e. lines and polygons.

Type: (LineString | MultiLineString | Polygon | MultiPolygon)

AllGeoJSON

Convenience type for all possible GeoJSON.

Type: (Feature | FeatureCollection | Geometry | GeometryCollection)

earthRadius

The Earth radius in kilometers. Used by Turf modules that model the Earth as a sphere. The mean radius was selected because it is recommended by the Haversine formula (used by turf/distance) to reduce error.

Type: number

factors

Unit of measurement factors based on earthRadius.

Keys are the name of the unit, values are the number of that unit in a single radian

Type: Record<Units, number>

areaFactors

Area of measurement factors based on 1 square meter.

Type: Record<AreaUnits, number>

feature

Wraps a GeoJSON Geometry in a GeoJSON Feature.

Parameters

  • geom (G | null)

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature
  • geometry GeometryObject input geometry

Examples

var geometry = {
  "type": "Point",
  "coordinates": [110, 50]
};

var feature = turf.feature(geometry);

//=feature

Returns Feature<GeometryObject, GeoJsonProperties> a GeoJSON Feature

geometry

Creates a GeoJSON Geometry from a Geometry string type & coordinates. For GeometryCollection type use helpers.geometryCollection

Parameters

  • type ("Point" | "LineString" | "Polygon" | "MultiPoint" | "MultiLineString" | "MultiPolygon") Geometry Type
  • coordinates Array<any> Coordinates
  • _options Record<string, never> (optional, default {})
  • options Object Optional Parameters (optional, default {})

Examples

var type = "Point";
var coordinates = [110, 50];
var geometry = turf.geometry(type, coordinates);
// => geometry

Returns Geometry a GeoJSON Geometry

point

Creates a Point Feature from a Position.

Parameters

  • coordinates Position longitude, latitude position (each in decimal degrees)

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var point = turf.point([-75.343, 39.984]);

//=point

Returns Feature<Point, GeoJsonProperties> a Point feature

points

Creates a Point FeatureCollection from an Array of Point coordinates.

Parameters

  • coordinates Array<Position> an array of Points

  • properties GeoJsonProperties Translate these properties to each Feature (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the FeatureCollection
    • options.id Id? Identifier associated with the FeatureCollection

Examples

var points = turf.points([
  [-75, 39],
  [-80, 45],
  [-78, 50]
]);

//=points

Returns FeatureCollection<Point> Point Feature

polygon

Creates a Polygon Feature from an Array of LinearRings.

Parameters

  • coordinates Array<Array<Position>>

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });

//=polygon

Returns Feature<Polygon, GeoJsonProperties> Polygon Feature

polygons

Creates a Polygon FeatureCollection from an Array of Polygon coordinates.

Parameters

  • coordinates Array<Array<Array<Position>>>

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the FeatureCollection

Examples

var polygons = turf.polygons([
  [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
  [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
]);

//=polygons

Returns FeatureCollection<Polygon, GeoJsonProperties> Polygon FeatureCollection

lineString

Creates a LineString Feature from an Array of Positions.

Parameters

  • coordinates Array<Position> an array of Positions

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});

//=linestring1
//=linestring2

Returns Feature<LineString, GeoJsonProperties> LineString Feature

lineStrings

Creates a LineString FeatureCollection from an Array of LineString coordinates.

Parameters

  • coordinates Array<Array<Position>>

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the FeatureCollection
    • options.id Id? Identifier associated with the FeatureCollection

Examples

var linestrings = turf.lineStrings([
  [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
  [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
]);

//=linestrings

Returns FeatureCollection<LineString, GeoJsonProperties> LineString FeatureCollection

featureCollection

Takes one or more Features and creates a FeatureCollection.

Parameters

  • features Array<Feature<GeometryObject, GeoJsonProperties>> input features

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});

var collection = turf.featureCollection([
  locationA,
  locationB,
  locationC
]);

//=collection

Returns FeatureCollection<GeometryObject, GeoJsonProperties> FeatureCollection of Features

multiLineString

Creates a Feature<MultiLineString> based on a coordinate array. Properties can be added optionally.

Parameters

  • coordinates Array<Array<Position>>

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var multiLine = turf.multiLineString([[[0,0],[10,10]]]);

//=multiLine
  • Throws Error if no coordinates are passed

Returns Feature<MultiLineString, GeoJsonProperties> a MultiLineString feature

multiPoint

Creates a Feature<MultiPoint> based on a coordinate array. Properties can be added optionally.

Parameters

  • coordinates Array<Position> an array of Positions

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var multiPt = turf.multiPoint([[0,0],[10,10]]);

//=multiPt
  • Throws Error if no coordinates are passed

Returns Feature<MultiPoint, GeoJsonProperties> a MultiPoint feature

multiPolygon

Creates a Feature<MultiPolygon> based on a coordinate array. Properties can be added optionally.

Parameters

  • coordinates Array<Array<Array<Position>>>

  • properties GeoJsonProperties an Object of key-value pairs to add as properties (optional, default {})

  • options Object Optional Parameters (optional, default {})

    • options.bbox BBox? Bounding Box Array [west, south, east, north] associated with the Feature
    • options.id Id? Identifier associated with the Feature

Examples

var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);

//=multiPoly
  • Throws Error if no coordinates are passed

Returns Feature<MultiPolygon, GeoJsonProperties> a multipolygon feature

geometryCollection

Creates a Feature based on a coordinate array. Properties can be added optionally.

Parameters

Examples

var pt = turf.geometry("Point", [100, 0]);
var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
var collection = turf.geometryCollection([pt, line]);

// => collection

Returns Feature<GeometryCollection, GeoJsonProperties> a GeoJSON GeometryCollection Feature

round

Round number to precision

Parameters

  • num number Number
  • precision number Precision (optional, default 0)

Examples

turf.round(120.4321)
//=120

turf.round(120.4321, 2)
//=120.43

Returns number rounded number

radiansToLength

Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit. Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet

Parameters

  • radians number in radians across the sphere
  • units Units can be degrees, radians, miles, inches, yards, metres, meters, kilometres, kilometers. (optional, default "kilometers")

Returns number distance

lengthToRadians

Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet

Parameters

  • distance number in real units
  • units Units can be degrees, radians, miles, inches, yards, metres, meters, kilometres, kilometers. (optional, default "kilometers")

Returns number radians

lengthToDegrees

Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet

Parameters

  • distance number in real units
  • units Units can be degrees, radians, miles, inches, yards, metres, meters, kilometres, kilometers. (optional, default "kilometers")

Returns number degrees

bearingToAzimuth

Converts any bearing angle from the north line direction (positive clockwise) and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line

Parameters

  • bearing number angle, between -180 and +180 degrees

Returns number angle between 0 and 360 degrees

azimuthToBearing

Converts any azimuth angle from the north line direction (positive clockwise) and returns an angle between -180 and +180 degrees (positive clockwise), 0 being the north line

Parameters

  • angle number between 0 and 360 degrees

Returns number bearing between -180 and +180 degrees

radiansToDegrees

Converts an angle in radians to degrees

Parameters

  • radians number angle in radians

Returns number degrees between 0 and 360 degrees

degreesToRadians

Converts an angle in degrees to radians

Parameters

  • degrees number angle between 0 and 360 degrees

Returns number angle in radians

convertLength

Converts a length from one unit to another.

Parameters

  • length number Length to be converted
  • originalUnit Units Input length unit (optional, default "kilometers")
  • finalUnit Units Returned length unit (optional, default "kilometers")

Returns number The converted length

convertArea

Converts an area from one unit to another.

Parameters

  • area number Area to be converted
  • originalUnit AreaUnits Input area unit (optional, default "meters")
  • finalUnit AreaUnits Returned area unit (optional, default "kilometers")

Returns number The converted length

isNumber

isNumber

Parameters

  • num any Number to validate

Examples

turf.isNumber(123)
//=true
turf.isNumber('foo')
//=false

Returns boolean true/false

isObject

isObject

Parameters

  • input any variable to validate

Examples

turf.isObject({elevation: 10})
//=true
turf.isObject('foo')
//=false

Returns boolean true/false, including false for Arrays and Functions


This module is part of the Turfjs project, an open source module collection dedicated to geographic algorithms. It is maintained in the Turfjs/turf repository, where you can create PRs and issues.

Installation

Install this single module individually:

$ npm install @turf/helpers

Or install the all-encompassing @turf/turf module that includes all modules as functions:

$ npm install @turf/turf