From 0af0901ce82471f7501c988bcd9caac07e2c780b Mon Sep 17 00:00:00 2001 From: Clemens Date: Fri, 12 Aug 2022 13:38:15 +0200 Subject: [PATCH] Added LayerIdentifier to WmtsTileLayer cache path --- MapControl/Shared/ImageFileCache.cs | 2 +- MapControl/Shared/WmtsCapabilities.cs | 19 +++++++++++-------- MapControl/Shared/WmtsTileLayer.cs | 14 +++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/MapControl/Shared/ImageFileCache.cs b/MapControl/Shared/ImageFileCache.cs index abcb4084..9b04106f 100644 --- a/MapControl/Shared/ImageFileCache.cs +++ b/MapControl/Shared/ImageFileCache.cs @@ -42,7 +42,7 @@ namespace MapControl.Caching { try { - return Path.Combine(rootDirectory, Path.Combine(key.Split('/', ':', ';', ','))); + return Path.Combine(rootDirectory, Path.Combine(key.Split('/'))); } catch (Exception ex) { diff --git a/MapControl/Shared/WmtsCapabilities.cs b/MapControl/Shared/WmtsCapabilities.cs index e4ca2760..be230e59 100644 --- a/MapControl/Shared/WmtsCapabilities.cs +++ b/MapControl/Shared/WmtsCapabilities.cs @@ -20,7 +20,7 @@ namespace MapControl public WmtsTileSource TileSource { get; private set; } public List TileMatrixSets { get; private set; } - public static async Task ReadCapabilities(Uri capabilitiesUri, string layerIdentifier) + public static async Task ReadCapabilitiesAsync(Uri capabilitiesUri, string layerIdentifier) { WmtsCapabilities capabilities; @@ -142,7 +142,8 @@ namespace MapControl } else if (capabilitiesUrl != null) { - var requestIndex = capabilitiesUrl.IndexOf("Request=GetCapabilities", StringComparison.OrdinalIgnoreCase); + const string requestParam = "Request=GetCapabilities"; + var requestIndex = capabilitiesUrl.IndexOf(requestParam, StringComparison.OrdinalIgnoreCase); if (requestIndex > 0) { @@ -160,7 +161,7 @@ namespace MapControl urlTemplate = capabilitiesUrl.Substring(0, requestIndex) + "Request=GetTile" - + capabilitiesUrl.Substring(requestIndex + "Request=GetCapabilities".Length) + + capabilitiesUrl.Substring(requestIndex + requestParam.Length) + "&Version=1.0.0" + "&Layer=" + layerIdentifier + "&Format=" + format @@ -199,13 +200,15 @@ namespace MapControl throw new ArgumentException($"No ows:SupportedCRS element found in TileMatrixSet \"{identifier}\"."); } - if (supportedCrs.StartsWith("urn:")) // e.g. "urn:ogc:def:crs:EPSG:6.18:3857") - { - var urn = supportedCrs.Split(':'); + const string urnPrefix = "urn:ogc:def:crs:EPSG:"; - if (urn.Length == 7 && urn[3] == "crs" && urn[4] == "EPSG") + if (supportedCrs.StartsWith(urnPrefix)) // e.g. "urn:ogc:def:crs:EPSG:6.18:3857") + { + var crs = supportedCrs.Substring(urnPrefix.Length).Split(':'); + + if (crs.Length > 1) { - supportedCrs = "EPSG:" + urn[6]; + supportedCrs = "EPSG:" + crs[1]; } } diff --git a/MapControl/Shared/WmtsTileLayer.cs b/MapControl/Shared/WmtsTileLayer.cs index 9e377ff4..4e9f6db8 100644 --- a/MapControl/Shared/WmtsTileLayer.cs +++ b/MapControl/Shared/WmtsTileLayer.cs @@ -174,12 +174,12 @@ namespace MapControl if (!string.IsNullOrEmpty(cacheName)) { - cacheName += "/" + tileMatrixSet.Identifier - .Replace(':', '_') - .Replace(';', '_') - .Replace(',', '_') - .Replace('/', '_') - .Replace('\\', '_'); + if (!string.IsNullOrEmpty(LayerIdentifier)) + { + cacheName += "/" + LayerIdentifier.Replace(':', '_'); + } + + cacheName += "/" + tileMatrixSet.Identifier.Replace(':', '_'); } } @@ -192,7 +192,7 @@ namespace MapControl { try { - var capabilities = await WmtsCapabilities.ReadCapabilities(CapabilitiesUri, LayerIdentifier); + var capabilities = await WmtsCapabilities.ReadCapabilitiesAsync(CapabilitiesUri, LayerIdentifier); foreach (var tileMatrixSet in capabilities.TileMatrixSets .Where(s => !TileMatrixSets.ContainsKey(s.SupportedCrs)))