Updated TileSources

This commit is contained in:
ClemensFischer 2025-12-02 15:29:45 +01:00
parent 44d48eadde
commit 1222a4a8c2
5 changed files with 61 additions and 148 deletions

View file

@ -1,5 +1,4 @@
using System;
using System.Text;
using System.Threading.Tasks;
#if WPF
using System.Windows.Media;
@ -62,67 +61,7 @@ namespace MapControl
/// </summary>
public static TileSource Parse(string uriTemplate)
{
return new UriTileSource { UriTemplate = uriTemplate };
}
}
public class UriTileSource : TileSource
{
private string uriTemplate;
/// <summary>
/// Gets or sets the template string for tile request Uris.
/// </summary>
public string UriTemplate
{
get => uriTemplate;
set
{
uriTemplate = value;
if (uriTemplate != null && uriTemplate.Contains("{s}") && Subdomains == null)
{
Subdomains = ["a", "b", "c"]; // default OpenStreetMap subdomains
}
}
}
public string[] Subdomains { get; set; }
public override Uri GetUri(int zoomLevel, int column, int row)
{
Uri uri = null;
if (UriTemplate != null)
{
var uriBuilder = new StringBuilder(UriTemplate);
uriBuilder.Replace("{z}", zoomLevel.ToString());
uriBuilder.Replace("{x}", column.ToString());
uriBuilder.Replace("{y}", row.ToString());
if (Subdomains != null && Subdomains.Length > 0)
{
uriBuilder.Replace("{s}", Subdomains[(column + row) % Subdomains.Length]);
}
uri = new Uri(uriBuilder.ToString(), UriKind.RelativeOrAbsolute);
}
return uri;
}
public override string ToString()
{
return UriTemplate;
}
}
public class TmsTileSource : UriTileSource
{
public override Uri GetUri(int zoomLevel, int column, int row)
{
return base.GetUri(zoomLevel, column, (1 << zoomLevel) - 1 - row);
return new UriTileSource(uriTemplate);
}
}
}