handling when map mode changes

8 posts, 0 answers
  1. ewart
    ewart avatar
    221 posts
    Member since:
    Jan 2007

    Posted 04 Apr 2010 Link to this post

    Hi tema, what is the best way of detecting if the user changes settings on the MapCommandBar.  I need to be able to save these settings and also update other on screen controls when they change from Aerial to Road, or if the LabelsVisible setting is changed.  The MapCommandBar does not seem to have an event for detecting these changes?

    regards
    ewart

     

  2. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 06 Apr 2010 Link to this post

    Hello Ewart,

    We will add new "MapModeChanged" event in the future releases.
    As workaround you can create a custom map provider class which would inherit from BingMapProvider. You should override the OnMapModeChanged method for raising an event.
    The sample code of the custom provider is below.
    class CustomBingMapProvider : BingMapProvider
    {
        public CustomBingMapProvider(MapMode mode, bool labelVisible, string applicationId)
            : base(mode, labelVisible, applicationId)
        {
        }
        /// <summary>
        /// Event occurs when the mode of the map provider is changed.
        /// </summary>
        public event EventHandler MapModeChanged;
        protected override void OnMapModeChanged(MapMode oldMode, MapMode newMode)
        {
            base.OnMapModeChanged(oldMode, newMode);
            if (this.MapModeChanged != null)
            {
                this.MapModeChanged(this, null);
            }
        }
    }

    Then having used the custom map provider class instead of BingMapProvider you should add an event handler to your application like this:
    public MainPage()
    {
        InitializeComponent();
        // load "mode" and "labelVisible" settings
        // ...
        CustomBingMapProvider provider = new CustomBingMapProvider(mode, labelVisible, "BING KEY");
        provider.MapModeChanged += new EventHandler(provider_MapModeChanged);
        this.radMap.Provider = provider;
    }
    private void provider_MapModeChanged(object sender, EventArgs e)
    {
        MapProviderBase provider = (MapProviderBase)sender;
        // save settings
        // provider.Mode;
        // provider.IsLabelVisible;
    }

    Regards,
    Andrey Murzov
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  3. DevCraft banner
  4. ewart
    ewart avatar
    221 posts
    Member since:
    Jan 2007

    Posted 26 Apr 2010 Link to this post

    awesum thanks I see you have added a new change event. 

    at the moment i find the event is raised twice, and also my map_initialise is fired twice when I change the event through the UI (am using the telerik MapCommandBar defined seperately from the radmap in my situation.  weird - I may experiment with a small test project to see if it's something strange I'm doing.

    cheers
    ewart.

  5. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 27 Apr 2010 Link to this post

    Hi Ewart,

    Thank you for the feedback.
    Unfortunately we cannot reproduce the case when the MapModeChanged event occurs twice.
    The RadMap.InitializeCompleted event occurs when the BingMapProvider has retrieved necessary data for initializing from WCF service.
    It occurs once when the map mode is changed to Aerial or Road mode first time. Also it occurs when the label visible flag is changed first time for any mode.
    The bird's eye mode raises the InitializeCompleted event each time the scene of 3D projection is changed. There is a problem in this mode. If it has been used, then it continues to refresh scenes data also for any other mode.

    Sincerely yours,
    Andrey Murzov
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  6. ewart
    ewart avatar
    221 posts
    Member since:
    Jan 2007

    Posted 21 Mar 2011 Link to this post

    Hi, I've just updated to Q1, 2011 and MapModeChanged seems to be missing again?  Can you confirm if this has been deprecated in some way and if so what the new API looks like? 

    I was hooking it like so:
    provider.MapModeChanged += new EventHandler<MapModeChangedEventArgs>(provider_MapModeChanged);

    The current documentation on silverlight does not include the Q1 2011 backwards compatibility/change section so it's real hard to know whats changed (other than the new build errors of course!)

    Also, on a similar note I can no longer init OpenStreetMapProvider like this (where providerMode is MapMode),
    provider = new OpenStreetMapProvider( providerMode, true);

    The whole code being:
    // Determine which provider to use
            switch (mapProvider)
            {
                case MapProvider.OpenStreetMap: provider = new OpenStreetMapProvider(  providerMode, true); break;
                default: provider = new BingMapProvider( providerMode, true, _bingMapKey); break;
            }
     
            // Set the provider of the map
            this.radMap.Provider = provider;
             
            provider.MapModeChanged += new EventHandler<MapModeChangedEventArgs>(provider_MapModeChanged);

    Any ideas?

    cheers
    ewart

  7. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 21 Mar 2011 Link to this post

    Hi Ewart,

    For information about changes of the Q1 2011, please, take a look to the release history:
    http://www.telerik.com/products/silverlight/whats-new/release-history/q1-2011-version-2011-1-0315.aspx

    Please see the following topic of RadMap: "Custom map provider architecture is not backwards compatible with previous versions".

    The map providers architecture is not backwards compatible with previous versions. Unfortunately the documentation is not updated yet but should be online later this week.
    Currently the map mode is supported for Bing map provider only. The OpenStreet provider has not Aerial or Road modes. The OpenStreet (like many other providers) site even have not analogs for the "mode" term. They have two renderers: Mapnik and Osmarenderer.
    You can use the SetMapSource method of the map provider to set certain source like to the following:

    var provider = new OpenStreetMapProvider();
    provider.SetMapSource(typeof(Telerik.Windows.Controls.Map.OpenStreetOsmarenderSource).FullName);

    Currently every provider has own set of the commands are shown in the command bar. They are listed in the "Commads" property of the map provider. The buttons for commands are displayed automatically when the provider is assigned to the map control.

    The MapModeChanged event no longer exists. We are sorry. Currently the map control does not contain appropriate event in new architecture. We have created the PITS issue to implement the MapSourceChanged event instead of MapModeChanged. It will be available in the MapProviderBase class in nearest internal build.
    You can track it using the following link:
    http://www.telerik.com/support/pits.aspx#/public/silverlight/5187

    Best wishes,
    Andrey Murzov
    the Telerik team

  8. ewart
    ewart avatar
    221 posts
    Member since:
    Jan 2007

    Posted 21 Mar 2011 Link to this post

    originally the two map modes did change the two types of tiles for the opensource but I shall look into the map provider to change the source, that should be OK.

    the mapmodechanged event missing really screws me, hopefully that can be a priority, as well as documenting the release.

    cheers
    ewart

  9. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 24 Mar 2011 Link to this post

    Hi Ewart,

    We've added the MapSourceChanged event to MapProviderBase already. The fix should be available in the nearest internal build.

    Kind regards,
    Andrey Murzov
    the Telerik team
Back to Top
DevCraft banner