Measurements and Transformations
This document covers Turf.js modules that perform spatial measurements and geometric transformations on GeoJSON features. These functions calculate distances, bearings, areas, and transform coordinates between different representations. For geometric operations like buffer, union, and intersection, see Geometric Operations. For spatial analysis functions like clustering and interpolation, see Spatial Analysis.
Overview
The measurements and transformations system consists of two main categories of functions:
Measurement Functions calculate spatial properties without modifying input geometries:
- Distance calculations (
@turf/distance,@turf/rhumb-distance) - Area calculations (
@turf/area) - Bearing calculations (
@turf/bearing,@turf/rhumb-bearing) - Bounding box generation (
@turf/bbox)
Transformation Functions create new geometries from existing ones:
- Point generation from coordinates (
@turf/destination,@turf/along) - Shape creation (
@turf/circle,@turf/bbox-polygon) - Coordinate processing (
@turf/truncate,@turf/midpoint) - Tessellation (
@turf/tesselate,@turf/tin)
Geodesic vs Rhumb Line Calculations
The system provides two approaches for distance and bearing calculations:
Geodesic Calculations follow the shortest path on Earth's surface (great circle routes):
distance()- great circle distancebearing()- initial bearing along great circledestination()- point at distance/bearing along great circlealong()- point along line at specific distance
Rhumb Line Calculations follow lines of constant bearing (loxodromes):
rhumbDistance()- distance along rhumb linerhumbBearing()- constant bearing between pointsrhumbDestination()- point at distance/bearing along rhumb line
Core Dependencies and Architecture
All measurement and transformation functions depend on the foundational modules from Core Modules:
| Function Category | Dependencies |
|---|---|
| Distance/Bearing | @turf/helpers, @turf/invariant |
| Area Calculations | @turf/helpers, @turf/meta |
| Point Generation | @turf/helpers, @turf/invariant |
| Shape Creation | @turf/helpers, external libraries |
Coordinate Handling and Edge Cases
The system handles several coordinate edge cases, particularly around the 180th meridian:
180th Meridian Crossing: Functions like rhumbDistance() and rhumbDestination() implement meridian compensation:
// From rhumb-destination implementation
destination[0] += destination[0] - coords[0] > 180 ? -360
: coords[0] - destination[0] > 180 ? 360 : 0;Coordinate Validation: All functions use getCoord() from @turf/invariant to extract and validate coordinates from various input types (Point features, coordinate arrays, etc.).
Unit Conversions: Distance and bearing functions accept multiple units through convertLength() from @turf/helpers:
| Supported Units |
|---|
| kilometers, miles, meters |
| feet, inches, yards |
| nauticalMiles, degrees, radians |
Specialized Geometric Transformations
Beyond basic measurements, the system includes specialized transformation functions:
Tessellation Functions:
tesselate()- converts polygons to triangles using earcut algorithmtin()- creates Triangulated Irregular Network from pointskinks()- finds self-intersection points in geometries
Shape Generation Functions:
circle()- creates circular polygons from center point and radiusbboxPolygon()- converts bounding box to polygon geometrysquare()- calculates minimum square bounding box