在地图上移动对象(图钉)

时间:2013-07-16 22:26:55

标签: c# wpf pushpin

我正在读取移动对象的文件,并将它们放入字典中(validMovingObjects)。我将每个对象表示为地图上的图钉(baseMap)。当一个对象改变其位置(纬度或经度)时,我更新validMovingObjects(删除旧实例并插入新实例)。然后我将validMovingObjects中的所有对象添加到地图图层(objectsLayer),然后添加到baseMap。我通过调用下面的refereshMap方法对文件中的每一个读取执行此操作。

问题:

图钉不动。只有移动对象的最后位置在地图上显示为静态图钉。

任何帮助将不胜感激。感谢

public void refereshMap(MapLayer objectsLayer, Microsoft.Maps.MapControl.WPF.Map baseMap)
{
    System.Threading.Thread.Sleep(500);

    baseMap.Children.Clear();

    objectsLayer.Children.Clear();

    PositionOrigin objectPositionOrigin = PositionOrigin.Center;

    Location objectLocation;

    foreach (KeyValuePair<int, MovingObject> pair in validMovingObjects) 
    {        
        objectLocation = new Location(pair.Value.objectLatitude,pair.Value.objectLongitude);

        objectsLayer.AddChild(pair.Value.objectPin, objectLocation, objectPositionOrigin);
    }

    baseMap.Children.Add(objectsLayer);
}

1 个答案:

答案 0 :(得分:2)

您肯定是通过在循环中反复调用refreshMap方法来阻止UI线程。

考虑更新DispatcherTimerTick事件处理程序中的图钉位置。

另请注意,不必经常删除和添加图钉objectLayer。将图钉添加到MapLayer后,您可以更改其MapLayer.Position附加属性。