diff --git a/.editorconfig b/.editorconfig index a3b160f4..62900264 100644 --- a/.editorconfig +++ b/.editorconfig @@ -21,8 +21,11 @@ dotnet_diagnostic.IDE0090.severity = silent # IDE0290: Use primary constructor dotnet_diagnostic.IDE0290.severity = silent -# IDE0300: Use collection expression for array +# IDE030X: Use collection expression dotnet_diagnostic.IDE0300.severity = silent - -# IDE0301: Use collection expression for empty dotnet_diagnostic.IDE0301.severity = silent +dotnet_diagnostic.IDE0302.severity = silent +dotnet_diagnostic.IDE0303.severity = silent +dotnet_diagnostic.IDE0304.severity = silent +dotnet_diagnostic.IDE0305.severity = silent +dotnet_diagnostic.IDE0306.severity = silent diff --git a/MapControl/Shared/GroundOverlay.cs b/MapControl/Shared/GroundOverlay.cs index 7803ae64..29b6ac85 100644 --- a/MapControl/Shared/GroundOverlay.cs +++ b/MapControl/Shared/GroundOverlay.cs @@ -7,7 +7,6 @@ using System.IO.Compression; using System.Linq; using System.Threading.Tasks; using System.Xml.Linq; -using System.Threading; #if WPF using System.Windows; using System.Windows.Controls; @@ -115,23 +114,16 @@ namespace MapControl using (var archive = ZipFile.OpenRead(archiveFilePath)) { var docEntry = archive.GetEntry("doc.kml") ?? - archive.Entries.FirstOrDefault(e => e.Name.EndsWith(".kml")); + archive.Entries.FirstOrDefault(e => e.Name.EndsWith(".kml")) ?? + throw new ArgumentException($"No KML entry found in {archiveFilePath}."); - if (docEntry == null) + List imageOverlays; + + using (var docStream = docEntry.Open()) { - throw new ArgumentException($"No KML entry found in {archiveFilePath}."); + imageOverlays = await ReadGroundOverlays(docStream); } - var imageOverlays = await Task.Run(() => - { - using (var docStream = docEntry.Open()) - { - var kmlDocument = XDocument.Load(docStream); - - return ReadGroundOverlays(kmlDocument.Root).ToList(); - } - }); - foreach (var imageOverlay in imageOverlays) { var imageEntry = archive.GetEntry(imageOverlay.ImagePath); @@ -157,14 +149,14 @@ namespace MapControl { docFilePath = FilePath.GetFullPath(docFilePath); - var docUri = new Uri(docFilePath); + List imageOverlays; - var imageOverlays = await Task.Run(() => + using (var docStream = File.OpenRead(docFilePath)) { - var kmlDocument = XDocument.Load(docFilePath); + imageOverlays = await ReadGroundOverlays(docStream); + } - return ReadGroundOverlays(kmlDocument.Root).ToList(); - }); + var docUri = new Uri(docFilePath); foreach (var imageOverlay in imageOverlays) { @@ -174,10 +166,17 @@ namespace MapControl return imageOverlays; } - private static IEnumerable ReadGroundOverlays(XElement kmlElement) + private static async Task> ReadGroundOverlays(Stream docStream) { - var ns = kmlElement.Name.Namespace; - var docElement = kmlElement.Element(ns + "Document") ?? kmlElement; +#if NETFRAMEWORK + var document = await Task.FromResult(XDocument.Load(docStream, LoadOptions.None)); +#else + var document = await XDocument.LoadAsync(docStream, LoadOptions.None, System.Threading.CancellationToken.None); +#endif + var rootElement = document.Root; + var ns = rootElement.Name.Namespace; + var docElement = rootElement.Element(ns + "Document") ?? rootElement; + var imageOverlays = new List(); foreach (var folderElement in docElement.Elements(ns + "Folder")) { @@ -194,10 +193,12 @@ namespace MapControl if (latLonBox != null && imagePath != null) { - yield return new ImageOverlay(imagePath, latLonBox, zIndex); + imageOverlays.Add(new ImageOverlay(imagePath, latLonBox, zIndex)); } } } + + return imageOverlays; } private static LatLonBox ReadLatLonBox(XElement latLonBoxElement) diff --git a/MapControl/WPF/GeoImage.WPF.cs b/MapControl/WPF/GeoImage.WPF.cs index 77e9e842..a06ecfe8 100644 --- a/MapControl/WPF/GeoImage.WPF.cs +++ b/MapControl/WPF/GeoImage.WPF.cs @@ -35,8 +35,8 @@ namespace MapControl transformValues.Length == 16) { transform = new Matrix(transformValues[0], transformValues[1], - transformValues[4], transformValues[5], - transformValues[3], transformValues[7]); + transformValues[4], transformValues[5], + transformValues[3], transformValues[7]); } else {