geodart 0.0.1 geodart: ^0.0.1 copied to clipboard
A geospatial toolkit written in dart
Geodart #
A geospatial library for Dart. Designed primarily around vector features, this library provides a simple interface for working with geographic data.
It's based heavily on the geojson specification, but has been extended to add functionality directly to the feature types.
Getting started #
Add it to your dependencies:
dependencies:
geodart: '^0.0.1'
OR run this command to install it:
flutter pub add geodart
Then import it:
import 'package:geodart/features.dart';
import 'package:geodart/measure.dart';
Features #
The following features are included in this library:
The package also provides a Feature
class, which is a
abstract class that can be extended to create new feature types.
Positions are stored using Coordinate
objects, which has a variety of
convenience methods for working with coordinates.
Feature Collection #
A FeatureCollection
is a collection of
Feature
objects.
It functions very similarly to a List
of Feature
objects,
but might extended to include additional properties in the future.
Constructors
FeatureCollection.fromJson(Map<String, dynamic> json)
- Creates aFeatureCollection
from a JSON object. Automatically converts features from GeoJSON to their respective types.
Methods
toJson()
- Returns a JSON object representing theFeatureCollection
. Automatically converts features to GeoJSON.
Properties
Point #
A Point
is a single position. It is represented by a Coordinate
object.
Constructors
Point.fromJson(Map<String, dynamic> json)
- Creates aPoint
from aMap
of GeoJSON data.Point.fromLngLat(num lng, num lat)
- Creates aPoint
from anum
longitude and latitude.Point.fromWKT(String wkt)
- Creates aPoint
from a Well-Known Text string.
Methods
explode()
- Returns aList
of itself.toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing thePoint
.
Properties
coordinates
- TheCoordinate
of thePoint
.type
- The type of thePoint
. Always"Point"
.properties
- AMap
of properties.
Multi Point #
A MultiPoint
is a collection of Coordinate
objects, represented by individual and non-connected points.
Constructors
MultiPoint.fromJson(Map<String, dynamic> json)
- Creates aMultiPoint
from aMap
of GeoJSON data.MultiPoint.fromWKT(String wkt)
- Creates aMultiPoint
from a Well-Known Text string.
Methods
explode()
- Returns aList
ofPoint
objects.toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing theMultiPoint
.union(MultiPoint other)
- Merges theMultiPoint
with anotherMultiPoint
.flatten()
- Returns aList
ofPoint
objects.
Properties
coordinates
- AList
ofCoordinate
objects.type
- The type of theMultiPoint
. Always"MultiPoint"
.properties
- AMap
of properties.
Line String #
A LineString
is a collection of Coordinate
objects that form a line.
Constructors
LineString.fromJson(Map<String, dynamic> json)
- Creates aLineString
from aMap
of GeoJSON data.LineString.fromWkt(String wkt)
- Creates aLineString
from a Well-Known Text string.
Methods
along(distance)
- Returns aPoint
at the specified distance along the line.explode()
- Returns aList
ofPoint
objects that make up the LineString.midpoint()
- Returns aPoint
at the midpoint of the LineString.toJson()
- Returns a GeoJSONMap
of the LineString.toPolygon()
- Returns aPolygon
that is the same as the LineString. LineString must be closed, or an exception will be thrown.toWKT()
- Returns aString
of the LineString in WKT format.
Properties
coordinates
- AList
ofCoordinate
objects that make up the LineString.type
- The type of the LineString. Always"LineString"
.isClosedRing
- A boolean indicating whether the LineString is a closed ring.length
- The length (in meters) of the LineString.properties
- AMap
of properties.
Multi Line String #
A MultiLineString
is a collection of Coordinate
objects that form multiple separate LineStrings with one set of shared properties.
Constructor
MultiLineString.fromJson(Map<String, dynamic> json)
- Creates aMultiLineString
from aMap
of GeoJSON data.MultiLineString.fromWkt(String wkt)
- Creates aMultiLineString
from a Well-Known Text string.
Methods
explode()
- Returns aList
ofLineString
objects.toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing theMultiLineString
.union(MultiLineString other)
- Merges theMultiLineString
with anotherMultiLineString
.flatten()
- Returns aList
ofLineString
objects.
Properties
coordinates
- A nestedList
ofCoordinate
objects.type
- The type of theMultiLineString
. Always"MultiLineString"
.properties
- AMap
of properties.
Polygon #
A Polygon
is a collection of [LinearRing
](#Linear Ring) objects that form a closed ring. The first LinearRing in the list is the outer ring, and any subsequent LinearRings are holes. Holes should be contained within the outer ring - if they are not, some algorithms may not work correctly. A Polygon should also not intersect itself - again, some algorithms may not work correctly if this is not the case.
Constructors
Polygon.fromJson(Map<String, dynamic> json)
- Creates aPolygon
from aMap
of GeoJSON data.Polygon.fromWkt(String wkt)
- Creates aPolygon
from a Well-Known Text string.
Methods
explode()
- Returns aList
ofPoint
objects.toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing thePolygon
.toLineString()
- Returns aLineString
that is the same geometry as thePolygon
.
Properties
coordinates
- AList
of [LinearRing
](#Linear Ring) objects.type
- The type of thePolygon
. Always"Polygon"
.area
- The are (in square meters) of the Polygon.properties
- AMap
of properties.
Multi Polygon #
A MultiPolygon
is a collection of Polygon
geometries forming one MultiPolygon with shared properties.
Constructors
MultiPolygon.fromJson(Map<String, dynamic> json)
- Creates aMultiPolygon
from aMap
of GeoJSON data.MultiPolygon.fromWkt(String wkt)
- Creates aMultiPolygon
from a Well-Known Text string.
Methods
explode()
- Returns aList
ofPoint
objects.toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing theMultiPolygon
.union(MultiPolygon other)
- Merges theMultiPolygon
with anotherMultiPolygon
.flatten()
- Returns aList
ofPolygon
objects.toMultiLineString()
- Returns aMultiLineString
that is the same geometry as theMultiPolygon
.
Properties
coordinates
- AList
ofPolygon
objects.type
- The type of theMultiPolygon
. Always"MultiPolygon"
.properties
- AMap
of properties.area
- The are (in square meters) of the MultiPolygon.
Coordinate #
A Coordinate
is a point in a two-dimensional Cartesian coordinate system.
Constructors
Coordinate.fromJson(Map<String, dynamic> json)
- Creates aCoordinate
from aMap
of GeoJSON data.Coordinate.fromWkt(String wkt)
- Creates aCoordinate
from a Well-Known Text string.
Methods
toJson()
- Returns aMap
of GeoJSON data.toWKT()
- Returns a Well-Known Text string representing theCoordinate
.distanceTo(Coordinate other)
- Returns the distance (in meters) between theCoordinate
and anotherCoordinate
.bearingTo(Coordinate other)
- Returns the bearing (in degrees) between theCoordinate
and anotherCoordinate
.destination(num distance, num bearing)
- Returns aCoordinate
that is the same geometry as theCoordinate
but moved a given distance and bearing.interpolate(Coordinate other, num fraction)
- Returns aCoordinate
that is the same geometry as theCoordinate
but moved a given fraction of the distance and bearing to anotherCoordinate
.
Properties
latitude
- The latitude of theCoordinate
.longitude
- The longitude of theCoordinate
.type
- The type of theCoordinate
. Always"Coordinate"
.
Usage #
Measure the distance between two points.
import 'package:geodart/measure.dart';
import 'package:geodart/features.dart';
double distanceBetween = distance(
Point.fromLngLat(1.0, 1.0),
Point.fromLngLat(2.0, 2.0),
);
Under the hood, this uses the coordinate distanceTo()
function, and could be very easily replaced with a different algorithm.
I prefer the distanceTo()
function because it is more explicit and easier to read.
import 'package:geodart/features.dart';
double distanceBetween = Coordinate(1.0, 1.0).distanceTo(Coordinate(2.0, 2.0));
Measure the area of a polygon.
import 'package:geodart/features.dart';
Polygon polygon = Polygon.fromJson(
{
'type': 'Polygon',
'coordinates': [
[
[1.0, 1.0],
[2.0, 1.0],
[2.0, 2.0],
[1.0, 1.0],
],
],
}
);
print(polygon.area);
Measure the length of a LineString.
LineString
length is calculated on the fly.
import 'package:geodart/features.dart';
LineString lineString = LineString.fromJson(
{
'type': 'LineString',
'coordinates': [
[1.0, 1.0],
[2.0, 2.0],
],
}
);
print(lineString.length);
Additional information #
License #
This library is free software under the terms of the MIT license. See the LICENSE file for more details.
Contributing #
If you have any questions or comments, please open an issue on the Github repository.
If you want to make a pull request, please open a pull request on the Github repository. Please make sure to include a test suite. I make no promises that I will accept pull requests, but I will try my best to keep the code up to date.