2013-07-26 21 views
12

Trong lớp Criteria, có hai hằng số, ACCURACY_HIGHACCURACY_FINE, được sử dụng để yêu cầu LocationManager để trả về các cập nhật vị trí chính xác cao hơn. Dưới đây là những gì các documentation nói về mỗi một trong các hằng số:Đó là tiêu chí chính xác cao hơn: ACCURACY_HIGH hoặc ACCURACY_FINE?

public static thức int ACCURACY_FINE (Added ở mức API 1)

A constant indicating a finer location accuracy requirement 
    Constant Value: 1 (0x00000001) 

public static thức int ACCURACY_HIGH (Added trong API cấp 9)

a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy. For horizontal and vertical position this corresponds roughly to an accuracy of less than 100 meters. 
    Constant Value: 3 (0x00000003) 

Có một yone biết có hai hằng số nào cung cấp (tức là yêu cầu) mức độ chính xác cao nhất?

Trả lời

16

Từ những gì tôi có thể thấy trong mã nguồn, ACCURACY_FINE được nhóm với ACCURACY_COARSE với giá trị không đổi là 1 & 2 tương ứng. ACCURACY_LOW, trung bình và cao được nhóm lại với nhau với giá trị không đổi 1, 2 & 3.

Dường như setAccuracy hy vọng và lợi nhuận hoặc thô hay mịn, trong khi setVerticalAccuracy, setHorizontalAccuracy, setSpeedAccuracy và setBearingAccuracy mong đợi thấp, trung bình hoặc cao. Hơn nữa, khi bạn gọi setAccuracy, nó đặt chính xác ngang như vậy:

public void setAccuracy(int accuracy) { 
    if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_COARSE) { 
     throw new IllegalArgumentException("accuracy=" + accuracy); 
    } 
    if (accuracy == ACCURACY_FINE) { 
     mHorizontalAccuracy = ACCURACY_HIGH; 
    } else { 
     mHorizontalAccuracy = ACCURACY_LOW; 
    } 
} 

Nó thực sự khó hiểu, nhưng tôi hy vọng tôi xóa nó lên cho bạn một chút. Đây là một liên kết đến nguồn trong grepcode, bạn có thể tải xuống và tự mình xem nếu bạn không có nguồn cục bộ.

+0

Cảm ơn! Thật không may, nó có vẻ là một trường hợp khác của tài liệu Android là một chút thiếu. Liên kết mã nguồn hữu ích! – robguinness

+2

Không cầu xin quá nhiều, nhưng nếu câu trả lời giúp bạn, bạn có thể chấp nhận nó! – npace

+0

Tôi muốn đặt câu hỏi một hoặc hai ngày trước khi chấp nhận câu trả lời. Tôi đã upvote bạn mặc dù! – robguinness

5

Cả hai hằng số có nghĩa là độ chính xác cao nhất, nhưng được dành cho các phương pháp khác nhau. Từ tài liệu (có thể đã được cập nhật kể từ khi câu hỏi được hỏi):

ACCURACY_FINE là đầu vào hợp lệ cho setAccuracy.

ACCURACY_HIGH là mục nhập hợp lệ cho setBearingAccuracy, setHorizontalAccuracy, setSpeedAccuracysetVerticalAccuracy.

Tôi tin rằng ý tưởng của mô hình này là FINECOARSE cung cấp cho bạn một lựa chọn chỉ có hai đối lập, trong khi LOW, MEDIUMHIGH cho phép một sự phân biệt tinh tế hơn. (Vấn đề còn lại, tại sao setSpeedAccuracy chế giễu rằng mô hình bằng cách cho phép chỉ LOWHIGH. Nhưng sau đó, đây có thể là một lỗi trong cả hai tài liệu hoặc thiết kế. :))

Như đã đề cập bởi OP, họ giới thiệu những giá trị sau, API cấp 9, ngược lại với API cấp 1 cho FINE-COARSE. Mã được tìm thấy bởi npace chỉ đơn giản là tiết lộ rằng nội bộ các nhà phát triển Android bây giờ bản đồ tất cả mọi thứ để tên và giá trị của LOW đến HIGH giá trị phạm vi, để có được một số nhất quán nội bộ.

-1

Có một số criteia để xác định tính chính xác của địa điểm

Sau khi điện thoại bắt đầu cung cấp các địa điểm thời gian thực, đề nghị của tôi là để kiểm tra tính chính xác của mỗi kết quả và xem xét từ chối những lớn hơn một số tiền nhất định mà dựa trên yêu cầu của bạn. Nhà cung cấp vị trí càng chạy và nếu thiết bị có tầm nhìn không bị cản trở của bầu trời và kết nối di động tốt, thì độ chính xác sẽ cải thiện tới một điểm nhất định và sau đó tắt, và sau đó nó sẽ biến động. Dưới đây là đoạn mã giả cho biết cách kiểm tra tính chính xác của từng kết quả vị trí GPS:

1 
2 
3 

Dưới đây là một số ví dụ sơ bộ về ngưỡng chính xác. Yêu cầu của bạn có thể khác nhau về cách các ngưỡng khác nhau này sẽ ảnh hưởng đến hành vi của ứng dụng của bạn như thế nào; đây là những ví dụ yêu cầu mã hóa địa lý đã chuyển đổi vị trí hiện tại thành địa chỉ gần đúng. Tùy thuộc vào kết quả mà ứng dụng đưa ra phản hồi khác nhau cho người dùng:

Rooftop <= 10 meters (desired result) 
Street >10 meters and <= 100 meters (let user know it’s close but not perfect. Good enough?) 
Neighborhood > 100 meters and <= 500 meters (give visual feedback that accuracy is low) 
City > 500 meters and <= 2000 meters (ask user to verify city name from a list) 
County > 2000 meters (prompt for manual location input) 

Hãy tính đến trường hợp sử dụng duy nhất của riêng bạn. Bạn hoàn toàn có thể từ chối bất kỳ giá trị chính xác nào lớn hơn 100 mét (328 ft) nếu ứng dụng của bạn chỉ đơn giản giúp mọi người tìm thấy bãi đỗ xe mở tại các trò chơi NFL. Bạn có thể có một ứng dụng trả về danh sách các văn phòng nha sĩ trong bán kính 5 dặm (8000m). Hoặc ứng dụng thời tiết chỉ có thể cần biết bạn đang ở trong thành phố nào. Đây chỉ là những ý tưởng giúp bạn suy nghĩ.

public void onLocationChanged(Location location) { 
     if(location.getAccuracy() < 100.0 && location.getSpeed() < 6.95){ 
       //Do something 
     } 
     else{ 
       //Continue listening for a more accurate location 
     } 
Các vấn đề liên quan