97 lines
3.0 KiB
Dart
97 lines
3.0 KiB
Dart
// Importált réteg modellje.
|
|
// A GeoJsonParser közvetlenül flutter_map objektumokat gyárt,
|
|
// ezeket csomagoljuk egy kezelhető rétegbe.
|
|
|
|
import 'package:flutter_map/flutter_map.dart';
|
|
import 'package:latlong2/latlong.dart';
|
|
import 'package:terepi_seged/enums/layer_import_source_type.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
|
|
class ImportedLayer {
|
|
final String id;
|
|
final String name;
|
|
final LayerImportSourceType sourceType;
|
|
|
|
// flutter_map objektumok — közvetlenül a réteg widgetekbe kerülnek
|
|
final List<Marker> markers;
|
|
final List<Polyline> polylines;
|
|
final List<Polygon> polygons;
|
|
|
|
final bool isVisible;
|
|
final DateTime importedAt;
|
|
|
|
const ImportedLayer({
|
|
required this.id,
|
|
required this.name,
|
|
required this.sourceType,
|
|
required this.markers,
|
|
required this.polylines,
|
|
required this.polygons,
|
|
this.isVisible = true,
|
|
required this.importedAt,
|
|
});
|
|
|
|
// ── Statisztikák ──────────────────────────────────────────────────
|
|
|
|
int get featureCount => markers.length + polylines.length + polygons.length;
|
|
|
|
bool get isEmpty => featureCount == 0;
|
|
|
|
// ── Bounding box — zoom a rétegre ─────────────────────────────────
|
|
|
|
LatLngBounds? get bounds {
|
|
final points = <LatLng>[
|
|
...markers.map((m) => m.point),
|
|
...polylines.expand((p) => p.points),
|
|
...polygons.expand((p) => p.points),
|
|
];
|
|
if (points.isEmpty) return null;
|
|
|
|
var minLat = points.first.latitude;
|
|
var maxLat = points.first.latitude;
|
|
var minLon = points.first.longitude;
|
|
var maxLon = points.first.longitude;
|
|
|
|
for (final p in points) {
|
|
if (p.latitude < minLat) minLat = p.latitude;
|
|
if (p.latitude > maxLat) maxLat = p.latitude;
|
|
if (p.longitude < minLon) minLon = p.longitude;
|
|
if (p.longitude > maxLon) maxLon = p.longitude;
|
|
}
|
|
|
|
return LatLngBounds(
|
|
LatLng(minLat, minLon),
|
|
LatLng(maxLat, maxLon),
|
|
);
|
|
}
|
|
|
|
ImportedLayer copyWith({bool? isVisible}) => ImportedLayer(
|
|
id: id,
|
|
name: name,
|
|
sourceType: sourceType,
|
|
markers: markers,
|
|
polylines: polylines,
|
|
polygons: polygons,
|
|
isVisible: isVisible ?? this.isVisible,
|
|
importedAt: importedAt,
|
|
);
|
|
|
|
// ── Gyártó: GeoJsonParser kimenetéből ─────────────────────────────
|
|
|
|
static ImportedLayer fromGeoJsonParser({
|
|
required dynamic parser, // GeoJsonParser
|
|
required String name,
|
|
LayerImportSourceType source = LayerImportSourceType.geoJson,
|
|
}) {
|
|
return ImportedLayer(
|
|
id: const Uuid().v4(),
|
|
name: name,
|
|
sourceType: source,
|
|
markers: List.from(parser.markers as List),
|
|
polylines: List.from(parser.polylines as List),
|
|
polygons: List.from(parser.polygons as List),
|
|
importedAt: DateTime.now(),
|
|
);
|
|
}
|
|
}
|