Turf.js spatial analysis skill for Claude Code.
bash
turf-skills --action <name> [options]
ActionDescriptionRequiredOptionaldistanceDistance between two points 两点距离input, input2unitsareaArea of polygon 多边形面积(m²)inputlengthLength of line 线长度inputunitsbearingBearing between points 方位角input, input2destinationPoint at distance+bearing 目标点inputdistance, direction, unitsmidpointMidpoint of two points 中点input, input2centerCenter of features 中心点inputcentroidCentroid 质心inputcenterOfMassCenter of mass 重心inputalongPoint along line 沿线取点inputdistance, unitsbboxBounding box 边界框inputbboxPolygonBbox as polygon 边界框多边形input or bboxenvelopeEnvelope 包络矩形input
ActionDescriptionRequiredOptionalbooleanPointInPolygonPoint in polygon 点在多边形内input(point), input2(polygon)booleanContainsFeature contains another 包含input, input2booleanCrossesFeatures cross 交叉input, input2booleanDisjointFeatures disjoint 不相交input, input2booleanEqualFeatures equal 相等input, input2booleanIntersectsFeatures intersect 相交input, input2booleanOverlapFeatures overlap 重叠input, input2booleanWithinFeature within another 在内部input, input2booleanParallelLines parallel 平行input, input2booleanPointOnLinePoint on line 点在线上input(point), input2(line)nearestPointNearest point in collection 最近点input(point), input2(FC)
ActionDescriptionRequiredOptionalbufferBuffer zone 缓冲区inputradius, unitsunionUnion polygons 合并input, input2intersectIntersect polygons 求交input, input2differenceDifference polygons 求差input, input2simplifySimplify geometry 简化inputtoleranceconvexConvex hull 凸包inputconcaveConcave hull 凹包inputmaxEdge, unitsdissolveDissolve polygons 融合input(FC)propertyNamevoronoiVoronoi diagram 泰森多边形input(points)bboxtinTIN 不规则三角网input(points)propertyNamebezierSplineBezier spline 贝塞尔曲线input(line)resolution, sharpnesstransformRotateRotate 旋转inputangletransformScaleScale 缩放inputfactortransformTranslateTranslate 平移inputdistance, direction, units
ActionDescriptionRequiredOptionalpointCreate point 创建点coordinatespropertieslineStringCreate line 创建线coordinatespropertiespolygonCreate polygon 创建面coordinatespropertiesmultiPointCreate MultiPointcoordinatespropertiesmultiLineStringCreate MultiLineStringcoordinatespropertiesmultiPolygonCreate MultiPolygoncoordinatespropertiesrandomPointRandom points 随机点count, bboxrandomLineStringRandom lines 随机线count, bboxrandomPolygonRandom polygons 随机面count, bbox
ActionDescriptionRequiredOptionalinterpolateIDW interpolation 反距离加权插值input(points)cellSide, gridType, propertyName, unitsisobandsIsobands 等值面input(points)breaks, propertyNameisolinesIsolines 等值线input(points)breaks, propertyNamehexGridHex grid 六边形网格bbox, cellSideunitspointGridPoint grid 点网格bbox, cellSideunitssquareGridSquare grid 方形网格bbox, cellSideunitstriangleGridTriangle grid 三角网格bbox, cellSideunits
ActionDescriptionRequiredOptionalclustersKmeansK-means clustering K均值聚类input(points FC)numberOfClustersclustersDbscanDBSCAN clustering 密度聚类input(points FC)maxDistance, units, minPoints
bash
turf-skills --action distance \
--input '{"type":"Point","coordinates":[120,30]}' \
--input2 '{"type":"Point","coordinates":[121,31]}' \
--units kilometers
bash
turf-skills --action booleanPointInPolygon \
--input '{"type":"Point","coordinates":[120.5,30.5]}' \
--input2 '{"type":"Polygon","coordinates":[[[120,30],[121,30],[121,31],[120,31],[120,30]]]}'
bash
turf-skills --action buffer \
--input '{"type":"Point","coordinates":[120,30]}' \
--radius 5 --units kilometers
bash
turf-skills --action area --file polygon.geojson
turf-skills --action booleanContains --file polygon.geojson --file2 point.geojson
bash
turf-skills --action buffer --file point.geojson --radius 10 --output result.geojson
bash
turf-skills --action point --coordinates '[120,30]' --properties '{"name":"test"}'
turf-skills --action randomPoint --count 100 --bbox '[120,30,121,31]'
bash
turf-skills --action hexGrid --bbox '[120,30,121,31]' --cellSide 5 --units kilometers
bash
turf-skills --action clustersKmeans --file points.geojson --numberOfClusters 5
turf-skills --action clustersDbscan --file points.geojson --maxDistance 1 --minPoints 3
Query PatternActionExample"distance between [coordinates]"distance"Calculate distance between [120,30] and [121,31]""area of [polygon]"area"Find area of this polygon""length of [line]"length"Calculate length of this line in km""is [point] inside [polygon]"booleanPointInPolygon"Is this point inside the polygon?""buffer [radius] km/mi around [point]"buffer"Create a 5km buffer around this point""convex hull of [points]"convex"Compute convex hull of these points""cluster points into [n] groups"clustersKmeans"Cluster these points into 5 groups""nearest point to [location]"nearestPoint"Find nearest point to [120,30]""simplify geometry"simplify"Simplify this geometry""union/intersect/difference"union/intersect/difference"Union these two polygons""generate hex/square/triangle grid"hexGrid/squareGrid/triangleGrid"Generate hex grid for this area""rotate/scale/translate"transformRotate/transformScale/transformTranslate"Rotate this polygon by 45 degrees"
查询模式操作示例"计算...的距离"distance"计算北京和上海的距离""计算...的面积"area"计算这个多边形的面积""点是否在多边形内"booleanPointInPolygon"天安门是否在五环内?""创建...缓冲区"buffer"创建5公里缓冲区""计算凸包"convex"计算这些点的凸包""聚类分析"clustersKmeans/clustersDbscan"对这些点进行聚类""查找最近点"nearestPoint"查找距离[120,30]最近的点""生成网格"hexGrid/squareGrid"生成六边形网格""旋转/缩放/平移"transformRotate/transformScale/transformTranslate"旋转多边形45度"
bash
# Beijing to Shanghai distance
turf-skills --action distance \
--input '{"type":"Point","coordinates":[116.397428,39.90923]}' \
--input2 '{"type":"Point","coordinates":[121.473701,31.230416]}' \
--units kilometers
# 5km buffer around a location
turf-skills --action buffer \
--input '{"type":"Point","coordinates":[116.397428,39.90923]}' \
--radius 5 --units kilometers
# Point in polygon check
turf-skills --action booleanPointInPolygon \
--input '{"type":"Point","coordinates":[116.397428,39.90923]}' \
--input2 '{"type":"Polygon","coordinates":[[[116.1,39.7],[116.8,39.7],[116.8,40.1],[116.1,40.1],[116.1,39.7]]]}'
# Generate hex grid for a region
turf-skills --action hexGrid --bbox '[116,39,117,40]' --cellSide 10 --units kilometers
# K-means clustering
turf-skills --action clustersKmeans --file points.geojson --numberOfClusters 3
Always validate coordinates before processing:
--file for reading GeoJSON files--output to save results.geojson and .json extensionsbash
# Create 5km delivery zones around stores
turf-skills --action buffer \
--file stores.geojson \
--radius 5 \
--units kilometers \
--output delivery-zones.geojson
bash
# Check if customer address is within service area
turf-skills --action booleanPointInPolygon \
--input '{"type":"Point","coordinates":[lng,lat]}' \
--file service-area.geojson
bash
# Cluster customer locations for optimal store placement
turf-skills --action clustersKmeans \
--file customers.geojson \
--numberOfClusters 5 \
--output clusters.geojson
bash
# Generate hex grid for population density visualization
turf-skills --action hexGrid \
--bbox '[116,39,117,40]' \
--cellSide 1 \
--units kilometers \
--output grid.geojson
bash
# Simplify GPS track for storage efficiency
turf-skills --action simplify \
--file gps-track.geojson \
--tolerance 0.0001 \
--output simplified-track.geojson
json
{
"type": "Feature",
"properties": {
"name": "Beijing",
"population": 21540000
},
"geometry": {
"type": "Point",
"coordinates": [116.397428, 39.90923]
}
}
Point - 点LineString - 线Polygon - 面MultiPoint - 多点MultiLineString - 多线MultiPolygon - 多面FeatureCollection - 要素集合Issue: "Error: Unknown action"
--list to see available actionsIssue: "Error: Cannot read property"
Issue: Empty result for intersection/union
Issue: Distance calculation seems wrong