Center Property Not Correctly Set

6 posts, 0 answers
  1. Trinh
    Trinh avatar
    3 posts
    Member since:
    Feb 2012

    Posted 29 Feb 2012 Link to this post

    I'm trying to traverse through each item on the map randomly when the application is in idle. I did this by setting up a custom attach property and I would bind my storyboard animation to it. Inside the attach property, I would set the center/zoomlevel everytime the property value changes.

    Example of setting the center value of the map.

    private static void OnMapCenterPositionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                var mapCtrl = (RadMap)d;
                var p = (Point)(e.NewValue);
                Debug.WriteLine("Old Value: " + mapCtrl.Center.Latitude + ", " + mapCtrl.Center.Longitude);
                var newLocation = new Location(p.X, p.Y);
                mapCtrl.Center = newLocation;
                Debug.WriteLine("New Value: " + p.X + ", " + p.Y);
                Debug.WriteLine("Changed Value: " + mapCtrl.Center.Latitude + ", " + mapCtrl.Center.Longitude);
            }

    Storyboard
    <Storyboard x:Name="TraverseStoryboard" Completed="TraverseStoryboardCompleted">
                <DoubleAnimationUsingKeyFrames x:Name="ZoomAnimation" AutoReverse="True"
                            Storyboard.TargetName="ProductMaps">
                    <EasingDoubleKeyFrame KeyTime="0:0:0" Value="3.0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <SineEase EasingMode="EaseOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                    <EasingDoubleKeyFrame KeyTime="0:0:5" Value="17.0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <SineEase EasingMode="EaseOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                    <EasingDoubleKeyFrame KeyTime="0:0:10" Value="17"/>
                </DoubleAnimationUsingKeyFrames>
                <PointAnimationUsingKeyFrames x:Name="CenterPointAnimation"
                            Storyboard.TargetName="ProductMaps"  >
                    <EasingPointKeyFrame x:Name="CenterPointKeyFrame"  KeyTime="0:0:2">
                        <EasingPointKeyFrame.EasingFunction>
                            <SineEase EasingMode="EaseOut" />
                        </EasingPointKeyFrame.EasingFunction>
                    </EasingPointKeyFrame>
                </PointAnimationUsingKeyFrames>
            </Storyboard>


    Snippet of the output:
    Old Value: 47.1004638671875, -121.004898071289
    New Value: 47.4084663391113, -121.796180725098
    Changed Value: 47.4084663391113, -121.796180725098  -RIGHT
    Old Value: 47.4084663391113, -121.796180725098
    New Value: 47.5841407775879, -122.247497558594
    Changed Value: 47.5841407775879, -122.247497558594 -RIGHT
    Old Value: 47.5841407775879, -122.247497558594
    New Value: 47.6220588684082, -122.344917297363
    Changed Value: 47.6220588684082, -122.344917297363 -RIGHT
    Old Value: 47.6220588684082, -60.4470691680906
    New Value: 47.2447166442871, -110.667938232422
    Changed Value: 47.2447166442871, -23.9447751045224 -WRONG
    Old Value: 47.2447166442871, -23.9447751045224
    New Value: 46.643497467041, -92.0630416870117
    Changed Value: 51.8482260475886, -17.861059427261 - WRONG

    I did not touch or pan the map while the map was animating.

    I assumed that it could be a timing issue, especially when it is constantly setting the center property on every animation value change, so I tried and set the Map center value directly and see what's the value is after the CenterChanged event fired, but just as expected, the center value is off, usually the longitude that is wrong.

    For the purpose of what I'm trying to do, this causes the map to zoom in randomly for example in the middle of the ocean instead of the item I have on the map.

    Any help would be appreciated.

    Thank You,
  2. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 05 Mar 2012 Link to this post

    Hi Trinh,

    It is very complicated and it is hard to reproduce the problem without your solution, but using just the code snippet you sent.
    Could you, please, provide us with your solution or with a small sample solution which reproduces it?

    All the best,
    Andrey Murzov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  3. DevCraft banner
  4. Trinh
    Trinh avatar
    3 posts
    Member since:
    Feb 2012

    Posted 05 Mar 2012 Link to this post

    Hi Andrey,

    I just put together a simple Silverlight application that demonstrates this problem. How do you want me to get this to you? The attachment feature below only support images.

    Thanks,
    -Trinh
  5. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 08 Mar 2012 Link to this post

    Hi Trinh,

    It is not allowed to attach any archives in our forums due to our policies. However you may use a third -party website and attach your runnable archived solution there.  

    Greetings,
    Andrey Murzov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  6. Trinh
    Trinh avatar
    3 posts
    Member since:
    Feb 2012

    Posted 08 Mar 2012 Link to this post

    Here is the sample solution.

    ---link removed---

    I also noticed that the memory usage slowly increases as the map continues to animate over a long period of time. I get 250mb increase after 30+ minutes of running. I'm not sure if whether the Map control is leaking or my code.

    -Trinh
  7. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 13 Mar 2012 Link to this post

    Hi Trinh,

    You use the RadMap.GeoBounds property in your application. In this case the RadMap corrects the Center property when you set the Center or ZoomLevel properties to keep the map inside the specified region.
    For example if you try to set the Center to your pushpin which is located at right on map, then after the following code the Center property will be different than specified:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Threading;
    using Telerik.Windows.Controls.Map;
    using Telerik.Windows.Controls;
    using System.Diagnostics;
     
    namespace MapSample
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
     
                ProductMaps.GeoBounds =
                    new LocationRect(new Location(ProductMaps.SpatialReference.MinLatitude, ProductMaps.SpatialReference.MinLongitude),
                        new Location(ProductMaps.SpatialReference.MaxLatitude, ProductMaps.SpatialReference.MaxLongitude));
     
                ProductMaps.ZoomChanged += new EventHandler(ProductMaps_ZoomChanged);
                ProductMaps.CenterChanged += new EventHandler(ProductMaps_CenterChanged);
     
                this.ProductMaps.ZoomLevel = 3;
                this.ProductMaps.Center = new Location(39.907337, 116.389187);
            }
     
            private void ProductMaps_CenterChanged(object sender, EventArgs e)
            {
                Debug.WriteLine("RadMap Center changed: " + (sender as RadMap).Center.ToString());
            }
     
            private void ProductMaps_ZoomChanged(object sender, EventArgs e)
            {
                Debug.WriteLine("RadMap Zoom changed: " + (sender as RadMap).ZoomLevel.ToString());
            }
     
        }
    }


    We checked the leaking. We got from 100 Mb up to 350 Mb of used memory, but this value is dynamically changed during animation. So, it seems the control works as expected.

    One last note. Please, do not provide links to projects containing dev assemblies in public forums. You can ask the license holder to add you as a licensed developer, so you will be able to open a formal support ticket. I have removed the link from your message.

    Best regards,
    Andrey Murzov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
Back to Top
DevCraft banner