using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Components; using CaritasPWA.Shared.Models.OSM; using Darnton.Blazor.Leaflet.LeafletMap; namespace CaritasPWA.Pages { public class CaritasServiceFundVeloKeyDataPageBase : ComponentBase, IAsyncDisposable { protected Map PositionMap; protected TileLayer OpenStreetMapsTileLayer; protected MapStateViewModel MapStateViewModel; protected MarkerViewModel MarkerViewModel; public CaritasServiceFundVeloKeyDataPageBase() : base() { var mapCentre = new LatLng(46.80121, 8.22669); // Centered on Swiss MapStateViewModel = new MapStateViewModel { MapCentreLatitude = mapCentre.Lat, MapCentreLongitude = mapCentre.Lng, Zoom = 6 }; PositionMap = new Map("bicycleLocationMap", new MapOptions { Center = mapCentre, Zoom = MapStateViewModel.Zoom }); OpenStreetMapsTileLayer = new TileLayer( "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", new TileLayerOptions { Attribution = @"Map data © OpenStreetMap contributors, " + @"CC-BY-SA" } ); MarkerViewModel = new MarkerViewModel(); } protected async void GetMapState() { var mapCentre = await PositionMap.GetCenter(); MapStateViewModel.MapCentreLatitude = mapCentre.Lat; MapStateViewModel.MapCentreLongitude = mapCentre.Lng; MapStateViewModel.Zoom = await PositionMap.GetZoom(); MapStateViewModel.MapContainerSize = await PositionMap.GetSize(); MapStateViewModel.MapViewPixelBounds = await PositionMap.GetPixelBounds(); MapStateViewModel.MapLayerPixelOrigin = await PositionMap.GetPixelOrigin(); StateHasChanged(); } protected async void SetMapState() { var mapCentre = new LatLng(MapStateViewModel.MapCentreLatitude, MapStateViewModel.MapCentreLongitude); await PositionMap.SetView(mapCentre, MapStateViewModel.Zoom); } protected async void AddMarkerAtMapCenter() { var mapCentre = await PositionMap.GetCenter(); var marker = new Marker(mapCentre, new MarkerOptions { Keyboard = MarkerViewModel.Keyboard, Title = MarkerViewModel.Title, Alt = MarkerViewModel.Alt, ZIndexOffset = MarkerViewModel.ZIndexOffset, Opacity = MarkerViewModel.Opacity, RiseOnHover = MarkerViewModel.RiseOnHover, RiseOffset = MarkerViewModel.RiseOffset, }); await marker.AddTo(PositionMap); } public async ValueTask DisposeAsync() { await OpenStreetMapsTileLayer.DisposeAsync(); await PositionMap.DisposeAsync(); } } }