응용 프로그램을 새로 시작하거나 오랜 시간이 지나면 다시 시작하면 MKMapView의 userLocation 개념이 잘못되어 바다 중간에 나를 보여줍니다. 이것은 불행하게도 GPS 칩의 기능입니다 ....시작 또는 재개시 MKMapView의 사용자 위치가 잘못되었습니다
답변
을
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
은 응용 프로그램 또는 새로운 시작의 긴 이력서 후 발생합니다
나는 다음과 같은 코드를 사용하고 있습니다. 항상 켜져있는 것은 아니므로 처음 몇 순간에는 데이터가 잘못 될 것입니다. 최선의 방법은 NSUserDefaults에 앱이 기록한 마지막 위치를 저장 한 다음 실시간 데이터로 전환하기 전에 원하는 위치에 정밀도가 올 때까지 기다리거나 정밀도가 원하는 위치에 올 때까지 MkMapView를 숨기는 것입니다. 그런 다음 그 시점에 표시하십시오 (중간에 로딩 화면을 표시 할 수 있음)
정밀도가 정확한지 어떻게 확인합니까? 그것이 올 때까지 나는 실속 할 수있다. 그러나 나는 그것을 어떻게 확인 하느냐? –
call - CLLocationManager에서 startUpdatingLocation을 호출 한 다음 위임자의 locationManager : didUpdateToLocation : fromLocation :을 재정의합니다. 마지막으로 알려진 위치를 저장하는 경우 사용자가 마지막 위치에서 적당한 거리를두고지도를 표시 할 때를 결정할 수 있습니다 –
실제 위치에서 얼마나 떨어져 있습니까? 응용 프로그램을 시작하거나 오랜 기간 동안 다시 시작하면 사용자 위치는 항상 처음부터 잘못 표시됩니다. 응용 프로그램이 실행되면 점점 더 정확해질 것입니다. CLLocationManager에서 사용자 위치의 정확성을 얻는 방법이 있습니다. 어떤 값을 얻었는지보십시오.
응용 프로그램을로드하는 동안 기다려야합니까? 수면? –
Jeremy Massel이 쓴 것처럼 앱 시작/계속에서 첫 번째 나쁜 위치를 정리해야합니다. 좋은 블로그가 몇 달 전을 게시 발견 : - 그것은 (예를 들어, 기본 위치를하는 것이 좋다 - 응용 프로그램이 도시에 관한
첫째, 내 응용 프로그램에서
http://troybrant.net/blog/2010/02/detecting-bad-corelocation-data/
나는이 방법을 사용 - 전체 도시를 확대하려면 첫 번째 앱을 엽니 다. 데이터가 다운로드되지 않으면 첫 번째 앱을 엽니 다.
두 번째 - 사용자가 이미지도를 사용한 경우 - 좌표를 저장할 수 있고 (+ span (확대/축소) 수준) 사용할 수있는 다른 데이터가없는 경우. 데이터의 경우 -
셋째 -) 애플리케이션이 종료 된 제지도 개구 (온 - 데이터베이스가 이미 일부 좌표가있는 경우
1) 맵의 모든 핀을 표시 아웃/줌.
2) 여전히지도에서 바로 업데이트 (새 위치 또는 변경 뭔가를) 도착, 두 가지 가능성이 있습니다 :
2.1) 사용자가 어느 위치에 확대되지 않은 경우 -지도. 확대/축소하여 모든 위치를 표시합니다. . 사용자가 확대 한 경우
2.2)는 - 위치를 업데이트하지만,지도 나던 축소
당연히
있습니다 - 다음 몇 가지 필터 예를 들어 버튼 (도 있습니다 : 검색, 사용자 위치, 좀 더이 - 필터링 된 결과를 표시하기 위해 위치를 필터링하고 확대/축소합니다.)예상되는 동작입니다. 사용자 위치가 GPS를 사용하여 iPhone에서 항상 추적되는 것은 아닙니다 (배터리를 많이 소모 할 수 있음).따라서지도가 표시되자 마자 MKMapView
인스턴스는 알고있는 마지막 '최상의'사용자 위치를 표시 한 다음 추적을 활성화하여 정확도를 향상시킵니다 (이 과정은 매끄러운 과정이므로 걱정할 필요가 없습니다).
MKMapViewDelegate
프로토콜을 구현하면 MKMapView
이지도에서 사용자 위치를 업데이트 할 때를 모니터링 할 수 있습니다. 그냥 구현 :
내 예에서 위의 코드는 현재지도보기에 표시되는 위치의 정확도를 확인하고 그에 따라 반응
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
CLLocationAccuracy accuracy = userLocation.location.horizontalAccuracy;
if (accuracy ......) {
}
}
(사과 문서 here에서 더 많은 정보를). 처음에는 바다의 중간에 사용자 위치를 보여주는 정말 당신을 귀찮게하면 당신은 충분히 신선/정확한 위치를 얻을 때까지
[편집]
, 당신은 당신이 사용자의 위치를 숨길 수 있습니다.
충분한 위 치를 얻을 때까지 (이전 위임 콜백 덕분에) 처음에 의 showsUserLocation
속성을 NO
으로 설정 한 다음 YES
으로 설정하십시오. 당신을 이렇게함으로써
, 당신은 미리 보여줍니다 할 정확하거나 너무 나이가 아닌 위치를 표시 피할 수
NB (이 오래된 위치 또는 말든 CLLocation
에서 timestamp
속성을 확인할 수있다) : 당신은 옆에 CLLocationManager
인스턴스를 만들어야하는 경우 MKMapView는 내부적으로 인스턴스를 만들고이 대리자 선택기를 통해받은 위치를 게시합니다.
+1이 질문의 바다 부분 중간에 시청자를 가장 먼저 언급 한 사람입니다. –
내가 여기서 할 것은 - 이것도
- 시작 위치 업데이트 위치 업데이트에
- , 너무 오래된 있다면, 나는 그것을 업데이트 새 업데이트를 수신에
- 기다린 위치의 나이를 확인 지도에
매우 정확한 위치가 필요하면 정확도뿐만 아니라 대기 시간을 허용 할 수없는 시간 초과와 덜 정확한 수정을 사용하십시오.
위도와 경도가 0인지 확인하고이 대답을 통해 문제를 처리하는 방법입니다 – AtomRiot
CLLocationManager를 직접 사용하는 경우 일반적으로 첫 번째 콜백에 캐시 된 위치가 표시됩니다. 오래되었지만 일반적으로 좋은 위치입니다. 그런 다음 Wi-Fi, 셀 타워 (사용 가능한 경우)를 사용하여 더 나은 위치를 제공하는 추가 콜백을 신속하게 얻습니다. < 1000m 정확도를 요청한 경우 (몇 초 후에) GPS 삼각 측량을 얻을 수 있습니다.
바다 가운데에있을만큼 정확하지 않은 것은 없습니다.
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
userLocation
또는 location
가 nil
동안 좌표에 액세스 : 나는 코드의이 줄 것으로 생각한다. userLocation
또는 location
이 nil이면 0 좌표를 반환합니다. lat = 0, lon = 0의 위치는 아프리카 연안의 대서양에 있습니다.당신은, 그것에서 좌표를 얻기 전에 전무 있지 않은지 확인하기 위해 location
의 검사를 추가 할 수 있습니다 예 : 당신은 또한 유효한 위치가있을 때 알 수 있도록 MKMapViewDelegatemapView:didUpdateUserLocation:
에 콜백을 대기 할 것
if (self.mapView.userLocation.location) {
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
}
유효한. didUpdateUserLocation:
을 구현하면 유효하지 않은 위치를 나타내는 horizontalAccuracy <이있는 위치는 삭제해야합니다.
-(void)mapView:(MKMapView*)mapView didUpdateUserLocation:(MKUserLocation*)userLocation
{
if (userLocation.location.horizontalAccuracy > 0) {
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
}
}
지도에서 중동 문제를 해결했습니다. 감사합니다. –
- 1. 플렉스 툴팁 위치가 잘못되었습니다
- 2. ListView의 getView metod에서 사용자 정의 어댑터의 위치가 잘못되었습니다.
- 3. 시작 방향이 잘못되었습니다.
- 4. Pthread : 시작 위치가 차이를 만듭니다.
- 5. UIViewController의 뷰 내에있는 객체의 y 위치가 잘못되었습니다.
- 6. Visual Studio 응용 프로그램의 이미지 위치가 잘못되었습니다.
- 7. 재개시 CALayerInvalid 크래시
- 8. MKMapView의 버그?
- 9. MKMapView의 UIPanGestureRecognizer?
- 10. .NET 프로세스 시작 프로세스 오류 (핸들이 잘못되었습니다)
- 11. 재개시 extjs 문제의 창
- 12. MKMapKit 사용자 위치가 표시되지 않음
- 13. 항목을 삭제 한 후에도 ListView의 항목 위치가 잘못되었습니다.
- 14. MKMapView의 타일 캐시를 지우시겠습니까?
- 15. 일시 중단 재개시 분할 오류
- 16. MKMapView의 기본 핀 대신 UILabel
- 17. "팝업"효과가있는 MKMapView의 MKAnnotationView에 대한 사용자 정의 콜 아웃 애니메이션
- 18. 사용자 정의 주석보기의 이미지가 MKMapView의 장치 빌드에 나타나지 않습니다.
- 19. MKMapView의 제스처 재 인식기 - iPhone
- 20. CLLocationManager didUpdateToLocation 대 MKMapView의 didUpdateUserLocation
- 21. MKMapView 현재 위치가 사용자 정의 핀으로 표시됩니다.
- 22. 시작 데몬의 GUI로 사용자 응용 프로그램 시작
- 23. 사용자 계정으로 프로세스 시작
- 24. 시작 사용자 컨트롤을 동적
- 25. 사용자 데이터로 AmazonEC2 시작
- 26. 타이머 일시 중지/재개시 문제가 발생했습니다.
- 27. 내 첫 번째 앱. 오류 : 시작 태그 LinearLayout이 잘못되었습니다. 왜?
- 28. 위치가 잘못
- 29. 사용자 지정 모델에서 사용자 지정보기 시작. Zend_possible?
- 30. 참조 추가 참조가 잘못되었습니다.
이 문제에 대한 해결책을 찾았습니까? lat : 0.0, long : 0.0에 위치 했습니까? – mbogh
나는이 같은 문제에 대해서도 다뤘지만, 온라인으로 해결 방법에 대한 정보는 거의 없다. 내가 마지막으로 알려진 위치를 사용하는 것보다 깨끗한 방법이 있다면 궁금합니다. –