Turf.jsMeta

turf.segmentEach

What is turf.segmentEach?

turf.segmentEach walks every consecutive pair of coordinates in any LineString, MultiLineString, Polygon, or MultiPolygon boundary — yielding each pair as a two-vertex LineString Feature.

JavaScript
turf.segmentEach(geojson, callback) → void

The callback receives (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex).

When would you use turf.segmentEach?

Use turf.segmentEach whenever an algorithm operates on line segments rather than whole lines — computing per-segment lengths or bearings, intersecting segments against a query line, or rendering an edge-level dataset from a network.

It also pairs well with spatial indices: build an R-tree over segments for fast segment-level queries instead of iterating features manually.

JavaScript
1turf.segmentEach(network, (segment) => {
2  const bearing = turf.bearing(
3    turf.point(segment.geometry.coordinates[0]),
4    turf.point(segment.geometry.coordinates[1])
5  );
6  segments.push({ segment, bearing });
7});

FAQs

How do I install Turf.js to use this function?

Install npm install @turf/meta and import import { segmentEach } from '@turf/meta', or use turf.segmentEach through @turf/turf.

Does segmentEach visit polygon rings?

Yes. Every closed ring (outer and holes) contributes its consecutive coordinate pairs as segments — which is useful for per-edge polygon analysis.

Are segments cloned or referenced?

Each yielded segment is a freshly constructed LineString Feature whose coordinates reference the original positions. Mutating the positions affects the underlying geometry — be careful.

When should I use segmentEach vs coordEach?

Use segmentEach when your algorithm works in pairs (edges). Use coordEach when you only care about individual vertices. A segment is the edge between two vertices, so they answer different questions.