Как нарисовать и сохранить канцелярскую кнопку карты из текущего местоположения на карту? Windows Phone

Я начал использовать карты в приложении для Windows phone и понял, как получить текущие координаты, но не знаю, как нарисовать их в виде канцелярской кнопки на карте.

Это то, что у меня есть до сих пор, которое вызывает метод GetCoordinates и переходит к карте по нажатию кнопки. Кто-нибудь знает, как я могу передать координаты на карту и нарисовать ее как канцелярскую кнопку?

private async Task GetCoordinates(string name = "My Car")
        {
            await Task.Run(async () =>
            {
                // Get the phone's current location.
                Geolocator MyGeolocator = new Geolocator();
                MyGeolocator.DesiredAccuracyInMeters = 5;
                Geoposition MyGeoPosition = null;
                try
                {
                    MyGeoPosition = await MyGeolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(10));

                }
                catch (UnauthorizedAccessException)
                {
                    MessageBox.Show("Location is disabled in phone settings or capabilities are not checked.");
                }
                catch (Exception ex)
                {
                    // Something else happened while acquiring the location.
                    MessageBox.Show(ex.Message);
                }
            });
        }


        //sets location of parking space using the GetCoordinates method
        //opens map 
        private async void setLocationBtn_Click(object sender, RoutedEventArgs e)
        { 
            await this.GetCoordinates();
            NavigationService.Navigate(new Uri("/Maps.xaml", UriKind.Relative));
        }

И это класс карты, который еще ничего не делает. Есть ли способ передать геокоординаты из предыдущего класса на карту и нарисовать канцелярскую кнопку? Я как-то думал сделать это в методе OnNavigatedTo:

общедоступный частичный класс Maps: PhoneApplicationPage { Geolocator geolocator = null; логическое отслеживание = ложь; ПрогрессИндикатор пи; MapLayer PushpinMapLayer;

    public Maps()
    {
        InitializeComponent();
        pi = new ProgressIndicator();
        pi.IsIndeterminate = true;
        pi.IsVisible = false;
    }


    protected override void OnNavigatedTo(NavigationEventArgs e)
    {

        base.OnNavigatedTo(e);
    }

}

person Brian J    schedule 10.03.2014    source источник


Ответы (1)


Чтобы добавить булавку на карту:

        var overlay = new MapOverlay
        {
            PositionOrigin = new Point(0.5, 0.5),
            GeoCoordinate = location, // takes a GeoCoordinate instance. convert Geoposition to GeoCoordinate
            Content = new TextBlock{Text = "hello"}; // you can use any UIElement as a pin
        };

        var ml = new MapLayer { overlay }; 
        map.Layers.Add(ml);

Вы можете добавить широту и долготу вашего местоположения в качестве запроса в URI, который вы передаете NavigationSerivce.Navigate, и извлечь его в обработчике событий OnNavigatedTo с помощью e.Uri.Query.

Подсказка. Task.Run планирует выполнение вашей задачи в пуле потоков. Ваша задача не привязана к ЦП, поэтому Task.Run не даст вам никакого прироста производительности.

Изменить: преобразовать геопозицию в геокоординат следующим образом:

var location = new GeoCoordinate(geoposition.Coordinate.Latitude, geoposition.Coordinate.Longitude); 

Очень полезным ресурсом является Руководство по Nokia WP8

person JonPall    schedule 10.03.2014
comment
это очень помогает, но как я могу передать данные myGeoPosition из моего другого класса в класс карты? Также строку `GeoCoordinate = location, `местоположение можно заменить на myGeoPosition ? - person Brian J; 11.03.2014
comment
@BrianJ Прежде всего, вам нужно вернуть его из вашего метода GetCoordinates(). Да, вы можете преобразовать myGeoPosition в GeoCoordinate. Смотрите мою правку. Прочитайте здесь, как передать параметр на новую страницу: stackoverflow.com/questions/12444816/ - person JonPall; 11.03.2014
comment
Я попробую это позже, спасибо за помощь, я дам вам знать, если это сработает. - person Brian J; 11.03.2014