mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Version 1.3.10: Minor improvements in TileImageLoader. Removed SurfaceApplication from VS Solution.
This commit is contained in:
parent
09eeb11269
commit
aa04fd0551
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||
# Visual Studio 2012
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileDbCache", "Caching\FileDbCache\FileDbCache.csproj", "{EF44F661-B98A-4676-927F-85D138F82300}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SurfaceApplication", "SampleApps\SurfaceApplication\SurfaceApplication.csproj", "{6285FB9D-B7EA-469A-B464-224077967167}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageFileCache", "Caching\ImageFileCache\ImageFileCache.csproj", "{86470440-FEE2-4120-AF5A-3762FB9C536F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightApplication", "SampleApps\SilverlightApplication\SilverlightApplication.csproj", "{CBA8C535-CCA3-4F60-8D3E-0E25791CBD21}"
|
||||
|
|
@ -31,10 +29,6 @@ Global
|
|||
{EF44F661-B98A-4676-927F-85D138F82300}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EF44F661-B98A-4676-927F-85D138F82300}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EF44F661-B98A-4676-927F-85D138F82300}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6285FB9D-B7EA-469A-B464-224077967167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6285FB9D-B7EA-469A-B464-224077967167}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6285FB9D-B7EA-469A-B464-224077967167}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6285FB9D-B7EA-469A-B464-224077967167}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{86470440-FEE2-4120-AF5A-3762FB9C536F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{86470440-FEE2-4120-AF5A-3762FB9C536F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{86470440-FEE2-4120-AF5A-3762FB9C536F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ using System.Windows;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -24,13 +24,16 @@ namespace MapControl
|
|||
this.tileLayer = tileLayer;
|
||||
}
|
||||
|
||||
internal void BeginGetTiles(IEnumerable<Tile> tiles)
|
||||
internal void StartGetTiles(IEnumerable<Tile> tiles)
|
||||
{
|
||||
foreach (var tile in tiles.Where(t => !t.HasImage))
|
||||
foreach (var tile in tiles)
|
||||
{
|
||||
var uri = tileLayer.TileSource.GetUri(tile.XIndex, tile.Y, tile.ZoomLevel);
|
||||
|
||||
tile.SetImageSource(new BitmapImage(uri), true);
|
||||
if (uri != null)
|
||||
{
|
||||
tile.SetImageSource(new BitmapImage(uri), tileLayer.AnimateTileOpacity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,9 +71,12 @@ namespace MapControl
|
|||
this.tileLayer = tileLayer;
|
||||
}
|
||||
|
||||
internal void BeginGetTiles(IEnumerable<Tile> tiles)
|
||||
internal void StartGetTiles(IEnumerable<Tile> tiles)
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(BeginGetTilesAsync, new List<Tile>(tiles.Where(t => !t.HasImage)));
|
||||
if (tiles.Any())
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(GetTilesAsync, tiles.ToList());
|
||||
}
|
||||
}
|
||||
|
||||
internal void CancelGetTiles()
|
||||
|
|
@ -87,15 +90,15 @@ namespace MapControl
|
|||
return string.Format("{0}/{1}/{2}/{3}", tileLayer.SourceName, tile.ZoomLevel, tile.XIndex, tile.Y);
|
||||
}
|
||||
|
||||
private void BeginGetTilesAsync(object newTilesList)
|
||||
private void GetTilesAsync(object tileList)
|
||||
{
|
||||
var newTiles = (List<Tile>)newTilesList;
|
||||
var tiles = (List<Tile>)tileList;
|
||||
var imageTileSource = tileLayer.TileSource as ImageTileSource;
|
||||
var animateOpacity = tileLayer.AnimateTileOpacity;
|
||||
|
||||
if (imageTileSource != null && !imageTileSource.CanLoadAsync)
|
||||
{
|
||||
foreach (var tile in newTiles)
|
||||
foreach (var tile in tiles)
|
||||
{
|
||||
tileLayer.Dispatcher.BeginInvoke(
|
||||
(Action<Tile, ImageTileSource>)((t, ts) => t.SetImageSource(ts.LoadImage(t.XIndex, t.Y, t.ZoomLevel), animateOpacity)),
|
||||
|
|
@ -108,9 +111,9 @@ namespace MapControl
|
|||
!tileLayer.TileSource.UriFormat.StartsWith("file://") &&
|
||||
!string.IsNullOrWhiteSpace(tileLayer.SourceName))
|
||||
{
|
||||
var outdatedTiles = new List<Tile>(newTiles.Count);
|
||||
var outdatedTiles = new List<Tile>(tiles.Count);
|
||||
|
||||
foreach (var tile in newTiles)
|
||||
foreach (var tile in tiles)
|
||||
{
|
||||
var key = GetCacheKey(tile);
|
||||
var buffer = Cache.Get(key) as byte[];
|
||||
|
|
@ -136,10 +139,10 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
newTiles = outdatedTiles; // enqueue outdated tiles at last
|
||||
tiles = outdatedTiles; // enqueue outdated tiles at last
|
||||
}
|
||||
|
||||
foreach (var tile in newTiles)
|
||||
foreach (var tile in tiles)
|
||||
{
|
||||
pendingTiles.Enqueue(tile);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ namespace MapControl
|
|||
{
|
||||
SelectTiles();
|
||||
RenderTiles();
|
||||
tileImageLoader.BeginGetTiles(tiles);
|
||||
tileImageLoader.StartGetTiles(tiles.Where(t => !t.HasImage));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ namespace MapControl
|
|||
|
||||
private Func<int, int, int, Uri> getUri;
|
||||
private string uriFormat = string.Empty;
|
||||
private int hostIndex = -1;
|
||||
|
||||
public TileSource()
|
||||
{
|
||||
|
|
@ -103,7 +102,7 @@ namespace MapControl
|
|||
|
||||
private Uri GetOpenStreetMapUri(int x, int y, int zoomLevel)
|
||||
{
|
||||
hostIndex = (hostIndex + 1) % 3;
|
||||
var hostIndex = (x + y + zoomLevel) % 3;
|
||||
|
||||
return new Uri(UriFormat.
|
||||
Replace("{c}", "abc".Substring(hostIndex, 1)).
|
||||
|
|
@ -114,7 +113,7 @@ namespace MapControl
|
|||
|
||||
private Uri GetGoogleMapsUri(int x, int y, int zoomLevel)
|
||||
{
|
||||
hostIndex = (hostIndex + 1) % 4;
|
||||
var hostIndex = (x + y + zoomLevel) % 4;
|
||||
|
||||
return new Uri(UriFormat.
|
||||
Replace("{i}", hostIndex.ToString()).
|
||||
|
|
@ -125,7 +124,7 @@ namespace MapControl
|
|||
|
||||
private Uri GetMapQuestUri(int x, int y, int zoomLevel)
|
||||
{
|
||||
hostIndex = (hostIndex % 4) + 1;
|
||||
var hostIndex = (x + y + zoomLevel) % 4 + 1;
|
||||
|
||||
return new Uri(UriFormat.
|
||||
Replace("{n}", hostIndex.ToString()).
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@
|
|||
Value="{Binding Opacity, ElementName=mapImage, Mode=TwoWay}"/>
|
||||
</StackPanel>
|
||||
<CheckBox Margin="5" VerticalAlignment="Bottom" Content="Seamarks" Click="SeamarksClick"/>
|
||||
<ComboBox Margin="5" VerticalAlignment="Bottom" Width="120" SelectedIndex="0" SelectionChanged="TileLayerSelectionChanged">
|
||||
<ComboBox x:Name="tileLayerComboBox" Margin="5" VerticalAlignment="Bottom" Width="120" SelectionChanged="TileLayerSelectionChanged">
|
||||
<sys:String>OpenStreetMap</sys:String>
|
||||
<sys:String>OpenCycleMap</sys:String>
|
||||
<sys:String>OCM Transport</sys:String>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ namespace SilverlightApplication
|
|||
public MainPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
tileLayerComboBox.SelectedIndex = 0;
|
||||
|
||||
var polylines = (ICollection<object>)Resources["Polylines"];
|
||||
polylines.Add(
|
||||
|
|
@ -134,12 +135,9 @@ namespace SilverlightApplication
|
|||
|
||||
private void TileLayerSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (map != null)
|
||||
{
|
||||
var comboBox = (ComboBox)sender;
|
||||
var tileLayers = (TileLayerCollection)Resources["TileLayers"];
|
||||
map.TileLayer = tileLayers[(string)comboBox.SelectedItem];
|
||||
}
|
||||
var comboBox = (ComboBox)sender;
|
||||
var tileLayers = (TileLayerCollection)Resources["TileLayers"];
|
||||
map.TileLayer = tileLayers[(string)comboBox.SelectedItem];
|
||||
}
|
||||
|
||||
private void SeamarksClick(object sender, RoutedEventArgs e)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@
|
|||
<Slider Margin="10,-10,10,-10" Width="200" Value="50" ValueChanged="ImageOpacitySliderValueChanged"/>
|
||||
</StackPanel>
|
||||
<CheckBox Margin="10" VerticalAlignment="Center" Content="Seamarks" Click="SeamarksClick"/>
|
||||
<ComboBox Margin="10" Width="200" VerticalAlignment="Center" SelectedIndex="0" SelectionChanged="TileLayerSelectionChanged">
|
||||
<ComboBox x:Name="tileLayerComboBox" Margin="10" Width="200" VerticalAlignment="Center" SelectionChanged="TileLayerSelectionChanged">
|
||||
<ComboBoxItem>OpenStreetMap</ComboBoxItem>
|
||||
<ComboBoxItem>OpenCycleMap</ComboBoxItem>
|
||||
<ComboBoxItem>OCM Transport</ComboBoxItem>
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ namespace StoreApplication
|
|||
public MainPage()
|
||||
{
|
||||
this.InitializeComponent();
|
||||
tileLayerComboBox.SelectedIndex = 0;
|
||||
|
||||
var polylines = (ICollection<object>)Resources["Polylines"];
|
||||
polylines.Add(
|
||||
|
|
@ -143,12 +144,9 @@ namespace StoreApplication
|
|||
|
||||
private void TileLayerSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (map != null)
|
||||
{
|
||||
var comboBox = (ComboBox)sender;
|
||||
var tileLayers = (TileLayerCollection)Resources["TileLayers"];
|
||||
map.TileLayer = tileLayers[(string)((ComboBoxItem)comboBox.SelectedItem).Content];
|
||||
}
|
||||
var comboBox = (ComboBox)sender;
|
||||
var tileLayers = (TileLayerCollection)Resources["TileLayers"];
|
||||
map.TileLayer = tileLayers[(string)((ComboBoxItem)comboBox.SelectedItem).Content];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<!--<map:TileLayer SourceName="Google Maps" Description="Google Maps - © {y} Google"
|
||||
TileSource="http://mt{i}.google.com/vt/x={x}&y={y}&z={z}" MaxZoomLevel="20"/>
|
||||
<map:TileLayer SourceName="Google Images" Description="Google Maps - © {y} Google" Background="#FF3F3F3F" Foreground="White"
|
||||
TileSource="http://khm{i}.google.com/kh/v=123&x={x}&y={y}&z={z}" MaxZoomLevel="20"/>
|
||||
TileSource="http://khm{i}.google.com/kh/v=135&x={x}&y={y}&z={z}" MaxZoomLevel="20"/>
|
||||
<map:TileLayer SourceName="Bing Maps" Description="Bing Maps - © {y} Microsoft Corporation"
|
||||
TileSource="http://ecn.t{i}.tiles.virtualearth.net/tiles/r{q}.png?g=0&stl=h" MaxZoomLevel="20"/>
|
||||
<map:TileLayer SourceName="Bing Images" Description="Bing Maps - © {y} Microsoft Corporation" Background="#FF3F3F3F" Foreground="White"
|
||||
|
|
@ -152,7 +152,7 @@
|
|||
|
||||
<!-- experimental WMS map layers -->
|
||||
<!--<map:MapImageLayer Opacity="0.5"
|
||||
UriFormat="http://129.206.228.72/cached/osm?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=osm_auto:all&STYLES=&SRS=EPSG:900913&BBOX={W},{S},{E},{N}&WIDTH={X}&HEIGHT={Y}&FORMAT=image/png"/>-->
|
||||
UriFormat="http://watzmann-geog.urz.uni-heidelberg.de/cached/osm?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=osm_auto:all&STYLES=&SRS=EPSG:900913&BBOX={W},{S},{E},{N}&WIDTH={X}&HEIGHT={Y}&FORMAT=image/png"/>-->
|
||||
<!--<map:MapImageLayer Opacity="0.5"
|
||||
UriFormat="http://ows.terrestris.de/osm-basemap/service?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=OSM-WMS-Deutschland&STYLES=&SRS=EPSG:900913&BBOX={W},{S},{E},{N}&WIDTH={X}&HEIGHT={Y}&FORMAT=image/png"/>-->
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © Clemens Fischer 2012-2013")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("1.3.9")]
|
||||
[assembly: AssemblyFileVersion("1.3.9")]
|
||||
[assembly: AssemblyVersion("1.3.10")]
|
||||
[assembly: AssemblyFileVersion("1.3.10")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.18046
|
||||
// Runtime Version:4.0.30319.18051
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
|
|
|
|||
Loading…
Reference in a new issue