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


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 != true)
            {
                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 Начальная Edition единственным поддерживаемым поставщиком расположений является поставщик расположений по умолчанию в панель управления. Для указания широты и долготы необходимо установить надстройку.

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

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

  • Расположение, указанное свойством Location объекта Position , всегда будет равно 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 изменилось.

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