iPhone aktualna lokalizacja użytkownika, jak pokazano współrzędne (0,0)

głosy
8

Próbuję dostać użytkownikom bieżącej szerokości i długości geograficznej z tej metody viewDidLoad. Powstały mapa jest poprawnie wskazuje aktualną pozycję jednak NSLog konsekwentnie pokazuje:

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

Ktoś wie, co ja tu brakuje? Z góry dziękuje za twoją pomoc!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@user latitude = %f,userCoordinate.latitude);
    NSLog(@user longitude = %f,userCoordinate.longitude);
}
Utwórz 19/09/2009 o 21:50
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
9

Mapa nie będzie postarać się o lokalizację użytkowników, aż faktycznie wyświetlane, o ile wiem. Dobrym testem, który jest, kiedy nie pojawi się okno dialogowe z pytaniem, czy jest OK dla aplikacji, aby uzyskać lokalizację użytkowników? Z mojego doświadczenia wynika, że ​​zawsze wymyślić tylko po Mapa pokazuje na ekranie.

Najlepszym sposobem, aby podejść do tego problemu, jeśli trzeba mieć miejsce na starcie, jest realizacja klasycznego rdzenia kod obsługi gości i uzyskać lokalizacją że początkowo. Można zrezygnować z otrzymywania aktualizacji z tam raz mapa jest gotowy uzyskać dalsze zmiany stamtąd (choć jeśli trzeba stałej aktualizacji jesteś lepiej po prostu zgodnie ze standardowymi aktualizacjach Rdzeń Lokalizacja. Jeśli myślisz o tym, kiedy masz „pokazuje użytkownikowi lokalizacja”włączony mapie dalszego wykorzystania Core lokalizacja przy aplikacji jest zasadniczo wolny od GPS będą zwalniani się cały czas tak.

Odpowiedział 20/09/2009 o 03:05
źródło użytkownik

głosy
4

Jeśli próbujesz uzyskać użytkownika współrzędne w viewDidLoad metodę (), to zawsze daje wynik 0,0, ponieważ nie jest jeszcze zainicjowany.

Należy również zapoznać się z „Gdzie jestem” site forma przykładowy kod Jabłko. Wyjaśnia to, czego potrzebujesz. Trzeba użyć CLLocationManager klasę. Potrzebny będzie również metodę

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*

Ta metoda będzie wywoływana automatycznie za każdym razem, gdy użytkownik lokalizacja jest aktualizowana. Jeśli używasz symulatora, to ta metoda zostanie wywołana tylko raz i powróci kilka domyślnych współrzędnych.

Mam nadzieję, że to pomoże.

Odpowiedział 21/09/2009 o 06:36
źródło użytkownik

głosy
2

Z dokumentu na CLLocation , jeśli dokładność pozioma lub pionowa Dokładność jest ujemny, to znaczy, że nie może znaleźć wartość. Podejrzewam, że to, co się tutaj dzieje. Należy pamiętać, że jeśli tylko spojrzeć raz, może to daje przybliżoną ostatniej znanej lokalizacji, zanim w ogóle poprawie wynik dokładności.

Pozioma Dokładność współrzędnych szerokości i długości geograficznej na zidentyfikowanie środek okręgu i wartość ta oznacza promień tego kręgu. Wartość ujemna oznacza, że ​​szerokość i długość współrzędnych są nieprawidłowe.

Odpowiedział 19/09/2009 o 21:55
źródło użytkownik

głosy
1

Jak Kendall powiedziane, MKMapView nie posiada lokalizacji użytkownika, dopóki nie zakończy się ładowanie, a metoda viewDidLoad jest zwykle zbyt wcześnie, aby poprosić go. Prostszy sposób niż przy użyciu CoreLocation jest wdrożenie metody MKMapViewDelegate -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. To daje lokalizację użytkownika tak szybko, jak to się znajduje, bez konieczności czynienia z CLLocationManager.

Odpowiedział 08/01/2013 o 18:33
źródło użytkownik

głosy
1

Powinieneś dostać współrzędnych z CoreLocation zamiast MapKit. MapView wyświetla lokalizację użytkownika po to rzeczywiście dostał aktualną lokalizację. Przed lokalizacja jest określona, ​​szerokość i długość geograficzna są zarówno 0. 3

należy utworzyć instace CLLocationManager, ustawić delegata. Zostaniesz powiadomiony, gdy lokalizacja jest ustalona.

Odpowiedział 20/09/2009 o 06:17
źródło użytkownik

głosy
0

Spróbuj tego w

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewdidAppear: lub zadzwoń wykonać seletor po zwłoki

Odpowiedział 05/05/2014 o 12:32
źródło użytkownik

głosy
0

Ta odpowiedź wyjaśnia jak ustawić widok mapy z lokalizacją użytkownika:

HowTo zainicjować MKMapView z danej lokalizacji użytkownika?

Odpowiedział 09/03/2010 o 16:52
źródło użytkownik

głosy
-1

Dodaj to do sekcji viewDidLoad

mapView.showsUserLocation = YES;
Odpowiedział 02/05/2010 o 05:56
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more