A TurfJs-like geospatial analysis library written in pure Dart.
–> Join our Dart / Flutter GIS Community on Discord <–
TurfDart is a Dart library for spatial analysis. It includes traditional spatial operations, helper functions for creating GeoJSON data, and data classification and statistics tools. You can use TurfDart in your Flutter applications on the web, mobile and desktop or in pure Dart applications running on the server.
As the foundation, we are using Geotypes, a lightweight dart library that provides a strong GeoJSON object model and fully RFC 7946 compliant serializers.
Most of the functionality is a translation from turf.js, the progress can be found here.
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.
Libraries
- along
- area
- bbox
- bbox_polygon
- bearing
- boolean
- center
- centroid
- clean_coords
- clusters
- destination
- distance
- explode
- extensions
- helpers
- invariant
- length
- line_intersect
- line_overlap
- line_segment
- line_slice
- line_to_polygon
- meta
- midpoint
- nearest_point
- nearest_point_on_line
- polygon_smooth
- polygon_to_line
- polyline
- transform
- truncate
- turf