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
x
alongx
areax
bboxx
bboxPolygonx
bearingx
centerx
centroidx
destinationx
distancex
lengthx
midpointx
rhumbBearingx
rhumbDestinationx
rhumbDistance
Coordinate Mutation
x
cleanCoordsx
truncate
Transformation
x
clone - implemented as a member function of each GeoJSONObjectx
polygonSmoothx
transformRotatex
polyLineDecode
Feature Conversion
x
explodex
lineToPolygonx
polygonToLine
MISC
x
lineSegmentx
nearestPointOnLine
Random
Data
Interpolation
Joins
Grids
Classification
Aggregation
META
x
coordAllx
coordEachx
coordReducex
featureEachx
featureReducex
flattenEachx
flattenReducex
geomEachx
geomReducex
propEachx
propReducex
segmentEachx
segmentReducex
getClusterx
clusterEachx
clusterReduce
Invariants
Booleans
x
booleanClockwisex
booleanConcavex
booleanContainsx
booleanCrossesx
booleanDisjointx
booleanEqualx
booleanIntersectsx
booleanParallelx
booleanPointInPolygonx
booleanPointOnLine
Unit Conversion
x
bearingToAzimuthx
convertAreax
convertLengthx
degreesToRadiansx
lengthToRadiansx
lengthToDegreesx
radiansToLengthx
radiansToDegrees