I can't bind to the Mode property of the BingRestMapProvider. The BingRestMapProvider is not part of the visual tree. This worked in Silverlight and I thought it worked in previous version of WPF as well.
Currently, when you use the BingRestMapProvider and the BingRestSearchLocationRequest the found locations are formatted using the System.Text.Encoding.Default encoding. This way if the found location contains unsupported characters they won't be shown properly. Introduce a property for the BingRestSearchLocationRequest class that allows you to set the Encoding.
RadMap with Wraparound = True. Custom TiledProvider with custom TileSource is used. GetCachedTile is overridden to get the cached tiles in the local file system. When zooming , endless invocation of GetCachedTile method is performed which leads to increasing of CPU usage.
There is a change in the Open Street Map Cycle and CylcleTransport services and they require an API key. Without it the service will returned tiles with a watermark saying "API KEY REQUIRED". Currently, the OpenStreetProvider doesn't expose a mechanism for providing a key. At this point you can provide a key by creating a custom map provider deriving from OpenStreeMapProvider and also a custom OsmTileMapSource. And override the original URL to use also an API Key. public class CustomOpenStreetMapProvider : OpenStreetMapProvider { public CustomOpenStreetMapProvider() { string sourceKey = (typeof(OpenStreetCycleTransportSource)).FullName; this.MapSources[sourceKey] = new CustomOpenStreetCycleTransportSource("your api key here"); } } public class CustomOpenStreetCycleTransportSource : OsmTileMapSource { private static string UrlFormat = @"http://{prefix}.tile.thunderforest.com/transport/{zoom}/{x}/{y}.png?apikey={apikey}"; private string apiKey; public CustomOpenStreetCycleTransportSource(string apiKey) : base(UrlFormat) { this.apiKey = apiKey; } protected override Uri GetTile(int tileLevel, int tilePositionX, int tilePositionY) { Uri originalUri = base.GetTile(tileLevel, tilePositionX, tilePositionY); string newUri = originalUri.OriginalString.Replace("{apikey}", this.apiKey); return new Uri(newUri); } } <telerik:RadMap> <telerik:RadMap.Provider> <local:CustomOpenStreetMapProvider/> </telerik:RadMap.Provider> </telerik:RadMap>
Add a way to control the pan / zoom animation duration. Currently the properties which control these animation durations are private in MultiScaleImage.cs
BingRestMapProvider always search with Structured URL and that is why it fails to find locations via long query search strings like: "royalton rd & brecksville rd brecksville oh" You can see the difference between Structured and Unstructured rest search URLs here: https://msdn.microsoft.com/en-us/library/ff701711.aspx As a workaround, users can override BingRestMapProvider like so: public class CustomBingRestProvider : BingRestMapProvider { protected override Uri BuildSearchLocationRequestUri(BingRestSearchLocationRequest request) { Uri baseUri = base.BuildSearchLocationRequestUri(request); string newPath = baseUri.AbsoluteUri.Replace("Locations/", "Locations/?q="); return new Uri(newPath); ; }
MiniMapWidth and MiniMapHeight have default values 250 and 200. If you use different values, for example 250 and 250, panning the RadMap can result in jumping the minimap - unexpected zoom in/out. This is easier to observe with MiniMap, outside RadMap. Playing with Width / Height of the MiniMap might workaround the issue.
Expose a property that allows you to get the user state in the SearchLocationError event arguments (BingRestSearchLocationErrorEventArgs). Currently, only the SearchLocationCompleted event args give this information. You can work this around using the following approach: You can create a custom BingRestMapProvider and override its OnSearchRequestCompleted() method. There you can get the UserData from the DownloadStringCompletedEventArgs. Check the attached project.
Add the CanvasDark, CanvasLight, CanvasGray, RoadOnDemand and AerialOnDemand modes in the BingRestMapProvider. Currently it supports only Aerial, Road and BirdsEye and their variants with labels. Check the imagerySet parameter here: https://msdn.microsoft.com/en-us/library/ff701724.aspx Ordnance Survey will not be added among with these modes.
Implement BING REST Traffic API in BingRestMapProvider. https://msdn.microsoft.com/en-us/library/hh441725.aspx This will allow clients request traffic incident. This WON'T be enough to display traffic tiles or get congestion data - this usage is limited. Check answer from R. Brundritt => https://social.msdn.microsoft.com/Forums/en-US/20020cb8-5e8f-4fe6-abda-ffdcc0edb77e/bing-map-rest-traffic-api-congestion?forum=bingmapssilverlightwpfcontrols Note: The following tutorial might be helpful if clients need to use BING REST Traffic API outside RadMap. https://msdn.microsoft.com/en-us/library/jj819168.aspx Note: In R2 2017 BingMapTrafficProvider will be deleted from our code base due to limitations in the BING Maps Developer API terms of use. Also the service which is behind this provider might be stopped in 2017 so applications using this provider with old version of UI for WPF/ Silverlight might also stop working properly.
Map with VisualizationLayer (VL) bound to collection of objects. VL uses an ItemTemplate consisting of MapEllipseView object whose Location Width and Height properties are bound to ViewModel's properties. On a button click, the ItemsSource of the VL is refreshed. However, the ellipses do not appear until a zoom action is performed.
Currently, you can achieve this by using RotateTransform and clipping the container that holds the RadMap control. For example: <Grid RenderTransformOrigin="0.5,0.5" Width="500" Height="500"> <Grid.RenderTransform> <RotateTransform Angle="45" /> </Grid.RenderTransform> <Grid.Clip> <EllipseGeometry Center="250,250" RadiusX="250" RadiusY="250" /> </Grid.Clip> <telerik:RadMap ZoomLevel="6" Center="37, -120"> <telerik:RadMap.Provider> <telerik:OpenStreetMapProvider /> </telerik:RadMap.Provider> </telerik:RadMap> </Grid>
By design, a UserData property must be presented in the arguments of the SearchLocationCompleted, CalculateElevationCompleted and CalculateRouteCompleted events of the BingRestMapProvider. It should provide the UserData object given to the corresponding request classes.
When you have a bindable wrapper as MapEllipseView, MapPolygonView, etc. and bind its ShapeFill property to the view model, the fill is not applied. This is resolved when the UseRegularFill() method of the MapDataShape object is called manually. You can use this approach to work around the issue. Available in LIB version: 2017.2.522
Width / Height of the MapEllipseView are bound to doubles from ViewModel. Runtime change to 0 does not hide / remove the Ellipse from the Map. This is a bug in the MapShapeBindableWrapper's Geometry update code. The workaround is to use the Visibility of the MapEllipseView in order to hide it. Other workaround could be using FrameworkElements (Ellipse, Polyline, Rectangle) instead of BindableWrappers (MapEllipseView, MapPolylinerView, MapRectangleView).
Add public GetCoercedLocationRect method to support the existing GetCoercedLocation. This is crucial in WrapAround + Virtualization scenarios because 180 longitude location is generally considered in the rande [-180;180] but Region with west-east Longitudes like [180-240] should be coerced to [-180; -120]. Available in LIB version: 2016.3.1114
When CommandBarVisibility is Collapsed in VS2013 and Office2013 themes, the zoombar and navigation bar are misplaced. As a workaround users might set CommandBarVisibility="Hidden".
WMTS is a standard protocol for delivery of tiles map data - see https://en.wikipedia.org/wiki/Web_Map_Tile_Service It should be possible to write code to understand pretty much any service complying with the specification. It would be good if RadMap could be extended to enable it to understand the WMTS specification and allow WMTS data to be used.