나는 (SWIFT에서) 위치의 원하는 정확도
let TIMEOUT_INTERVAL = 3.0
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
let newLocation = locations.last as! CLLocation
println("didupdateLastLocation \(newLocation)")
//The last location must not be capured more then 3 seconds ago
if newLocation.timestamp.timeIntervalSinceNow > -3 &&
newLocation.horizontalAccuracy > 0 {
var distance = CLLocationDistance(DBL_MAX)
if let location = self.lastLocation {
distance = newLocation.distanceFromLocation(location)
}
if self.lastLocation == nil ||
self.lastLocation!.horizontalAccuracy > newLocation.horizontalAccuracy {
self.lastLocation = newLocation
if newLocation.horizontalAccuracy <= self.locationManager.desiredAccuracy {
//Desired location Found
println("LOCATION FOUND")
self.stopLocationManager()
}
} else if distance < 1 {
let timerInterval = newLocation.timestamp.timeIntervalSinceDate(self.lastLocation!.timestamp)
if timerInterval >= TIMEOUT_INTERVAL {
//Force Stop
stopLocationManager()
}
}
}
을 PIN이이 방법을 사용했습니다 이전 위치는 유효한 수평 정확도를 가져야합니다 (1 미만이면 올바른 위치가 아닙니다). 우리 지역의 마지막 위치에있는 경우
if let location = self.lastLocation {
distance = newLocation.distanceFromLocation(location)
}
을 :
var distance = CLLocationDistance(DBL_MAX)
가 새 위치로 검색 한 마지막 위치에서의 거리를 계산한다
그런 다음 우리는 기본 값으로 거리를 설정하는거야 아직 설정되지 않았거나 새 위치가 수평 정확도가 높으면 실제 위치가 정확하면 새 위치로 로컬 위치를 설정합니다.
if self.lastLocation == nil ||
self.lastLocation!.horizontalAccuracy > newLocation.horizontalAccuracy {
self.lastLocation = newLocation
다음 단계는 검색된 위치의 정확성이 충분히 좋은지 확인하는 것입니다. 이를 수행하기 위해 location의 horizontalDistance가 desiredAccurancy가 아닌지 검색합니다. 이 경우라면 우리는 우리의 매니저 중지 할 수 있습니다 : 우리가 마지막으로 검색 한 위치와 새로운 위치에서의 거리가 한 (뜻 적은 있는지 확인하는거야 마지막 if
으로
if newLocation.horizontalAccuracy <= self.locationManager.desiredAccuracy {
//Desired location Found
self.stopLocationManager()
}
를 2 곳이 매우 가깝습니다.) 만약 그렇다면 우리는 검색된 마지막 위치로부터 시간 간격을 얻고 새로운 위치를 검색 할 것입니다. 간격이 3 초 이상인지 확인하십시오. 이 경우 3 초 이내에 위치가 정확하지 않아 위치 서비스가 더 이상 필요하지 않으므로 위치 서비스를 중지 할 수 있습니다.
else if distance < 1 {
let timerInterval = newLocation.timestamp.timeIntervalSinceDate(self.lastLocation!.timestamp)
if timerInterval >= TIMEOUT_INTERVAL {
//Force Stop
println("Stop location timeout")
stopLocationManager()
}
}
나는 직면하고 있습니다. 같은 문제가 U 코드를 업데이트하여 문제를 해결할 수 있습니까? – ChenSmile
@Imran'- (void) initializeTracking'을 절대로 변경 한 적이 없습니다. progrmr 및 Max_Power89의 제안에 따라'- (void) locationManaged : didUpdateLocation' 만 변경했습니다. 지금도 똑같은 일을해야한다면, 다시 구현하지 않을 것입니다. 이 문제를 해결하는 코코아 포드가 있습니다. 예를 들면'INTULocationManager'입니다. –
UR 달콤한 답장을 보내 주셔서 감사합니다. 너는 그것을 할 수 있기를 바란다. U가 (무효화) locationManaged : didUpdateLocation에 어떤 변화를 주 었는지 말해 줄 수 있습니까? 내 문제를 쉽게 해결할 수 있습니다. – ChenSmile