diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index cad19c9e2..9850e3b03 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -238,6 +238,7 @@ "mapStyleGoogleNormal": "Google Maps", "mapStyleGoogleHybrid": "Google Maps (Hybrid)", "mapStyleGoogleTerrain": "Google Maps (Terrain)", + "mapStyleOsmAmericana": "OSM Americana", "mapStyleOpenTopoMap": "OpenTopoMap", "mapStyleOsmHot": "Humanitarian OSM", "mapStyleStamenWatercolor": "Stamen Watercolor", @@ -1033,6 +1034,7 @@ "mapZoomInTooltip": "Zoom in", "mapZoomOutTooltip": "Zoom out", "mapPointNorthUpTooltip": "Point north up", + "mapAttributionOsmAmericana": "Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors • Tiles by [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0)", "mapAttributionOpenTopoMap": "Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors • [SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Tiles by [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)", "mapAttributionOsmHot": "Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors • Tiles by [HOT](https://www.hotosm.org/) • Hosted by [OSM France](https://openstreetmap.fr/)", "mapAttributionStamen": "Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors • Tiles by [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)", diff --git a/lib/model/app/dependencies.dart b/lib/model/app/dependencies.dart index 6492429e6..613cb940b 100644 --- a/lib/model/app/dependencies.dart +++ b/lib/model/app/dependencies.dart @@ -284,6 +284,11 @@ class Dependencies { license: mit, sourceUrl: 'https://github.com/Milad-Akarie/smooth_page_indicator', ), + Dependency( + name: 'Vector Map Tiles', + license: bsd3, + sourceUrl: 'https://github.com/greensopinion/flutter-vector-map-tiles', + ), ]; static const List dartPackages = [ diff --git a/lib/view/src/settings/enums.dart b/lib/view/src/settings/enums.dart index 84ff9248c..485142707 100644 --- a/lib/view/src/settings/enums.dart +++ b/lib/view/src/settings/enums.dart @@ -68,6 +68,7 @@ extension ExtraEntryMapStyleView on EntryMapStyle { EntryMapStyle.googleNormal => l10n.mapStyleGoogleNormal, EntryMapStyle.googleHybrid => l10n.mapStyleGoogleHybrid, EntryMapStyle.googleTerrain => l10n.mapStyleGoogleTerrain, + EntryMapStyle.osmAmericana => l10n.mapStyleOsmAmericana, EntryMapStyle.openTopoMap => l10n.mapStyleOpenTopoMap, EntryMapStyle.osmHot => l10n.mapStyleOsmHot, EntryMapStyle.stamenWatercolor => l10n.mapStyleStamenWatercolor, diff --git a/lib/widgets/common/map/attribution.dart b/lib/widgets/common/map/attribution.dart index c4a9d40d7..3628c7044 100644 --- a/lib/widgets/common/map/attribution.dart +++ b/lib/widgets/common/map/attribution.dart @@ -16,6 +16,8 @@ class Attribution extends StatelessWidget { @override Widget build(BuildContext context) { switch (style) { + case EntryMapStyle.osmAmericana: + return _buildAttributionMarkdown(context, context.l10n.mapAttributionOsmAmericana); case EntryMapStyle.openTopoMap: return _buildAttributionMarkdown(context, context.l10n.mapAttributionOpenTopoMap); case EntryMapStyle.osmHot: diff --git a/lib/widgets/common/map/geo_map.dart b/lib/widgets/common/map/geo_map.dart index f2cbdda57..477e19dc8 100644 --- a/lib/widgets/common/map/geo_map.dart +++ b/lib/widgets/common/map/geo_map.dart @@ -185,6 +185,7 @@ class _GeoMapState extends State { onMarkerTap: _onMarkerTap, onMarkerLongPress: onMarkerLongPress, ); + case EntryMapStyle.osmAmericana: case EntryMapStyle.openTopoMap: case EntryMapStyle.osmHot: case EntryMapStyle.stamenWatercolor: diff --git a/lib/widgets/common/map/leaflet/map.dart b/lib/widgets/common/map/leaflet/map.dart index b37a63dd9..cd83263f5 100644 --- a/lib/widgets/common/map/leaflet/map.dart +++ b/lib/widgets/common/map/leaflet/map.dart @@ -198,6 +198,8 @@ class _EntryLeafletMapState extends State> with TickerProv Widget _buildMapLayer() { switch (widget.style) { + case EntryMapStyle.osmAmericana: + return const OsmAmericanaLayer(); case EntryMapStyle.openTopoMap: return const OpenTopoMapLayer(); case EntryMapStyle.osmHot: diff --git a/lib/widgets/common/map/leaflet/tile_layers.dart b/lib/widgets/common/map/leaflet/tile_layers.dart index 94b4b69db..19fe35472 100644 --- a/lib/widgets/common/map/leaflet/tile_layers.dart +++ b/lib/widgets/common/map/leaflet/tile_layers.dart @@ -1,6 +1,8 @@ import 'package:aves/model/device.dart'; import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; +import 'package:vector_map_tiles/vector_map_tiles.dart'; +import 'package:vector_tile_renderer/vector_tile_renderer.dart' as vtr; class OpenTopoMapLayer extends StatelessWidget { const OpenTopoMapLayer({super.key}); @@ -42,3 +44,42 @@ class StamenWatercolorLayer extends StatelessWidget { ); } } + +class OsmAmericanaLayer extends StatefulWidget { + const OsmAmericanaLayer({super.key}); + + @override + State createState() => _OsmAmericanaLayerState(); +} + +class _OsmAmericanaLayerState extends State { + late final Future