Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/envelope.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
library turf_envelope;

export 'package:geotypes/geotypes.dart';
export "src/envelope.dart";
10 changes: 10 additions & 0 deletions lib/src/envelope.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import '../helpers.dart';

import '../bbox.dart';
import '../bbox_polygon.dart';



Feature<Polygon> envelope(GeoJSONObject geojson) {
return bboxPolygon(bbox(geojson));
}
1 change: 1 addition & 0 deletions lib/turf.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export 'clean_coords.dart';
export 'clusters.dart';
export 'destination.dart';
export 'distance.dart';
export 'envelope.dart';
export 'explode.dart';
export 'extensions.dart';
export 'helpers.dart';
Expand Down
198 changes: 198 additions & 0 deletions test/components/envelope_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
import 'package:turf/turf.dart';
import 'package:test/test.dart';

void main() {
final point = Feature<Point>(
geometry: Point(coordinates: Position.named(lat: 102.0, lng: 0.5)));

final line = Feature<LineString>(
geometry: LineString(coordinates: [
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 103.0, lng: 1.5),
Position.named(lat: 104.0, lng: 2.5),
])
);

final poly = Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 101.0, lng: 0.0),
Position.named(lat: 101.0, lng: 1.0),
Position.named(lat: 100.0, lng: 1.0),
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 101.0, lng: 0.0),
],
]));

final multiLine = Feature<MultiLineString>(
geometry: MultiLineString(coordinates: [
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 101.0, lng: 1.0),
],
[
Position.named(lat: 102.0, lng: 2.0),
Position.named(lat: 103.0, lng: 3.0),
],
]));

final multiPoly = Feature<MultiPolygon>(
geometry: MultiPolygon(coordinates: [
[
[
Position.named(lat: 102.0, lng: 2.0),
Position.named(lat: 103.0, lng: 2.0),
Position.named(lat: 103.0, lng: 3.0),
Position.named(lat: 102.0, lng: 3.0),
Position.named(lat: 102.0, lng: 2.0),
],
],
[
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 101.0, lng: 0.0),
Position.named(lat: 101.0, lng: 1.0),
Position.named(lat: 100.0, lng: 1.0),
Position.named(lat: 100.0, lng: 0.0),
],
[
Position.named(lat: 100.2, lng: 0.2),
Position.named(lat: 100.8, lng: 0.2),
Position.named(lat: 100.8, lng: 0.8),
Position.named(lat: 100.2, lng: 0.8),
Position.named(lat: 100.2, lng: 0.2),
],
],
]));

final fc =
FeatureCollection(features: [point, line, poly, multiLine, multiPoly]);

test("envelope for point", () {
// Point
final pointEnvelope = envelope(point);
expect(
pointEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 102.0, lng: 0.5),
]
])
)),
reason: "point",
);
});

test("envelope for linestring", () {
// LineString
final lineEnvelope = envelope(line);

// Directly use the expected envelope in the expect call
expect(
lineEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 102.0, lng: 0.5),
Position.named(lat: 104.0, lng: 0.5),
Position.named(lat: 104.0, lng: 2.5),
Position.named(lat: 102.0, lng: 2.5),
Position.named(lat: 102.0, lng: 0.5),
]
]),
)),
reason: "LineString",
);
});

test("envelope for polygon", () {
// Point
final polyEnvelope = envelope(poly);
expect(
polyEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 101.0, lng: 0.0),
Position.named(lat: 101.0, lng: 1.0),
Position.named(lat: 100.0, lng: 1.0),
Position.named(lat: 100.0, lng: 0.0),
]
])
)),
reason: "polygon",
);
});

test("envelope for multilinestring", () {
// MultiLineString
final multiLineEnvelope = envelope(multiLine);

// Directly use the expected envelope in the expect call
expect(
multiLineEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 103.0, lng: 0.0),
Position.named(lat: 103.0, lng: 3.0),
Position.named(lat: 100.0, lng: 3.0),
Position.named(lat: 100.0, lng: 0.0),
]
]),
)),
reason: "MultiLineString",
);
});

test("envelope for multipolygon", () {
// MultiPolygon
final multiPolyEnvelope = envelope(multiPoly);

// Directly use the expected envelope in the expect call
expect(
multiPolyEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 103.0, lng: 0.0),
Position.named(lat: 103.0, lng: 3.0),
Position.named(lat: 100.0, lng: 3.0),
Position.named(lat: 100.0, lng: 0.0),
]
]),
)),
reason: "MultiPolygon",
);
});

test("envelope for featureCollection", () {
final fcEnvelope = envelope(fc);

// The envelope should be a polygon that represents the minimum bounding rectangle
// containing all features in the collection
expect(
fcEnvelope,
equals(Feature<Polygon>(
geometry: Polygon(coordinates: [
[
Position.named(lat: 100.0, lng: 0.0),
Position.named(lat: 104.0, lng: 0.0),
Position.named(lat: 104.0, lng: 3.0),
Position.named(lat: 100.0, lng: 3.0),
Position.named(lat: 100.0, lng: 0.0),
]
]),
)),
reason: "FeatureCollection",
);
});
}
57 changes: 57 additions & 0 deletions test/examples/envelope/geometryCollection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},
{
"type": "LineString",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
]
},
{
"type": "Polygon",
"coordinates": [
[
[101.0, 0.0],
[102.0, 0.0],
[102.0, 1.0],
[101.0, 1.0],
[101.0, 0.0]
]
]
}
]
},
"properties": {
"name": "GeometryCollection"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[102.0, 0.0],
[102.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"name": "GeometryCollection Envelope"
}
}
]
}
36 changes: 36 additions & 0 deletions test/examples/envelope/lineString.geojson
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
]
},
"properties": {
"name": "LineString"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"name": "LineString Envelope"
}
}
]
}
42 changes: 42 additions & 0 deletions test/examples/envelope/multiLineString.geojson
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[
[100.0, 0.0],
[101.0, 1.0]
],
[
[102.0, 2.0],
[103.0, 3.0]
]
]
},
"properties": {
"name": "MultiLineString"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[103.0, 0.0],
[103.0, 3.0],
[100.0, 3.0],
[100.0, 0.0]
]
]
},
"properties": {
"name": "MultiLineString Envelope"
}
}
]
}
Loading