GeoCoordinateWatcher 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供以緯度與經度座標為根據的位置資料。
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 7 之前的 Windows 版本中,適用下列條件:
可以建立具有建構函式的所有 System.Device.Location 物件,但 Status 屬性一律會有 值 Disabled。
不會引發任何位置事件。
建構函式
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 屬性已經變更。 |