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();
}
}
}