Получить текущее местоположение с помощью С#

Мой уровень мастерства: Начинающий

Код: С# (wpf)

Аппаратное обеспечение: планшет Dell Venue 11 Pro (Windows 8.1)

Я хочу получить текущее местоположение моего компьютера с помощью сотовой триангуляции в координатах (широта/долгота). Используя следующую ссылку в качестве справки (Получение координат GPS на телефоне с Windows 7), я пытался получить координаты широты и долготы из служб определения местоположения Windows. Я проверил, что службы определения местоположения Windows получают координаты через триангуляцию вышек сотовой связи, но каждый раз, когда я запускаю следующий код, координаты отображаются как «NaN». Любая помощь здесь будет принята с благодарностью.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Device.Location;

namespace GPS
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        private GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);


        public MainWindow()
        {
            InitializeComponent();

            watcher.Start();

            LocationMessage(); 
        }



        private void LocationMessage()
        {

            var whereat = watcher.Position.Location;

            var Lat = whereat.Latitude.ToString("0.000000");
            var Lon = whereat.Longitude.ToString("0.000000");


            //optional parameters for future use
            whereat.Altitude.ToString();
            whereat.HorizontalAccuracy.ToString();
            whereat.VerticalAccuracy.ToString();
            whereat.Course.ToString();
            whereat.Speed.ToString();

            MessageBox.Show(string.Format("Lat: {0}\nLon: {1}",Lat,Lon)); 
        }


    }


}

person Dan Priest    schedule 21.08.2015    source источник
comment
Попробуйте подписаться на событие OnPositionChanged, а затем попытаться получить позицию. Возможно, прошло недостаточно времени, чтобы определить местоположение.   -  person TyCobb    schedule 21.08.2015


Ответы (1)


Если вам нужна ваша текущая позиция только один раз, а не постоянное обновление по мере движения, вы можете заменить Start на TryStart:

if (watcher.TryStart(false, TimeSpan.FromSeconds(3)))
{
    LocationMessage();
}
else
{
    // Position not found after 3 seconds...
}

Имейте в виду, что этот метод возвращает синхронный результат, поэтому лучше не запускать поток пользовательского интерфейса.

person Frode Evensen    schedule 23.02.2016