我一直在研究GPS地图应用程序,其中GPS(L76)开发板的NMEA数据是通过串口获得的。解析CSV数据,然后将经度/纬度信息保存在队列中。目标是在通过串行端口获得位置信息时,在基于WPF的映射应用程序上动态显示图钉。
<WPF:Map Name="XAMLMap" ZoomLevel="17" CredentialsProvider="the key" Mode="road" Margin="241,157,10.334,10">
</WPF:Map>
应用程序通过以下代码成功显示其初始Bing地图显示:
Dispatcher.Invoke(() =>
{
XAMLMap.CredentialsProvider = new ApplicationIdCredentialsProvider("the key");
XAMLMap.Center = new Microsoft.Maps.MapControl.WPF.Location(50.8, -1.12222);
Pushpin currentPushpin = new Pushpin();
currentPushpin.Location = new Microsoft.Maps.MapControl.WPF.Location(50.8, -1.12222);
XAMLMap.ZoomLevel = 18;
XAMLMap.Margin = new Thickness(243, 151, 0, 0);
XAMLMap.Children.Add(currentPushpin);
mapGrid.Children.Add(XAMLMap);
});
但是,当在以下事件方法中从串行数据动态生成推针位置坐标时,会出现实际挑战:
void serialPortHandler_NewSerialDataRecieved(object sender, SerialDataEventArgs e)
{
AddLocation(currentLocation);
}
private void AddLocation(Location location)
{
Dispatcher.Invoke(() =>
{
try
{
Microsoft.Maps.MapControl.WPF.Location currentLocation = new Microsoft.Maps.MapControl.WPF.Location(location.latitude, location.longitude);
Pushpin currentPushpin = new Pushpin();
currentPushpin.Location = currentLocation;
XAMLMap.Margin = new Thickness(243, 151, 0, 0);
XAMLMap.Children.Add(currentPushpin);
mapGrid.Children.Add(XAMLMap);
}
catch (Exception exc)
{
}
});
}
更新后的坐标纬度/经度值仍然可以正确放置在地图上(XAMLMap)。然而,当地图被缩小/缩小或平移时,地图内容(即道路,地理细节,分辨率)根本不更新,即新的可见地图信息根本不会更新,留下不规则补丁的拼图。
另外,请注意,该问题与我在上面的代码或任何其他子代中将XAMLMap对象添加到网格的方式无关。
我已经研究过解决这个问题的各种可能性,但到目前为止还没有成功。这还包括:
在这方面的任何帮助或指示都将受到高度赞赏。
答案 0 :(得分:2)
看起来您的代码不断将地图添加到网格中。您应该在XAML中创建一次映射,并仅在那里设置凭据。无需在代码中设置凭据。在添加图钉时,我也不确定为什么要更改地图的边距。也不需要那个代码。
您的AddLocation方法应如下所示:
private void AddLocation(Location location)
{
Dispatcher.Invoke(() =>
{
try
{
Microsoft.Maps.MapControl.WPF.Location currentLocation = new Microsoft.Maps.MapControl.WPF.Location(location.latitude, location.longitude);
Pushpin currentPushpin = new Pushpin();
currentPushpin.Location = currentLocation;
XAMLMap.Children.Add(currentPushpin);
}
catch (Exception exc)
{
}
});
}