2014-06-16 26 views
11

Tôi đang cố gắng phát triển một ứng dụng phải giống như trò chơi. Người dùng sẽ có một số địa điểm trong một thành phố và anh ta sẽ phải làm điều gì đó trên mỗi vị trí. Để theo dõi vị trí của người sử dụng, tôi đã cố gắng sử dụng định vị với đoạn mã sau:Vị trí địa lý trong C#

Geolocator geolocator = new Geolocator(); 
//geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.High; 
geolocator.DesiredAccuracyInMeters = 50; 
try 
{ 
    Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1)); 
    textLatitude.Text = "Latitude: " + geoposition.Coordinate.Latitude.ToString("0.0000000000"); 
    textLongitude.Text = "Longitude: " + geoposition.Coordinate.Longitude.ToString("0.0000000000"); 
    textAccuracy.Text = "Accuracy: " + geoposition.Coordinate.Accuracy.ToString("0.0000000000"); 
} 

Sử dụng cách sau để có được tọa độ tôi đã cố gắng để kiểm tra xem thiết bị sẽ xác định vị trí vị trí của tôi một cách chính xác như sau mã:

if(Math.Abs(geoposition.Coordinate.Latitude - 45.3285) < 0.001){ 
    if (Math.Abs(geoposition.Coordinate.Longitude - 14.4474) < 0.001) 
    { 
     txt.Text = "KONT";    
    } 
} 

vấn đề là tính chính xác của địa điểm thực sự là nhỏ, nếu tôi cố gắng sử dụng chính xác hơn phối nó sẽ không bao giờ có được cùng một tọa độ một lần nữa, và với mã này chính xác là thực sự xấu (nó có thể thậm chí thất bại 300 mét).

Có ai có ý tưởng làm thế nào để có được vị trí đáng tin cậy hơn hay cách khác để khắc phục điều đó?

Trả lời

6

Tôi nghĩ rằng vấn đề xảy ra, bởi vì bạn đưa ra quá ít thời gian cho Geolocator để thực hiện một readout thích hợp với Geolocator.GetGeopositionAsync - timeout:

Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1)); 

Bạn cho nó chỉ 1 giây , trong khi nhận được vị trí chính xác hơn cần có thời gian.

dụ của tôi:

Geolocator geolocator; 
Geoposition geoposition; 
public MainPage() 
{ 
    this.InitializeComponent(); 
    geolocator = new Geolocator(); 
    geolocator.DesiredAccuracyInMeters = 10; 
    geolocator.ReportInterval = 0; 

    myButton.Click += async (sender, e) => 
     { 
      geoposition = await geolocator.GetGeopositionAsync(); 
      string latitude = geoposition.Coordinate.Latitude.ToString("0.0000000000"); 
      string Longitude = geoposition.Coordinate.Longitude.ToString("0.0000000000"); 
      string Accuracy = geoposition.Coordinate.Accuracy.ToString("0.0000000000"); 
     }; 
} 

Đoạn mã trên returs một vị trí (trong trường hợp của tôi) với độ chính xác của ~ 35 mét, NHƯNG sau khi chờ đợi khoảng 20-30 giây. Cũng lưu ý rằng độ chính xác phụ thuộc vào số lượng sattelites có sẵn.

Ngoài ra một số nhận xét từ MSDN:

  1. thiết Geolocator.ReportInterval-0:

    Apps mà làm đòi hỏi dữ liệu thời gian thực nên đặt ReportInterval 0, để chỉ ra rằng không có khoảng thời gian tối thiểu được quy định . Trên Windows, khi khoảng thời gian báo cáo là 0, ứng dụng nhận các sự kiện ở tần suất mà nguồn vị trí chính xác nhất gửi chúng. Trên Windows Phone, ứng dụng sẽ nhận được các bản cập nhật với tốc độ phụ thuộc vào độ chính xác mà ứng dụng yêu cầu.

  2. thiết Geolocator.DesiredAccuracyInMeters-10 mét:

    ◾If người dùng đang cố gắng để chia sẻ vị trí của mình, ứng dụng nên yêu cầu độ chính xác khoảng 10 mét.

  3. cố gắng để dealy giữa bắt đầu Geolocator và Reding nó:

    xem xét chậm trễ khởi động. Lần đầu tiên ứng dụng yêu cầu dữ liệu vị trí, có thể có độ trễ ngắn (1-2 giây) trong khi nhà cung cấp vị trí khởi động. Hãy xem xét điều này trong thiết kế giao diện người dùng của ứng dụng của bạn. Ví dụ: bạn có thể muốn tránh chặn các tác vụ khác đang chờ hoàn thành cuộc gọi đến GetGeopositionAsync.

+0

thx, tôi sẽ thử ngày mai (Tôi không có điện thoại ở đây ngay bây giờ để kiểm tra nó) tôi hy vọng rằng nó sẽ làm việc :) – user2700896

+0

@ user2700896 Nếu bạn không chắc chắn, sau đó không đánh dấu nó là sol ved - làm điều đó một khi bạn kiểm tra nó :) Trong trường hợp này nó sẽ làm việc, nhưng có thể có được các vấn đề khác. – Romasz

-1

thử điều này:

Geolocator.DesiredAccuracy = PositionAccuracy.High; 
+0

tôi đã cố gắng mà (đó là lý do tại sao dòng Geolocator.DesiredAccuracy = PositionAccuracy.High; được nhận xét) Độ chính xác vẫn rất thấp với ... Tôi đã thử kiểm tra lại và độ chính xác là 1342 mét – user2700896

0

Ít nhất đối với tôi mã đang làm việc ok, Và tôi nhận được để "txt.Text = 'Kont' đâu bạn tìm bạn vĩ độ không đổi hoặc kinh độ?

+0

hm ... thật lạ khi bạn nhận được dòng nói txt.Text = "KONT" vì đó là một địa điểm ở Croatia. Tôi đã đến đó và viết xuống tọa độ và mã hóa chúng chỉ để kiểm tra :) – user2700896

+0

... Tôi đã sử dụng tọa độ của mình :-P Tôi lấy tọa độ của tôi đến các vị trí thập phân giống như bạn và tôi đã thử phương pháp. Bạn đang sử dụng một thiết bị thực hoặc giả lập? Nếu thiết bị, có thiết bị nào? – Mulflar

Các vấn đề liên quan