C# GeoLocation Watcher занимает слишком много времени, чтобы получить координаты - PullRequest
0 голосов
/ 09 марта 2020

Я создал Windows Приложение формы для наших работ Windows Таблетки (windows 10) для отслеживания местоположения.

Класс, который я создал, находится ниже:

class LocationServices
{
    private GeoCoordinateWatcher myWatcher;
    private bool fgWatcherStarted = false;

    public LocationServices()
    {

        myWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
        fgWatcherStarted = myWatcher.TryStart(true, System.TimeSpan.FromMilliseconds(1000));
    }

    public LatLon GetDeviceLocation()
    {
        LatLon myReturn = new LatLon();
        System.Device.Location.GeoCoordinate myPosition = new System.Device.Location.GeoCoordinate();

        try
        {
            if (!fgWatcherStarted)
            {
                fgWatcherStarted = myWatcher.TryStart(true, System.TimeSpan.FromMilliseconds(1000));
            }

            myPosition = myWatcher.Position.Location;

            if (myPosition.IsUnknown)
            {
                myReturn.Latitude = 0;
                myReturn.Longitude = 0;
                myReturn.strMessage = "Unknown Position";
            }
            else
            {
                myReturn.Latitude = myPosition.Latitude;
                myReturn.Longitude = myPosition.Longitude;
                myReturn.strMessage = myPosition.Course.ToString();
            }

        }
        catch (Exception ex)
        {
            myReturn.Latitude = 0;
            myReturn.Longitude = 0;
            myReturn.strMessage = ex.Message.ToString();
        }

        return myReturn;
    }
}

В моем коде я пробегаю каждые несколько секунд и получаю местоположение, вызывая указанный выше класс.

Если Я подключен к Wi-Fi (работает со своего стола), он мгновенно получает местоположение и работает, как и ожидалось, но с устройства он возвращает 0 в течение значительного времени, а затем неожиданно начинает работать и прекрасно работает без проблем.

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

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Похоже, что для возврата значения необходимо изменить позицию, см. Ответ здесь: { ссылка }

0 голосов
/ 09 марта 2020

Не совсем уверен в вашем способе получения координат, я использовал следующий метод - надеюсь, это поможет (запустите его в консольном приложении и проверьте следующее)

class Program
    {
        private static GeoCoordinateWatcher Watcher;

        static void Main(string[] args)
        {
            Watcher = new GeoCoordinateWatcher();
            Watcher.StatusChanged += Watcher_StatusChanged;
            Watcher.Start();

            Console.ReadLine();

        }

        static void Watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
        {
            if (e.Status == GeoPositionStatus.Ready)
            {
                if (Watcher.Position.Location.IsUnknown)
                {
                    Console.Write("Cannot find location");
                }
                else
                {
                    Console.WriteLine("Lat: " + Watcher.Position.Location.Latitude.ToString());
                    Console.WriteLine("Lon: " + Watcher.Position.Location.Longitude.ToString());
                }
            }
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...