Skip to content

A turf.js-like geospatial analysis library working with GeoJSON, written in pure Dart.

License

Notifications You must be signed in to change notification settings

aardrop/turf_dart

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

turf.dart

pub package

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

polymorphism

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

Coordinate Mutation

Transformation

  • bboxClip
  • bezierSpline
  • buffer
  • circle
  • clone - implemented as a member function of each [GeoJSONObject]
  • concave
  • convex
  • difference
  • dissolve
  • intersect
  • lineOffset
  • polygonSmooth
  • simplify
  • tesselate
  • transformRotate
  • transformTranslate
  • transformScale
  • union
  • voronoi
  • polyLineDecode

Feature Conversion

MISC

Random

  • randomPosition
  • randomPoint
  • randomLineString
  • randomPolygon

Data

  • sample

Interpolation

  • interpolate
  • isobands
  • isolines
  • planepoint
  • tin

Joins

  • pointsWithinPolygon
  • tag

Grids

  • hexGrid
  • pointGrid
  • squareGrid
  • triangleGrid

Classification

Aggregation

  • collect
  • clustersDbscan
  • clustersKmeans

META

Invariants

Booleans

Unit Conversion

About

A turf.js-like geospatial analysis library working with GeoJSON, written in pure Dart.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 99.9%
  • Shell 0.1%