-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[iOS] 여정 드로잉에 필요한 filter를 평균값을 활용하도록 수정 #315
Conversation
…/task/Map-Polyline-Filtering
…OS/task/Map-Polyline-Filtering
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 코드가 생각보다 복잡하지 않아 읽기 좋군요..?
많은 고민을 해주신 것이 보입니다!
발표에 사용해도 괜찮을 것 같아요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다!
데이터 흐름이 조금 정리가 안되어 있어서 그 부분 수정만 해주시면 될 것 같습니다.
평균 필터 성능 테스트 같은 걸 적극적으로 해보고 싶은데 조금 아쉽네요..
부캠 기간 끝나고 다양한 필터들 한 번 도전해봐요..!
self?.contentViewController.clearAnnotations() | ||
self?.contentViewController.clearOverlays() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분 지우고 ViewModel 쪽에서
case .refreshButtonDidTap(visibleCoordinates: (let minCoordinate, let maxCoordinate)):
self.state.isRefreshButtonHidden.send(true)
self.fetchJourneys(minCoordinate: minCoordinate, maxCoordinate: maxCoordinate)
self.state.overlaysShouldBeCleared.send(true) // 👍
이렇게 호출해서 방식을 통일시켜주는 것이 더 좋을 것 같습니다.
} | ||
|
||
public struct State { | ||
// CurrentValue | ||
public var previousCoordinate = CurrentValueSubject<CLLocationCoordinate2D?, Never>(nil) | ||
public var currentCoordinate = CurrentValueSubject<CLLocationCoordinate2D?, Never>(nil) | ||
public var recordingJourney: CurrentValueSubject<RecordingJourney, Never> | ||
public var recordedCoordinates = CurrentValueSubject<[CLLocationCoordinate2D], Never>([]) | ||
public var filteredCoordinate = CurrentValueSubject<CLLocationCoordinate2D?, Never>(nil) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
filteredCoordinate
는 5번 찍힐 때마다 단순히 값을 전달만 하는 것 같은데 맞을까요?
그렇다면 PassthroughSubject
를 사용하는 것이 더 적절한 것 같은데 어떨까요?
if let previousCoordinate = self.state.previousCoordinate.value { | ||
if calculateDistance(from: previousCoordinate, to: coordinate) <= 5 { | ||
return | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if let previousCoordinate = self.state.previousCoordinate.value { | |
if calculateDistance(from: previousCoordinate, to: coordinate) <= 5 { | |
return | |
} | |
} | |
if let previousCoordinate = self.state.previousCoordinate.value, | |
calculateDistance(from: previousCoordinate, to: coordinate) <= 5 { | |
return | |
} |
guard let filteredCoordinate2D = recordJourneyViewModel.state.filteredCoordinate.value else { return } | ||
recordJourneyViewModel.trigger(.locationDidUpdated(filteredCoordinate2D)) | ||
recordJourneyViewModel.trigger(.locationsShouldRecorded([filteredCoordinate2D])) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 state
의 값을 가져와서 다시 trigger
할거라면
이 부분이 아니라 다른 ViewModel 내부나 bind
함수쪽에서 하는 것이 더 좋아보입니다.
The base branch was changed.
Merge queue setting changed
…pwm2023/iOS01-MusicSpot into iOS/task/Map-Polyline-Filtering
❗ 배경
close 위치 정보 보정 #182
close 2개 이상의 Spot 등록 시 여정 기록 중에 Map에서 모두 사라지는 이슈 #316
기존의 여정 위치 필터링 방식을 변경
여정이 지도에 남아있는 이슈 해결
🔧 작업 내역
🧪 테스트 방법
📝 리뷰 노트
문제 인식
Kalman 필터의 필요성
Kalman 필터의 문제점
-> ex) 데이터 내에 현재 위치로부터 많이 튀는 위치(ex) 서울 중심에서 사용 중이다가 갑자기 경기도로 찍히는 경우)가 잡히는 순간 그 이후로 받아오는 데이터들이 이 필터를 거칠 시 모두 해당 오차를 적용한 채 위치를 찍기에 오히려 잘못된 위치가 계속해서 나오게 됨.
이러한 문제가 존재하기에 Kalman 필터의 적용보다 더 나은 방식을 모색했습니다.
평균값 필터의 활용
📸 스크린샷