-
Notifications
You must be signed in to change notification settings - Fork 9
/
feature.dart
73 lines (69 loc) · 2.72 KB
/
feature.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_types/geo_json_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_types/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/geometry_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/line_string.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/multi_point.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/point.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/polygon.dart';
import 'package:fst_app_flutter/models/from_postgres/map/properties.dart';
import 'package:fst_app_flutter/utils/string_to_enum.dart';
// TODO: document Feature @richtwin567
class Feature extends GeoJsonObject {
GeoJsonGeometryObject geometry;
Properties properties;
int id;
Feature(dynamic feature) : super(GeoJsonType.feature) {
properties = Properties(
title: feature['code'],
description: feature['title'],
associatedWith: stringToDepartment(feature['associated_with']),
altName: feature['alt_name']);
id = feature['id'];
var uknGeometry = feature['geometry'];
var newCoords = uknGeometry['coordinates'];
switch (stringToGeometryType(uknGeometry['geometry_type'])) {
case GeoJsonGeometryType.point:
geometry = GeoJsonPoint(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiPoint:
geometry = GeoJsonMultiPoint(coordsJson: newCoords);
break;
case GeoJsonGeometryType.lineString:
geometry = GeoJsonLineString(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiLineString:
throw UnimplementedError();
//geometry = MultiLineString(coordsJSON: newCoords);
break;
case GeoJsonGeometryType.polygon:
geometry = GeoJsonPolygon(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiPolygon:
throw UnimplementedError();
//geometry = MultiPolygon(coordsJSON: newCoords);
break;
case GeoJsonGeometryType.geometryCollection:
throw UnimplementedError();
break;
}
}
@override
toGeoJsonFile() {
return {
'\"id\"': id,
'\"type\"': '\"${type.toShortString()}\"',
'\"geometry\"': geometry.toGeoJsonFile(),
'\"properties\"': properties.toGeoJsonFile()
};
}
@override
Map<String, Object> toGeoJson() {
return {
'id': id,
'type': type.toShortString(),
'geometry': geometry.toGeoJson(),
'properties': properties.toGeoJson()
};
}
}