Buffers and distance
Quick answer
This tutorial separates distance questions from extent questions: distance, length and pointToLineDistance report how far, while buffer expands a geometry into an influence area. It explains the radius, units and steps options, why steps: 8 creates a visible octagon, how line buffers become corridors, and the difference between geodesic Turf buffers and planar projected buffers. You will be able to build accurate radius queries.
turf.buffer( geojson , radius , options ) → Feature<Polygon | MultiPolygon>
Key points
- Always pass { units: 'meters' } with the radius, because turf.buffer defaults to kilometers.
- Raise steps to about 64 for display buffers and keep 8 to 16 for point-in-polygon tests.
- Expect MultiPolygon output from line buffers when corners or self-intersections occur.
Example
var a = turf.point([116.391263, 39.907359]);
var b = turf.point([116.410600, 39.914700]);
console.log(turf.distance(a, b)); // 1.84 km,默认公里
console.log(turf.distance(a, b, { units: 'meters' })); // 1840 米左右
console.log(turf.distance(a, b, { units: 'miles' })); // 1.14 英里左右var site = turf.point([116.391263, 39.907359], { name: '站点' });
var strict = turf.buffer(site, 1, { units: 'kilometers', steps: 64 });
var coarse = turf.buffer(site, 1, { units: 'kilometers', steps: 8 });
console.log(turf.area(strict).toFixed(0)); // 约 3 140 000 平方米
console.log(turf.area(coarse).toFixed(0)); // 明显偏小,八边形内接于圆
Notes
- Writing turf.buffer(pt, 500) for 500 meters produces a 500-kilometer polygon covering half a province.
- Calling buffer on empty or null geometries returns undefined and later geometry access throws.
English edition written for Atlaslog. Code is taken from the original Chinese page and runs unchanged.
Atlaslog (2026). Buffers and distance. https://www.jingweizhi.com/en/turf/tutorials/buffer-distance.html (accessed 2026-11-03).