// 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 markers; final List polylines; final List 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 = [ ...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(), ); } }