Please refer to the attached gif file. The sample project together with the sample files of the local provider can be downloaded here: https://1drv.ms/u/s!AnnV2HsINMD_yxDEY2iOWHXn5V9_?e=VurA0N
There is a noticeable delay after moving the mouse while panning the map. After making a comparison with Open Street Maps and a local provider, it seems that the local provider is slightly slower than the OSM provider. Please refer to the attached gif file.
After profiling the project, it seems that Image.FromFile for loading the required tile takes most of the time:
With the OSM the tile is loaded by using Image.FromStream and it takes 3 times less time:
public partial class RadForm1 : RadForm
{
private BingRestMapProvider bingProvider;
public RadForm1()
{
this.InitializeComponent();
this.SetupBingProvider();
this.SetupLayers();
this.ImportTestItem();
this.radMapViewer.MapElement.MiniMapElement.EnableZooming = true;
}
private void SetupBingProvider()
{
string bingKey = "Your Bing Key";
this.bingProvider = new BingRestMapProvider();
this.bingProvider.UseSession = true;
this.bingProvider.BingKey = bingKey;
this.bingProvider.ImagerySet = Telerik.WinControls.UI.Map.Bing.ImagerySet.Aerial;
LocalFileCacheProvider cache = new LocalFileCacheProvider(@"..\..\cache");
this.bingProvider.CacheProvider = cache;
this.bingProvider.ProviderUpdated += this.BingProvider_ProviderUpdated;
this.radMapViewer.Providers.Add(this.bingProvider);
this.bingProvider.InitializationComplete += this.BingProvider_InitializationComplete;
}
private void BingProvider_ProviderUpdated(object sender, EventArgs e)
{
// Workaround
this.bingProvider.MaxZoomLevel = 20;
}
private void BingProvider_InitializationComplete(object sender, EventArgs e)
{
this.radMapViewer.BringIntoView(new PointG(42.698559196991135, 23.320803862212352), 20);
}
private void SetupLayers()
{
MapLayer modelLayer = new MapLayer("Models");
this.radMapViewer.Layers.Add(modelLayer);
}
public void ImportTestItem()
{
Collection<Collection<PointG>> paths = new Collection<Collection<PointG>>();
var points = new Collection<PointG>();
paths.Add(points);
points.Add(new PointG(42.698559196991135, 23.320803862212352));
points.Add(new PointG(42.698927962901238, 23.319237221916447));
points.Add(new PointG(42.698928093965123, 23.319236667248555));
points.Add(new PointG(42.698928095639218, 23.319236660952237));
points.Add(new PointG(42.698661960692946, 23.319152714625682));
points.Add(new PointG(42.698661958997257, 23.319152719880927));
points.Add(new PointG(42.698661126454983, 23.319156258531189));
points.Add(new PointG(42.698366706433447, 23.320407248233786));
points.Add(new PointG(42.698559196991135, 23.320803862212352));
MapPath mapVisual = new MapPath(paths);
mapVisual.BorderColor = Color.Blue;
mapVisual.BackColor = Color.Empty;
mapVisual.BorderWidth = 3;
this.radMapViewer.Layers["Models"].Add(mapVisual);
}
}
How to reproduce: Check the attached project and video Workaround: force an update in the MapElement Public Class RadForm1 Private bingKey As String = "" Dim myTimer As Timer Public Sub New() InitializeComponent() Dim bingProvider As BingRestMapProvider = New Telerik.WinControls.UI.BingRestMapProvider() bingProvider.UseSession = True bingProvider.BingKey = bingKey AddHandler bingProvider.SearchCompleted, AddressOf bingProvider_SearchCompleted Me.RadMap1.Providers.Add(bingProvider) myTimer = New Timer myTimer.Interval = 500 AddHandler myTimer.Tick, AddressOf OnMyyTimerTick End Sub Private Function OnMyyTimerTick() As Object myTimer.Stop() Me.RadMap1.MapElement.InvalidateMeasure(True) End Function Private Sub bingProvider_SearchCompleted(sender As Object, e As SearchCompletedEventArgs) myTimer.Start() End Sub End Class
Error: System.ArgumentException was unhandled HResult=-2147024809 Message=An item with the same key has already been added. Source=mscorlib StackTrace: at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Telerik.WinControls.UI.DbfHeader.CreateExtendedPropertySet() at Telerik.WinControls.UI.DbfReader..ctor(Stream stream, ExtendedPropertySet propertySet, Encoding encoding) at Telerik.WinControls.UI.ShapeFileReader.Read(ShapeFileReaderParameters parameters) at _1125357MapShapeFiles.RadForm1..ctor() in d:\Projects\1125357MapShapeFiles\RadForm1.cs:line 37 at _1125357MapShapeFiles.Program.Main() in d:\Projects\1125357MapShapeFiles\Program.cs:line 17 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
To reproduce: - Create a shape with QGIS and add it to RadMap using the approach described in the documentation: http://docs.telerik.com/devtools/winforms/map/file-readers/esri-shapefile-reader