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 创建 并调用 StartTryStart 启动从当前位置提供程序获取数据。

Status可以检查 属性以确定数据是否可用。 如果数据可用,可以从 属性获取一次 Position 位置,或通过处理 PositionChanged 事件接收连续位置更新。

PermissionStatusPosition 属性支持 INotifyPropertyChanged,因此应用程序可以将数据绑定到这些属性。

在 Windows 7 中 System.Device.Location ,如果安装了位置提供程序并能够解析计算机的位置,则所有类都完全正常运行。

注意

在 Windows 7 Starter Edition 上,唯一支持的位置提供程序是 控制面板 中的默认位置提供程序,并且必须安装加载项才能指定纬度和经度。

注意 在 Windows 7 之前的 Windows 版本中,以下条件适用:

构造函数

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 属性已更改。

适用于