mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Version 4.12.2 Improved GroundOverlayPanel
This commit is contained in:
parent
c28387f87c
commit
c8f834f940
|
|
@ -21,7 +21,9 @@ namespace MapControl
|
||||||
public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream stream)
|
public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream stream)
|
||||||
{
|
{
|
||||||
var image = new BitmapImage();
|
var image = new BitmapImage();
|
||||||
|
|
||||||
await image.SetSourceAsync(stream);
|
await image.SetSourceAsync(stream);
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,13 @@ namespace MapControl
|
||||||
public static ImageSource LoadImage(Stream stream)
|
public static ImageSource LoadImage(Stream stream)
|
||||||
{
|
{
|
||||||
var bitmapImage = new BitmapImage();
|
var bitmapImage = new BitmapImage();
|
||||||
|
|
||||||
bitmapImage.BeginInit();
|
bitmapImage.BeginInit();
|
||||||
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
||||||
bitmapImage.StreamSource = stream;
|
bitmapImage.StreamSource = stream;
|
||||||
bitmapImage.EndInit();
|
bitmapImage.EndInit();
|
||||||
bitmapImage.Freeze();
|
bitmapImage.Freeze();
|
||||||
|
|
||||||
return bitmapImage;
|
return bitmapImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,11 +71,11 @@ namespace MapControl.Images
|
||||||
var ext = Path.GetExtension(path).ToLower();
|
var ext = Path.GetExtension(path).ToLower();
|
||||||
if (ext == ".kmz")
|
if (ext == ".kmz")
|
||||||
{
|
{
|
||||||
imageOverlays = await ReadGroundOverlaysFromArchive(path);
|
imageOverlays = await ReadGroundOverlaysFromArchiveAsync(path);
|
||||||
}
|
}
|
||||||
else if (ext == ".kml")
|
else if (ext == ".kml")
|
||||||
{
|
{
|
||||||
imageOverlays = await ReadGroundOverlaysFromFile(path);
|
imageOverlays = await ReadGroundOverlaysFromFileAsync(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace MapControl.Images
|
||||||
UseLayoutRounding = false;
|
UseLayoutRounding = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFile(string docFile)
|
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFileAsync(string docFile)
|
||||||
{
|
{
|
||||||
docFile = Path.GetFullPath(docFile);
|
docFile = Path.GetFullPath(docFile);
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@ namespace MapControl.Images
|
||||||
kmlDocument.Load(stream.AsStreamForRead());
|
kmlDocument.Load(stream.AsStreamForRead());
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList();
|
var imageOverlays = await Task.Run(() => ReadGroundOverlays(kmlDocument).ToList());
|
||||||
var docUri = new Uri(docFile);
|
var docUri = new Uri(docFile);
|
||||||
|
|
||||||
foreach (var imageOverlay in imageOverlays)
|
foreach (var imageOverlay in imageOverlays)
|
||||||
|
|
@ -43,7 +43,7 @@ namespace MapControl.Images
|
||||||
return imageOverlays;
|
return imageOverlays;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchive(string archiveFile)
|
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchiveAsync(string archiveFile)
|
||||||
{
|
{
|
||||||
using (var archive = ZipFile.OpenRead(archiveFile))
|
using (var archive = ZipFile.OpenRead(archiveFile))
|
||||||
{
|
{
|
||||||
|
|
@ -62,7 +62,7 @@ namespace MapControl.Images
|
||||||
kmlDocument.Load(docStream);
|
kmlDocument.Load(docStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList();
|
var imageOverlays = await Task.Run(() => ReadGroundOverlays(kmlDocument).ToList());
|
||||||
|
|
||||||
foreach (var imageOverlay in imageOverlays)
|
foreach (var imageOverlay in imageOverlays)
|
||||||
{
|
{
|
||||||
|
|
@ -74,7 +74,7 @@ namespace MapControl.Images
|
||||||
using (var memoryStream = new MemoryStream())
|
using (var memoryStream = new MemoryStream())
|
||||||
{
|
{
|
||||||
await zipStream.CopyToAsync(memoryStream);
|
await zipStream.CopyToAsync(memoryStream);
|
||||||
memoryStream.Position = 0;
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
||||||
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream.AsRandomAccessStream());
|
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream.AsRandomAccessStream());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,17 @@ namespace MapControl.Images
|
||||||
{
|
{
|
||||||
public partial class GroundOverlayPanel
|
public partial class GroundOverlayPanel
|
||||||
{
|
{
|
||||||
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromFile(string docFile)
|
private Task<List<ImageOverlay>> ReadGroundOverlaysFromFileAsync(string docFile)
|
||||||
|
{
|
||||||
|
return Task.Run(() => ReadGroundOverlaysFromFile(docFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task<List<ImageOverlay>> ReadGroundOverlaysFromArchiveAsync(string archiveFile)
|
||||||
|
{
|
||||||
|
return Task.Run(() => ReadGroundOverlaysFromArchive(archiveFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ImageOverlay> ReadGroundOverlaysFromFile(string docFile)
|
||||||
{
|
{
|
||||||
docFile = Path.GetFullPath(docFile);
|
docFile = Path.GetFullPath(docFile);
|
||||||
|
|
||||||
|
|
@ -22,17 +32,18 @@ namespace MapControl.Images
|
||||||
kmlDocument.Load(docFile);
|
kmlDocument.Load(docFile);
|
||||||
|
|
||||||
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList();
|
var imageOverlays = ReadGroundOverlays(kmlDocument).ToList();
|
||||||
var docUri = new Uri(docFile);
|
var docDir = Path.GetDirectoryName(docFile);
|
||||||
|
|
||||||
foreach (var imageOverlay in imageOverlays)
|
foreach (var imageOverlay in imageOverlays)
|
||||||
{
|
{
|
||||||
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(new Uri(docUri, imageOverlay.ImagePath));
|
imageOverlay.ImageSource = ImageLoader.LoadImage(Path.Combine(docDir, imageOverlay.ImagePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
return imageOverlays;
|
return imageOverlays;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<ImageOverlay>> ReadGroundOverlaysFromArchive(string archiveFile)
|
private List<ImageOverlay> ReadGroundOverlaysFromArchive(string archiveFile)
|
||||||
{
|
{
|
||||||
using (var archive = ZipFile.OpenRead(archiveFile))
|
using (var archive = ZipFile.OpenRead(archiveFile))
|
||||||
{
|
{
|
||||||
|
|
@ -62,9 +73,9 @@ namespace MapControl.Images
|
||||||
using (var zipStream = imageEntry.Open())
|
using (var zipStream = imageEntry.Open())
|
||||||
using (var memoryStream = new MemoryStream())
|
using (var memoryStream = new MemoryStream())
|
||||||
{
|
{
|
||||||
await zipStream.CopyToAsync(memoryStream);
|
zipStream.CopyTo(memoryStream);
|
||||||
memoryStream.Position = 0;
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
||||||
imageOverlay.ImageSource = await ImageLoader.LoadImageAsync(memoryStream);
|
imageOverlay.ImageSource = ImageLoader.LoadImage(memoryStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue