2011-11-07 60 views
5

Tôi đang gặp sự cố sau trong ứng dụng iPhone của mình:Quản lý vị trí cung cấp các vị trí cũ với dấu thời gian mới

Tôi bật trình quản lý vị trí thường xuyên và đợi nhiều lần cập nhật vị trí. Khi nhận một vị trí mới, tôi kiểm tra tài sản timestamp của địa điểm mới biết cho dù đó là một vị trí cũ hay không:

Vấn đề tôi đang gặp bây giờ là tôi nhận được địa điểm mới, nơi thời gian có được mới nhưng tọa độ vẫn là địa điểm cũ mà tôi nhận được trước đó. Tôi đã thử nghiệm điều này khi tôi lái xe của tôi ở tốc độ 120km/h nhận cùng một tọa độ nhiều lần nhưng với các dấu thời gian khác nhau. Tôi gặp sự cố tương tự trong iOS 4 & 5.

Làm cách nào có thể? Hoặc làm thế nào tôi có thể đối phó với vấn đề này?

+0

độ chính xác nào bạn yêu cầu trình thu thập thông tin cho? – jackslash

+0

@jackslash: Tôi sử dụng 'mong muốnAccuracy = kCLLocationAccuracyBest' – wjans

+0

Vui lòng đăng triển khai' -locationManager: didUpdateToLocation: fromLocation: '. –

Trả lời

1

Có một số cách mà iPhone nhận được vị trí của nó.

  • tín hiệu tế bào
  • các điểm truy cập wifi
  • GPS vệ tinh

nhanh nhất vị trí tra cứu địa điểm là tín hiệu của tế bào. Miễn là bạn đã có dữ liệu gần đây hầu hết các tòa tháp địa phương sẽ được lưu trữ. Độ chính xác của tháp di động có thể từ 500m đến 1500m hoặc hơn.

Thứ hai nhanh nhất, miễn là bạn có kết nối dữ liệu hoặc đã ở trong khu vực gần đây là tìm kiếm qua wifi. Điều này sẽ cung cấp một vị trí rất chính xác. Các caveat là bạn phải được xung quanh wifi và có một tín hiệu dữ liệu tốt.

Tốc độ chậm nhất là GPS. GPS trong iPhone là aGPS. Nó sử dụng dữ liệu từ các vị trí tháp di động để khắc phục tốt hơn về vị trí của bạn. Nếu điện thoại không có kết nối dữ liệu và không ở gần wifi, điều này có thể mất từ ​​2 đến 4 phút để khắc phục. Với thông tin tháp di động có thể mất 30 giây.

Từ các tài liệu táo:

Khi yêu cầu dữ liệu vị trí có độ chính xác cao, sự kiện ban đầu cung cấp bởi các dịch vụ vị trí có thể không có tính chính xác mà bạn yêu cầu. Dịch vụ vị trí cung cấp sự kiện ban đầu càng nhanh càng tốt. Sau đó, nó tiếp tục xác định vị trí với độ chính xác mà bạn đã yêu cầu và cung cấp các sự kiện bổ sung, khi cần thiết khi dữ liệu đó có sẵn.

Trong ô tô, bạn sẽ ít có khả năng ở gần các địa điểm wifi và có thể phải chờ lâu hơn để bật khóa GPS. Nếu locationManager tin rằng bạn vẫn nằm trong phạm vi của vị trí trước đó, điều này có thể gây ra một điều phối cũ với một dấu thời gian khác.

Kiểm tra độ ngang Độ chính xác của dữ liệu cũng như dấu thời gian để xác định xem vị trí có chính xác như bạn đã yêu cầu hay không.

+0

Tôi thậm chí có được vấn đề này với độ chính xác ngang rất tốt (tức là 47,42m). Vấn đề duy nhất là vị trí cũ nhưng dấu thời gian đã thay đổi. Tôi hiểu rằng nó được lưu trữ, nhưng sau đó tôi mong đợi dấu thời gian là dấu thời gian từ khi vị trí đã được chụp trước đó và không phải là một cập nhật (gần đây hơn). Bằng cách đó tôi không thể xác định liệu tôi đã không di chuyển hoặc nhận được một vị trí lưu trữ cũ hơn. – wjans

+0

Nếu độ chính xác ngang hợp lệ và nhỏ và dấu thời gian là mới, có vẻ như đó có thể là lỗi. Nếu bạn có một sự cố hỗ trợ kỹ thuật còn lại với chương trình của bạn, bạn có thể nâng cao một. – jackslash

0

quản lý Cllocation bởi bản cập nhật mặc định vị trí như

locationManager.distanceFilter = kCLDistanceFilterNone;

đó là lý do tại sao bạn nhận được các tọa độ trùng lặp. thực sự nó cập nhật các chi tiết rất thường xuyên ngay cả khi có sự thay đổi trong ALTITUDE.

Vì vậy, tốt nhất là bạn phải thiết lập

locationManager.distanceFilter = 4.0f; 

// này sẽ gửi cho vị trí mới chi tiết cập nhật chỉ khi u di chuyển mỗi 4 mét từ vị trí hiện tại của bạn.

+0

bạn đã khắc phục sự cố của mình bằng công việc này chưa? –

+0

Có nó đã lừa – Manoj

+0

Tôi cũng đã nhận nó cố định với việc sử dụng kết hợp của dấu thời gian, tần số ngang và bộ lọc khoảng cách ..... Chúc mừng :) –

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