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 事件來接收連續位置更新。

PermissionStatusPosition 屬性支援INotifyPropertyChanged,讓應用程式可以數據系結至這些屬性。

在 Windows 7 中,如果安裝位置提供者且能夠解析計算機的位置,則所有 System.Device.Location 類別都完全正常運作。

注意

在 Windows 7 簡易版 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 屬性已經變更。

適用於