gpt4 book ai didi

windows-phone-8 - 随着位置的变化在 Windows Phone 8 map 上绘制路线?

转载 作者:行者123 更新时间:2023-12-04 07:05:53 24 4
gpt4 key购买 nike

场景:

我想让用户看到 map 和他们当前的位置。然后,如果他们点击“开始”,导航将开始,他们会看到他们的“路线”随着他们的位置变化绘制在 map 上,类似于一些健身应用程序如何绘制你的运行/步行 map 。目标是随着用户位置的变化实时执行此操作。

选项:

在我看来,有两种选择:1)使用 RouteQueryMap.AddRoute 从起始位置到下一个位置(当位置更改),跟踪最后位置,并始终绘制新的MapRoute该位置到新位置,或 2) 显示用户的当前位置作为一个点,随着他们位置的变化而移动,然后也许当他们按下“停止”时,为他们的每个位置绘制一个 MapRoute 以显示他们的完整路线。

我真的更喜欢选项 #1,因为用户可以在他们走的时候看到他们的路线进展等。

这是我正在使用的代码:

XAML:

<maps:Map x:Name="MainMap" />
<Button x:Name="btnStart" Content="Start"/>
<Button x:Name="btnStop" Content="Stop" IsEnabled="False"/>

代码隐藏:

全局变量:

GeoCoordinateWatcher watcher;
List<GeoCoordinate> listCoordinates;
GeoCoordinate lastCoordinate;

btnStart.Tap():

private void btnStart_Tap(object sender, GestureEventArgs e)
{
if (watcher == null)
{
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
watcher.MovementThreshold = 20;
watcher.StatusChanged += watcher_StatusChanged;
watcher.PositionChanged += watcher_PositionChanged;
}
watcher.Start();
}

watcher.StatusChanged():

private void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Initializing:
btnStart.IsEnabled = false;
btnStop.IsEnabled = true;
break;

case GeoPositionStatus.NoData:
lblStatus.Text = "location data is not available.";
break;

case GeoPositionStatus.Ready:
lblStatus.Text = "location data is available.";
break;
}
}

watcher.PositionChanged():

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
if (listCoordinates == null)
{
// first time through:
listCoordinates = new List<GeoCoordinate>();
listCoordinates.Add(e.Position.Location);
lastCoordinate = e.Position.Location;
return;
}
else
{
listCoordinates.Add(e.Position.Location);
DrawRoute(e.Position.Location);
lastCoordinate = e.Position.Location;
}
}

绘制路线函数:

private void DrawRoute(GeoCoordinate newPosition)//
{
RouteQuery query = new RouteQuery()
{
TravelMode = TravelMode.Driving,
Waypoints = new List<GeoCoordinate>() { MainMap.Center, newPosition }
};
query.QueryCompleted += RouteQueryCompleted;
query.QueryAsync();
MainMap.Center = newPosition;
lastCoordinate = newPosition;
}

最后,RouteQueryCompleted():

void RouteQueryCompleted(object sender, QueryCompletedEventArgs<Route> e)
{
mapRoute = new MapRoute(e.Result);
MainMap.AddRoute(mapRoute);
}

会发生什么:

当我开始开车时它似乎工作了一秒钟,在我的起始位置画了一条短线,但大约 10 秒后,一条线随机沿着附近的街道画了一条线(可能相当于 3 或 4 个街区长)然后在一条小路上沿着另一个街区行驶(而整个过程中我什至没有开过一个街区,更不用说转弯了!)。这很奇怪,而且绝对不准确。如果需要,我可以上传屏幕截图以更好地说明它。

任何人都可以看到我在我的代码中做错了什么,或者有更好的方法来完成这个吗?我不确定这是否是最好的方法,但我找不到任何其他建议的例子。

最佳答案

我最终使用了 MapPolyLine在最后一个 GeoCoordinate 之间画一条线和新的。

MapPolyline line = new MapPolyline();
line.StrokeColor = Colors.Blue;
line.StrokeThickness = 15;
line.Path.Add(lastCoordinate);
line.Path.Add(pos);
MainMap.MapElements.Add(line);

关于windows-phone-8 - 随着位置的变化在 Windows Phone 8 map 上绘制路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com