Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在xamarin forms google maps中更改位置更改事件上的Pin位置_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何在xamarin forms google maps中更改位置更改事件上的Pin位置

C# 如何在xamarin forms google maps中更改位置更改事件上的Pin位置,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在开发一个应用程序来跟踪用户的实时位置。我有geolocator插件中的更新位置。当我得到新位置时,我会更改pin位置。但它在地图中不会更改。下面是代码 此方法每1秒调用一次 private async void TrackMe() { var current = await CrossGeolocator.Current.GetPositionAsync(); current.Accuracy = 30; float bearing =float .Parse (

我正在开发一个应用程序来跟踪用户的实时位置。我有geolocator插件中的更新位置。当我得到新位置时,我会更改pin位置。但它在地图中不会更改。下面是代码

此方法每1秒调用一次

private async void TrackMe()
{
    var current = await CrossGeolocator.Current.GetPositionAsync();
    current.Accuracy = 30;
    float bearing =float .Parse ( current.Heading.ToString ());
    var pins = new Pin { Label = "ME", Icon = BitmapDescriptorFactory.FromBundle("path4646.png"), Flat = true 
    };
    var latitude = current.Latitude;
    var longitude = current.Longitude;

    Device.BeginInvokeOnMainThread(() =>
    {
        pins.Position = new Position(latitude, longitude);
        pins.Rotation = bearing;
        if (MapTrack.Pins.Count == 0)
        {
            MapTrack.Pins.Add(pins);
        }
        MapTrack.MoveCamera(CameraUpdateFactory.NewPosition(new Position(latitude, longitude)));
    });
}
任何帮助都将不胜感激,提前谢谢
关于

根据您的评论,您能否对代码进行此更改并查看其是否有效?我没有将开发环境设置为自己先试用

private async void TrackMe()
{
    var current = await CrossGeolocator.Current.GetPositionAsync();
    current.Accuracy = 30;
    float bearing =float .Parse ( current.Heading.ToString ());
    var pins = new Pin { Label = "ME", Icon = BitmapDescriptorFactory.FromBundle("path4646.png"), Flat = true 
    };
    var latitude = current.Latitude;
    var longitude = current.Longitude;

    Device.BeginInvokeOnMainThread(() =>
    {
        pins.Position = new Position(latitude, longitude);
        pins.Rotation = bearing;
        if (MapTrack.Pins.Count == 0)
        {
            MapTrack.Pins.Add(pins);
        }
        else
        {
            MapTrack.Pins[0] = pins;
        }
        MapTrack.MoveCamera(CameraUpdateFactory.NewPosition(new Position(latitude, longitude)));
    });
}

我假设Pins集合有一个可写索引器。如果不是这样,您需要修改其他部分。

是因为您总是创建一个新的管脚并更新位置,但仅在现有管脚计数为0时将其分配给
管脚吗?pin一旦添加,就永远不会更新。我只想第一次将pin添加到地图中,下次我想更改pin的位置以获得平滑的跟踪过期时间