122 lines
2.8 KiB
Dart
122 lines
2.8 KiB
Dart
import 'package:aves/geo/topojson.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
const example1 = '''
|
|
{
|
|
"type": "Topology",
|
|
"objects": {
|
|
"example": {
|
|
"type": "GeometryCollection",
|
|
"geometries": [
|
|
{
|
|
"type": "Point",
|
|
"properties": {
|
|
"prop0": "value0"
|
|
},
|
|
"coordinates": [102, 0.5]
|
|
},
|
|
{
|
|
"type": "LineString",
|
|
"properties": {
|
|
"prop0": "value0",
|
|
"prop1": 0
|
|
},
|
|
"arcs": [0]
|
|
},
|
|
{
|
|
"type": "Polygon",
|
|
"properties": {
|
|
"prop0": "value0",
|
|
"prop1": {
|
|
"this": "that"
|
|
}
|
|
},
|
|
"arcs": [[-2]]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"arcs": [
|
|
[[102, 0], [103, 1], [104, 0], [105, 1]],
|
|
[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]
|
|
]
|
|
}
|
|
''';
|
|
|
|
const example1Quantized = '''
|
|
{
|
|
"type": "Topology",
|
|
"transform": {
|
|
"scale": [0.0005000500050005, 0.00010001000100010001],
|
|
"translate": [100, 0]
|
|
},
|
|
"objects": {
|
|
"example": {
|
|
"type": "GeometryCollection",
|
|
"geometries": [
|
|
{
|
|
"type": "Point",
|
|
"properties": {
|
|
"prop0": "value0"
|
|
},
|
|
"coordinates": [4000, 5000]
|
|
},
|
|
{
|
|
"type": "LineString",
|
|
"properties": {
|
|
"prop0": "value0",
|
|
"prop1": 0
|
|
},
|
|
"arcs": [0]
|
|
},
|
|
{
|
|
"type": "Polygon",
|
|
"properties": {
|
|
"prop0": "value0",
|
|
"prop1": {
|
|
"this": "that"
|
|
}
|
|
},
|
|
"arcs": [[1]]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"arcs": [
|
|
[[4000, 0], [1999, 9999], [2000, -9999], [2000, 9999]],
|
|
[[0, 0], [0, 9999], [2000, 0], [0, -9999], [-2000, 0]]
|
|
]
|
|
}
|
|
''';
|
|
|
|
test('parse example', () async {
|
|
final topo = await TopoJson().parse(example1);
|
|
expect(topo != null, true);
|
|
if (topo == null) return;
|
|
|
|
expect(topo.objects.containsKey('example'), true);
|
|
|
|
final exampleObj = topo.objects['example'] as GeometryCollection;
|
|
expect(exampleObj.geometries.length, 3);
|
|
|
|
final point = exampleObj.geometries[0] as Point;
|
|
expect(point.coordinates, [102, 0.5]);
|
|
|
|
final lineString = exampleObj.geometries[1] as LineString;
|
|
expect(lineString.arcs, [0]);
|
|
|
|
final polygon = exampleObj.geometries[2] as Polygon;
|
|
expect(polygon.arcs.first, [-2]);
|
|
expect(polygon.properties!.containsKey('prop0'), true);
|
|
});
|
|
|
|
test('parse quantized example', () async {
|
|
final topo = await TopoJson().parse(example1Quantized);
|
|
expect(topo != null, true);
|
|
if (topo == null) return;
|
|
|
|
expect(topo.arcs.first.first, [4000, 0]);
|
|
expect(topo.transform!.scale, [0.0005000500050005, 0.00010001000100010001]);
|
|
});
|
|
}
|