Kml, kmz és geojson import és térképi megjelnítésük.
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
// 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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user