fdkgfosfskjdlsjdlkfsf
fdkgfosfskjdlsjdlkfsf

Reputation: 3303

Xamarin.Forms: Map.IsShowingUser not showing current location?

This is the xaml for the app I'm working on. It simply displays a map on the screen with a ListView:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
             xmlns:local="clr-namespace:GasStations"
             x:Class="GasStations.MainPage">

    <StackLayout>
        <StackLayout VerticalOptions="FillAndExpand">
            <maps:Map WidthRequest="960" HeightRequest="200"
            x:Name="MyMap"
            IsShowingUser="true"/>
            <ListView x:Name="ListView_Pets">
                <ListView.ItemsSource>
                    <x:Array Type="{x:Type x:String}">
                        <x:String>dog</x:String>
                        <x:String>cat</x:String>
                        <x:String>bird</x:String>
                    </x:Array>
                </ListView.ItemsSource>
            </ListView>
        </StackLayout>
    </StackLayout>
</ContentPage>

I set the property Map.IsShowingUser="true" thinking that it would display the current location, but it's not showing the point.

This is what the form looks like. It doesn't display the current location pin.

My question is: how can I add current location to the map?

enter image description here

Upvotes: 4

Views: 2300

Answers (1)

FreakyAli
FreakyAli

Reputation: 16489

Use the Geolocation plugin to get your current location. If you don't have it already and then use the MoveCamera method to move to that position:

private async Task TrackCurrentLocation()
{
var current = await CrossGeolocator.Current.GetPositionAsync();
current.Accuracy = 30;
float bearing =//bearing in case any
var pins = new Pin { Label = "ME", Icon =''yourIcon"), 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)));
});
}

Upvotes: 0

Related Questions