2011-01-04 5 views
7

Otwieram aplikację Mapy, aby wyświetlać trasę z bieżącej lokalizacji użytkownika do współrzędnej docelowej z mojego kodu. Używam następującego kodu, aby otworzyć aplikację Mapy. Dzwonię do tego kodu po naciśnięciu przycisku. getCurrentLocation to metoda zwracająca ostatnio zaktualizowaną lokalizację.Otwórz aplikację Mapy z kodu - Gdzie/jak znaleźć "Aktualna lokalizacja"?

- (void)showDirectionsToHere { 

    CLLocationCoordinate2D currentLocation = [self getCurrentLocation]; // LINE 1 
    NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f", 
                currentLocation.latitude, 
                currentLocation.longitude, 
                destCoordinate.latitude, 
                destCoordinate.longitude]; 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; 
} 

Tutaj [self getCurrentLocation] w LINE 1 używa CLLocationManager celu ustalenia aktualnego miejsca i zwraca wartość.

Uwaga: Jeszcze nie zaimplementowałem kodu w LINE1. Właśnie planowałem to zrobić w ten sposób.

Moje pytania są następujące:

  1. Jest to dobra praktyka, aby obliczyć aktualnej pozycji, w czasie aplikacja Mapy nazywa?
  2. Czy [self getCurrentLocation] zwróci bieżącą lokalizację przed wywołaniem openURL?
  3. Czy przed otwarciem aplikacji Mapy muszę określić obecną lokalizację?

Jestem trochę zmieszany z powodu tych rzeczy. Uprzejmie prowadź mnie. Dzięki.

Odpowiedz

11

Nie musisz samodzielnie określać bieżącej lokalizacji użytkownika, aplikacja Mapy zajmie się tym.

Zamiast podania pary długości i szerokości geograficznej można podać Current%%20Location, a Mapy same określą bieżące położenie użytkownika.

%20 jest zakodowaną znakami url, a dodatkowa % wymyka się rzeczywistej %, więc nie będzie interpretowana jako podstawienie formatu.


Dzięki @Carlos P dla wskazując na mój charakter ucieczki gafę w oryginalnym odpowiedź.

+0

Dzięki Man .. Kiedy mijam Current% 20Location jako saddr. Aplikacja Mapy nawet się nie otwiera. ** [NSString stringWithFormat: @<"http://maps.google.com/maps?saddr=Current%20Location&daddr=%f,%f">, destCoordinate.latitude, destCoordinate.longitude] ** to kod, którym jestem za pomocą. – EmptyStack

+0

Umieść kod w swoim pytaniu lub umieść go w swoim komentarzu - nie można go odczytać tak jak jest. Jestem pewien, że to działa, więc brzmi to jak problem z syntezą. –

+0

Przepraszamy. Kod, którego używam, to '[NSString stringWithFormat: @" http://maps.google.com/maps?saddr=Current%20Location&daddr=%f,%f ", destCoordinate.latitude, destCoordinate.longitude] ' – EmptyStack

7

Używanie "Aktualna lokalizacja" jako saddr działa tylko wtedy, gdy użytkownik ma ustawiony język systemu na angielski. Najlepszym rozwiązaniem jest uzyskanie aktualnej pozycji z Lokalizacji głównej i użycie jej jako saddr.

+0

Czy to jest? Nie testowałem tego z innymi językami. Dzięki za twoją podpowiedź. Wezmę to pod uwagę. – EmptyStack

5

Jak zauważył Pazurep, "Aktualna lokalizacja" działa tylko w języku angielskim. Na przykład w języku włoskim poprawnym ciągiem jest "Posizione attuale".

Wąchanie oprogramowania układowego iPhone'a Wykryłem wszystkie tłumaczenia "Aktualna lokalizacja" i napisałem klasę, która zawiera poprawny ciąg potrzebny dla dowolnego (aktualnie) obsługiwanego języka.

Na moim blogu znajduje się wpis na ten temat (kod źródłowy): http://www.martip.net/blog/localized-current-location-string-for-iphone-apps.

+0

Dobry wysiłek. Dzięki. – EmptyStack

+0

Wywołanie funkcji currentLocale na urządzeniu z ustawionym językiem angielskim oraz ustawieniem waluty i daty na niemiecki spowoduje zwrócenie "de", ale Mapy Google nadal będą oczekiwać "bieżącej lokalizacji". Zobacz [to pytanie] (http://stackoverflow.com/questions/3910244/getting-current-device-language-in-ios), w jaki sposób uzyskać bieżące ustawienie języka. – THM

2

Możesz użyć nowej klasy MKMapItem dla systemu iOS 6.See the Apple API docs here

Zasadniczo, można użyć czegoś takiego, jeśli trasy do miejsca docelowego współrzędne (destCoordinate):

MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: destCoordinate addressDictionary: nil]; 
    MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark: place]; 
    destination.name = @"Name Here!"; 
    NSArray* items = [[NSArray alloc] initWithObjects: destination, nil]; 
    NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys: 
           MKLaunchOptionsDirectionsModeDriving, 
           MKLaunchOptionsDirectionsModeKey, nil]; 
    [MKMapItem openMapsWithItems: items launchOptions: options]; 

W celu wspierania zarówno iOS 6+ i pre iOS 6 w tym samym kodzie, I „d polecam korzystania coś takiego kodu, że Apple na stronie doc MKMapItem API:

Class itemClass = [MKMapItem class]; 
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) { 
    // iOS 6 MKMapItem available 
} else { 
    // use pre iOS 6 technique 
} 

byłoby to zakładamy, że Xcode Baza SDK iOS 6 (lub Najnowsze iOS).

In this other answer, I offer a robust technique for iOS 5.1 and lower

+0

Dzięki MKMapItem możesz łatwo pokazać w aplikacji Mapy trasę z bieżącej lokalizacji do POI. Aby jednak wyświetlić te POI, które znajdują się w pobliżu, musisz nadal korzystać z Lokalizacji głównej, aby uzyskać aktualną lokalizację dla długości/długości w sql. Nie można użyć parametru mapItemForCurrentLocation, ponieważ nie ma oznaczenia miejsca, dzięki czemu nie zostanie uzyskana długość/długość, której potrzebujesz. – SPA

+0

@SPA, co? O jakim SQL mówisz? Czy chcesz powiedzieć "URL"? W przypadku tego rozwiązania iOS 6 wciąż nie ma adresu URL. To pytanie dotyczy wyszukiwania tras z bieżącej lokalizacji do miejsca docelowego. Nie ma potrzeby używania 'mapItemForCurrentLocation'. – Nate

+0

Nie, mam na myśli SQL. Jeśli masz bazę danych miejsc, aby przedstawić najbliższe, potrzebujesz bieżącej lokalizacji jako lat/długo, aby wykonać instrukcję SQL Select. Więc lokalizacja rdzenia jest nadal wymagana. – SPA