Skip to content

Commit

Permalink
more documentation and refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
richtwin567 committed Sep 14, 2020
1 parent bd7702b commit 8a024a6
Show file tree
Hide file tree
Showing 20 changed files with 119 additions and 116 deletions.
4 changes: 2 additions & 2 deletions lib/models/from_postgres/map/campus_map.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:io';

import 'package:fst_app_flutter/models/from_postgres/map/geo_json_types/feature.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_types/feature_collection.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/feature.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/feature_collection.dart';
import 'package:fst_app_flutter/services/handle_heroku_requests.dart';

// TODO: document @richtwin567
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
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/geo_json_objects/geo_json_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/line_string.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/multi_point.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/point.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/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;
int id;

Feature(dynamic feature) : super(GeoJsonType.feature) {
properties = Properties(
Expand All @@ -25,29 +25,33 @@ class Feature extends GeoJsonObject {
var uknGeometry = feature['geometry'];
var newCoords = uknGeometry['coordinates'];
switch (stringToGeometryType(uknGeometry['geometry_type'])) {
case GeoJsonGeometryType.point:
case GeoJsonType.point:
geometry = GeoJsonPoint(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiPoint:
case GeoJsonType.multiPoint:
geometry = GeoJsonMultiPoint(coordsJson: newCoords);
break;
case GeoJsonGeometryType.lineString:
case GeoJsonType.lineString:
geometry = GeoJsonLineString(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiLineString:
case GeoJsonType.multiLineString:
throw UnimplementedError();
//geometry = MultiLineString(coordsJSON: newCoords);
break;
case GeoJsonGeometryType.polygon:
case GeoJsonType.polygon:
geometry = GeoJsonPolygon(coordsJson: newCoords);
break;
case GeoJsonGeometryType.multiPolygon:
case GeoJsonType.multiPolygon:
throw UnimplementedError();
//geometry = MultiPolygon(coordsJSON: newCoords);
break;
case GeoJsonGeometryType.geometryCollection:
case GeoJsonType.geometryCollection:
throw UnimplementedError();
break;
case GeoJsonType.feature:
break;
case GeoJsonType.featureCollection:
break;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import 'package:flutter/material.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_types/feature.dart';
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_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/feature.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:fst_app_flutter/models/enums/department.dart';

// TODO: document FeatureCollection @richtwin567
/// A class that represents a GeoJSON Feature Collection as a type of [GeoJsonObject]
/// as defined by https://tools.ietf.org/html/rfc7946#section-3.3
class FeatureCollection extends GeoJsonObject {
List<Feature> features;
FeatureCollection({@required this.features})
: assert(features != null),
super(GeoJsonType.featureCollection);

/// Converts all [Feature]s in this collection to JSON in a String. This can be written
/// as a valid geojson file.
@override
String toGeoJsonFile() {
return {
Expand All @@ -21,6 +23,7 @@ class FeatureCollection extends GeoJsonObject {
}.toString();
}

/// Converts the [Feature]s in this collection to a GeoJSON like [Map].
@override
Map<String, Object> toGeoJson() {
return {
Expand All @@ -29,9 +32,10 @@ class FeatureCollection extends GeoJsonObject {
};
}

/// Converts the [GeoJsonPoint]s in this collection to Google Maps [Marker]s.
Set<Marker> exportPointsToGoogleMaps() {
return features
.where((feature) => feature.geometry.type == GeoJsonGeometryType.point)
.where((feature) => feature.geometry.type == GeoJsonType.point)
.map((e) => Marker(
onDragEnd: (value) {},
markerId: MarkerId('${e.id}'),
Expand All @@ -45,10 +49,11 @@ class FeatureCollection extends GeoJsonObject {
.toSet();
}

/// Converts the [GeoJsonPolygon]s in this collection to Google Maps [Polygon]s.
Set<Polygon> exportPolygonsToGoogleMaps() {
return features
.where(
(feature) => feature.geometry.type == GeoJsonGeometryType.polygon)
(feature) => feature.geometry.type == GeoJsonType.polygon)
.map((e) => Polygon(
polygonId: PolygonId('${e.id}'),
fillColor:
Expand All @@ -60,10 +65,11 @@ class FeatureCollection extends GeoJsonObject {
.toSet();
}

/// Converts the [GeoJsonLineString]s in this collection to Google Maps [PolyLine]s.
Set<Polyline> exportLineStringsToGoogleMaps() {
return features
.where((feature) =>
feature.geometry.type == GeoJsonGeometryType.lineString)
feature.geometry.type == GeoJsonType.lineString)
.map((e) => Polyline(
polylineId: PolylineId('${e.id}'),
color: e.properties.associatedWith.departmentColour.withAlpha(90),
Expand Down
15 changes: 15 additions & 0 deletions lib/models/from_postgres/map/geo_json_objects/geo_json_object.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';

/// A class to represent the concept of a GeoJSON object as defined by https://tools.ietf.org/html/rfc7946#section-3
abstract class GeoJsonObject {
GeoJsonType type;
List<int> bbox;

GeoJsonObject(this.type);

/// Converts this GeoJson object to a format that can be written as a valid Geo JSON file.
toGeoJsonFile();

/// Converts this GeoJsonObject to a format that can be used in flutter like a [Map] decoded from JSON.
toGeoJson();
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'package:flutter/material.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';

// TODO: document GeoJsonGeometryCollection @richtwin567
class GeoJsonGeometryCollection extends GeoJsonGeometryObject {
List<GeoJsonGeometryObject> geometries;
GeoJsonGeometryCollection({@required geometries})
: super(GeoJsonGeometryType.geometryCollection);
: super(GeoJsonType.geometryCollection);

@override
toGeoJsonFile() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

/// A class to represent a GeoJSON Geometry Object as a type of [GeoJsonObject]
/// as defined by https://tools.ietf.org/html/rfc7946#section-3.1
abstract class GeoJsonGeometryObject extends GeoJsonObject {
GeoJsonGeometryObject(GeoJsonType type) : super(type);

/// Extracts a list of [LatLng] from the coordinates of this [GeoJsonGeometryObject]
List<LatLng> extractLatLng();
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.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/position.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/position.dart';

// TODO: document @richtwin567
class GeoJsonLineString extends GeoJsonGeometryObject {
Expand All @@ -12,7 +12,7 @@ class GeoJsonLineString extends GeoJsonGeometryObject {
GeoJsonLineString({@required coordsJson})
: assert(coordsJson != null),
assert(coordsJson.length >= 2),
super(GeoJsonGeometryType.lineString) {
super(GeoJsonType.lineString) {
_coordinates = List.generate(
coordsJson.length,
(i) => GeoJsonPosition(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geometry_types/line_string.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/line_string.dart';


// TODO: document @richtwin567
class GeoJsonLinearRing extends GeoJsonLineString {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'package:flutter/material.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/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/line_string.dart';

// TODO: document @richtwin567
class GeoJsonMultiLineString extends GeoJsonGeometryObject {
List<GeoJsonLineString> coordinates;
GeoJsonMultiLineString({@required coordsJson})
: assert(coordsJson != null),
super(GeoJsonGeometryType.multiLineString) {
super(GeoJsonType.multiLineString) {
coordinates = [];
var lineStringCoords = [];
for (var i = 0; i < coordsJson.length; i++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import 'package:flutter/material.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/position.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/position.dart';

// TODO: document @richtwin567
/// A class that represents a GeoJSON Multipoint as defined by
/// https://tools.ietf.org/html/rfc7946#section-3.1.3
class GeoJsonMultiPoint extends GeoJsonGeometryObject {
List<GeoJsonPosition> _coordinates;

List<GeoJsonPosition> get coordinates => _coordinates;

GeoJsonMultiPoint({@required coordsJson})
: assert(coordsJson != null),
super(GeoJsonGeometryType.multiPoint) {
super(GeoJsonType.multiPoint) {
_coordinates = List.generate(
coordsJson.length,
(i) => GeoJsonPosition(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'package:flutter/material.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/polygon.dart';

// TODO: document GeoJsonMultiPolygon @richtwin567
class GeoJsonMultiPolygon extends GeoJsonGeometryObject {
List<GeoJsonPolygon> coordinates;
GeoJsonMultiPolygon({@required coordsJson}) : super(GeoJsonGeometryType.multiPolygon) {
GeoJsonMultiPolygon({@required coordsJson}) : super(GeoJsonType.multiPolygon) {
coordinates = [];
var polygonCoords = [];
for (var i = 0; i < coordsJson.length; i++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import 'package:flutter/material.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/position.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/position.dart';

// TODO: document @richtwin567
/// A class to represent a GeoJSON point as a kind of Geometry Object as defined by
/// https://tools.ietf.org/html/rfc7946#section-3.1.2
class GeoJsonPoint extends GeoJsonGeometryObject {
GeoJsonPosition _coordinates;

GeoJsonPosition get coordinates => _coordinates;

GeoJsonPoint({@required coordsJson})
: assert(coordsJson != null),
super(GeoJsonGeometryType.point) {
super(GeoJsonType.point) {
_coordinates = GeoJsonPosition(
newLongitude: coordsJson[0]['longitude'],
newLatitude: coordsJson[0]['latitude']);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.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/linear_ring.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geo_json_type.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/linear_ring.dart';

// TODO: document GeoJsonPolygon @richtwin567
class GeoJsonPolygon extends GeoJsonGeometryObject {
Expand All @@ -11,7 +11,7 @@ class GeoJsonPolygon extends GeoJsonGeometryObject {

GeoJsonPolygon({@required coordsJson})
: assert(coordsJson != null),
super(GeoJsonGeometryType.polygon) {
super(GeoJsonType.polygon) {
_coordinates = [];
var linearRingCoords = [];
for (var i = 0; i < coordsJson.length; i++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import 'package:flutter/material.dart';
import 'package:fst_app_flutter/models/from_postgres/map/geo_json_objects/geometry_types/geometry_object.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

// TODO: document @richtwin567
class GeoJsonPosition {
double _longitude; //MUST COME BEFORE LATITUDE
/// A class to represent a GeoJSON Positon as defined by https://tools.ietf.org/html/rfc7946#section-3.1.1
class GeoJsonPosition extends GeoJsonGeometryObject {
double _longitude;

double _latitude;

Expand All @@ -19,7 +20,7 @@ class GeoJsonPosition {
{@required double newLongitude,
@required double newLatitude,
double elevation})
: assert(newLatitude != null && newLongitude != null) {
: assert(newLatitude != null && newLongitude != null), super(null) {
_elevation = elevation;
_longitude = newLongitude;
_latitude = newLatitude;
Expand All @@ -38,10 +39,15 @@ class GeoJsonPosition {
o.latitude == latitude &&
o.elevation == elevation;

@override
toGeoJson() => [latitude, longitude];


List<LatLng> extractLatLng() {
return [LatLng(latitude, longitude)];
}

@override
toGeoJsonFile() {
return '[$longitude,$latitude]';
}
}
13 changes: 0 additions & 13 deletions lib/models/from_postgres/map/geo_json_types/geo_json_object.dart

This file was deleted.

15 changes: 0 additions & 15 deletions lib/models/from_postgres/map/geometry_types/geometry_object.dart

This file was deleted.

Loading

0 comments on commit 8a024a6

Please sign in to comment.