Поделиться через


GeoCoordinateWatcher Класс

Определение

Предоставляет данные расположения, основанные на координатах широты и долготы.

public ref class GeoCoordinateWatcher : IDisposable, System::ComponentModel::INotifyPropertyChanged, System::Device::Location::IGeoPositionWatcher<System::Device::Location::GeoCoordinate ^>
[System.Security.SecurityCritical]
public class GeoCoordinateWatcher : IDisposable, System.ComponentModel.INotifyPropertyChanged, System.Device.Location.IGeoPositionWatcher<System.Device.Location.GeoCoordinate>
[<System.Security.SecurityCritical>]
type GeoCoordinateWatcher = class
    interface IDisposable
    interface INotifyPropertyChanged
    interface IGeoPositionWatcher<GeoCoordinate>
Public Class GeoCoordinateWatcher
Implements IDisposable, IGeoPositionWatcher(Of GeoCoordinate), INotifyPropertyChanged
Наследование
GeoCoordinateWatcher
Атрибуты
Реализации

Примеры

В следующей программе показано, как создать GeoCoordinateWatcher и начать получение данных с помощью времени ожидания инициализации. Затем код выводит координаты расположения, если известно.

using System;
using System.Device.Location;

namespace GetLocationProperty
{
    class Program
    {
        static void Main(string[] args)
        {
            GetLocationProperty();
        }

        static void GetLocationProperty()
        {
            GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();

            // Do not suppress prompt, and wait 1000 milliseconds to start.
            watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));

            GeoCoordinate coord = watcher.Position.Location;

            if (!coord.IsUnknown)
            {
                Console.WriteLine("Lat: {0}, Long: {1}",
                    coord.Latitude,
                    coord.Longitude);
            }
            else
            {
                Console.WriteLine("Unknown latitude and longitude.");
            }
        }
    }
}
Imports System.Device.Location

Module GetLocationProperty
    Public Sub GetLocationProperty()
        Dim watcher As New System.Device.Location.GeoCoordinateWatcher()
        watcher.TryStart(False, TimeSpan.FromMilliseconds(1000))

        Dim coord As GeoCoordinate = watcher.Position.Location

        If coord.IsUnknown <> True Then
            Console.WriteLine("Lat: {0}, Long: {1}", coord.Latitude, coord.Longitude)
        Else
            Console.WriteLine("Unknown latitude and longitude.")
        End If
    End Sub

    Public Sub Main()
        GetLocationProperty()
        Console.ReadLine()
    End Sub

End Module

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

using System;
using System.Device.Location;

namespace GetLocationEvent
{
    class AsyncProgram
    {
        static void Main(string[] args)
        {
            CLocation myLocation = new CLocation();
            myLocation.GetLocationEvent();
            Console.WriteLine("Enter any key to quit.");
            Console.ReadLine();
        }
        class CLocation
        {
            GeoCoordinateWatcher watcher;

            public void GetLocationEvent()
            {
                this.watcher = new GeoCoordinateWatcher();
                this.watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
                bool started = this.watcher.TryStart(false, TimeSpan.FromMilliseconds(2000));
                if (!started)
                {
                    Console.WriteLine("GeoCoordinateWatcher timed out on start.");
                }
            }

            void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
            {
                PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude);
            }

            void PrintPosition(double Latitude, double Longitude)
            {
                Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude);
            }
        }
    }
}
Imports System.Device.Location

Module GetLocationEvent
    Public Class CLocation
        Private WithEvents watcher As GeoCoordinateWatcher
        Public Sub GetLocationEvent()
            watcher = New System.Device.Location.GeoCoordinateWatcher()
            AddHandler watcher.PositionChanged, AddressOf watcher_PositionChanged
            Dim started As Boolean = watcher.TryStart(False, TimeSpan.FromMilliseconds(1000))

            If Not started Then
                Console.WriteLine("GeoCoordinateWatcher timed out on start.")
            End If
        End Sub

        Private Sub watcher_PositionChanged(ByVal sender As Object, ByVal e As GeoPositionChangedEventArgs(Of GeoCoordinate))
            PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude)
        End Sub

        Private Sub PrintPosition(ByVal Latitude As Double, ByVal Longitude As Double)
            Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude)
        End Sub
    End Class


    Public Sub Main()
        Dim myLocation As New CLocation()
        myLocation.GetLocationEvent()
        Console.WriteLine("Enter any key to quit.")
        Console.ReadLine()
    End Sub

End Module

Комментарии

Класс GeoCoordinateWatcher предоставляет данные о расположении на основе координат из текущего поставщика расположений. Текущий поставщик расположений определяется как самый высокий на компьютере на основе ряда факторов, таких как возраст и точность данных от всех поставщиков, точность, запрошенная приложениями расположения, а также влияние энергопотребления и производительности, связанного с поставщиком расположений. Текущий поставщик расположений может измениться со временем, например, когда устройство GPS теряет свой спутниковый сигнал в помещении, и поставщик Wi-Fi триангуляции становится наиболее точным поставщиком на компьютере.

Чтобы начать доступ к данным расположения, создайте GeoCoordinateWatcher и вызовите Start или TryStart инициируйте получение данных от текущего поставщика расположений.

Свойство Status можно проверить, чтобы определить, доступны ли данные. Если данные доступны, вы можете получить расположение один раз из свойства или получать обновления непрерывного Position расположения, обрабатывая PositionChanged событие.

Поддержка Permissionсвойств Statusи Position свойств INotifyPropertyChanged, чтобы приложение может привязать данные к этим свойствам.

В Windows 7 все System.Device.Location классы полностью функциональны, если поставщик расположений установлен и может разрешить расположение компьютера.

Замечание

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

Примечание В версиях Windows до Windows 7 применяются следующие условия:

  • Все System.Device.Location объекты, имеющие конструкторы, могут быть созданы, но Status свойство всегда будет иметь значение Disabled.

  • Расположение, указанное свойством LocationPosition всегда будет Unknown.

  • События расположения не будут вызваны.

Конструкторы

Имя Описание
GeoCoordinateWatcher()

Инициализирует новый экземпляр GeoCoordinateWatcher с параметрами точности по умолчанию.

GeoCoordinateWatcher(GeoPositionAccuracy)

Инициализирует новый экземпляр GeoCoordinateWatcherс учетом уровня точности.

Свойства

Имя Описание
DesiredAccuracy

Возвращает запрошенный уровень точности для данных расположения, предоставляемых этим элементом GeoCoordinateWatcher.

MovementThreshold

Расстояние, которое необходимо переместить в метрах относительно координаты от последнего PositionChanged события, прежде чем поставщик расположения вызывает другое PositionChanged событие.

Permission

Указывает, предоставлено ли разрешение на доступ к данным о расположении от поставщиков расположений или отклонено.

Position

Возвращает значение GeoCoordinate , указывающее текущее расположение.

Status

Возвращает текущее состояние GeoCoordinateWatcherобъекта .

Методы

Имя Описание
Dispose()

Освобождает все ресурсы, используемые текущим экземпляром GeoCoordinateWatcher класса.

Dispose(Boolean)

Освобождает все ресурсы, используемые текущим экземпляром GeoCoordinateWatcher класса.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Finalize()

Освобождает ресурсы и выполняет другие операции очистки перед GeoCoordinateWatcher восстановлением сборкой мусора.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate>)

Вызывается при возникновении PositionChanged события.

OnPositionStatusChanged(GeoPositionStatusChangedEventArgs)

Вызывается при возникновении StatusChanged события.

OnPropertyChanged(String)

Вызывается при изменении свойства GeoCoordinateWatcher .

Start()

Инициируйте получение данных из текущего поставщика расположений. Этот метод включает PositionChanged события и разрешает доступ к свойству Position .

Start(Boolean)

Инициируйте получение данных из текущего поставщика расположений. Этот метод включает PositionChanged события и разрешает доступ к свойству Position .

Stop()

GeoCoordinateWatcher Останавливает предоставление данных и событий расположения.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TryStart(Boolean, TimeSpan)

Инициирует получение данных от текущего поставщика расположений. Этот метод возвращается синхронно.

События

Имя Описание
PositionChanged

Указывает, что широта или долгота данных расположения изменились.

StatusChanged

Указывает, что состояние GeoCoordinateWatcher объекта изменилось.

Явные реализации интерфейса

Имя Описание
IGeoPositionWatcher<GeoCoordinate>.PositionChanged

Указывает, что изменены данные расположения.

IGeoPositionWatcher<GeoCoordinate>.StatusChanged

Указывает, что состояние поставщика расположения изменилось.

INotifyPropertyChanged.PropertyChanged

Указывает, что Status свойство, Position свойство или Permission свойство изменилось.

Применяется к