turf.dart
THIS PROJECT IS WORK IN PROCESS
A turf.js-like geospatial analysis library working with GeoJSON, written in pure Dart.
This includes a fully RFC 7946-compliant object-representation and serialization for GeoJSON.
Most of the implementation is a direct translation from turf.js.
Get started
- Get the Dart tools
- Install the library with
dart pub add turf - Import the library in your code and use it. For example:
import 'package:turf/helpers.dart';
import 'package:turf/src/line_segment.dart';
Feature<Polygon> poly = Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position(0, 0),
Position(2, 2),
Position(0, 1),
Position(0, 0),
],
[
Position(0, 0),
Position(1, 1),
Position(0, 1),
Position(0, 0),
],
]),
);
void main() {
var total = segmentReduce<int>(
poly,
(previousValue, currentSegment, initialValue, featureIndex,
multiFeatureIndex, geometryIndex, segmentIndex) {
if (previousValue != null) {
previousValue++;
}
return previousValue;
},
0,
combineNestedGeometries: false,
);
print(total);
// total == 6
}
GeoJSON Object Model

Notable Design Decisions
- Nested
GeometryCollections(as described in RFC 7946 section 3.1.8) are not supported which takes a slightly firmer stance than the "should avoid" language in the specification
Tests and Benchmarks
Tests are run with dart test and benchmarks can be run with
dart run benchmark
Any new benchmarks must be named *_benchmark.dart and reside in the
./benchmark folder.
Components
Measurement
xalongxareaxbboxxbboxPolygonxbearingxcentercenterOfMassxcentroidxdestinationxdistanceenvelopexlengthxmidpointpointOnFeaturepolygonTangentspointToLineDistancexrhumbBearingxrhumbDestinationxrhumbDistancesquaregreatCircle
Coordinate Mutation
xcleanCoordsfliprewindroundxtruncate
Transformation
bboxClipbezierSplinebuffercirclexclone - implemented as a member function of each GeoJSONObjectconcaveconvexdifferencedissolveintersectlineOffsetxpolygonSmoothsimplifytesselatextransformRotatetransformTranslatetransformScaleunionvoronoixpolyLineDecode
Feature Conversion
combinexexplodeflattenxlineToPolygonpolygonizexpolygonToLine
MISC
ellipsekinkslineArclineChunklineIntersectlineOverlapxlineSegmentlineSlicelineSliceAlonglineSplitmaskxnearestPointOnLinesectorshortestPathunkinkPolygon
Random
randomPositionrandomPointrandomLineStringrandomPolygon
Data
sample
Interpolation
interpolateisobandsisolinesplanepointtin
Joins
pointsWithinPolygontag
Grids
hexGridpointGridsquareGridtriangleGrid
Classification
Aggregation
collectclustersDbscanclustersKmeans
META
xcoordAllxcoordEachxcoordReducexfeatureEachxfeatureReducexflattenEachxflattenReducexgeomEachxgeomReducexpropEachxpropReducexsegmentEachxsegmentReducexgetClusterxclusterEachxclusterReduce
Invariants
Booleans
xbooleanClockwisexbooleanConcavexbooleanContainsxbooleanCrossesxbooleanDisjointxbooleanEqualxbooleanIntersectsbooleanOverlapxbooleanParallelxbooleanPointInPolygonxbooleanPointOnLinebooleanWithin
Unit Conversion
xbearingToAzimuthxconvertAreaxconvertLengthxdegreesToRadiansxlengthToRadiansxlengthToDegreesxradiansToLengthxradiansToDegreestoMercatortoWgs84