XAML-Map-Control/MBTiles/Shared/MBTileSource.cs

75 lines
1.8 KiB
C#
Raw Normal View History

// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control
2024-02-03 21:01:53 +01:00
// Copyright © 2024 Clemens Fischer
// Licensed under the Microsoft Public License (Ms-PL)
using System;
2021-11-10 22:31:06 +01:00
using System.Diagnostics;
using System.Threading.Tasks;
2024-05-22 11:25:32 +02:00
#if WPF
using System.Windows.Media;
2021-11-17 23:46:48 +01:00
#elif UWP
using Windows.UI.Xaml.Media;
2024-05-22 11:25:32 +02:00
#elif WINUI
using Microsoft.UI.Xaml.Media;
#endif
namespace MapControl.MBTiles
{
2019-11-17 00:10:08 +01:00
public class MBTileSource : TileSource, IDisposable
{
public MBTileData TileData { get; }
2019-11-14 23:21:08 +01:00
public MBTileSource(MBTileData tiledata)
{
2021-11-10 22:31:06 +01:00
var format = tiledata.Metadata["format"];
if (format == "png" || format == "jpg")
{
TileData = tiledata;
}
else
{
Debug.WriteLine($"MBTileSource: unsupported format '{format}'");
}
}
public void Dispose()
{
2019-11-17 00:10:08 +01:00
Dispose(true);
2021-11-10 22:31:06 +01:00
GC.SuppressFinalize(this);
2019-11-17 00:10:08 +01:00
}
protected virtual void Dispose(bool disposing)
{
2021-11-10 22:31:06 +01:00
if (disposing && TileData != null)
2019-11-17 00:10:08 +01:00
{
TileData.Dispose();
}
}
public override async Task<ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
{
2021-11-10 22:31:06 +01:00
ImageSource image = null;
if (TileData != null)
{
var buffer = await TileData.ReadImageBufferAsync(x, y, zoomLevel);
if (buffer != null)
{
2021-11-14 18:37:07 +01:00
try
{
image = await ImageLoader.LoadImageAsync(buffer);
}
catch (Exception ex)
{
Debug.WriteLine($"MBTileSource : {ex.Message}");
}
2021-11-10 22:31:06 +01:00
}
}
2021-11-10 22:31:06 +01:00
return image;
}
}
}