geodart 0.1.0 geodart: ^0.1.0 copied to clipboard
A geospatial toolkit written in dart. Designed to make it easier to work with vector features.
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.
Geometries #
To use this library, you'll need to get familiar with the feature types. All other actions taken depend on using the proper feature types. These feature types are very similar to the ones used in the geojson specification.
I'll admit, the feature coordinates are a bit of a mess. I'm working on a better way to handle this.
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/measurements.dart';
import 'package:geodart/geometries.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/geometries.dart';
double distanceBetween = Coordinate(1.0, 1.0).distanceTo(Coordinate(2.0, 2.0));
Measure the area of a polygon.
import 'package:geodart/geometries.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.