Jak wywołać iPhone Maps na kierunkach z aktualną pozycję jako adres początkowy

głosy
72

Wiem, że to możliwe, aby uruchomić aplikację iPhone map dzwoniąc openURLna Mapach Google URL z parametrami saddri daddrze strunami lokalizacji czy Lat / Long (patrz przykład poniżej).

Ale zastanawiam się, czy to możliwe, aby adres początkowy być „Current Location” mapy zakładkę tak, że mogę korzystać z Mapy lokalizacji kod obsługi aplikacji. Moja Wyszukiwarka Google została całkiem bezowocne.

Na przykład:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @http://maps.google.com/maps?saddr=%@&daddr=%@, myLatLong, latlong]]];

Chyba coś do powoływania bieżącej lokalizacji zakładkę w miejscu myLatLong.

Utwórz 23/02/2009 o 08:11
źródło użytkownik
W innych językach...                            


16 odpowiedzi

głosy
133

Wstępnie iOS 6

Trzeba użyć rdzenia Lokalizacja aby uzyskać bieżącej lokalizacji, ale z tym długość / szerokość geograficzna pary, można uzyskać Maps trasa cię stamtąd, na adres lub lokalizację. Tak:

CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
// this uses an address for the destination.  can use lat/long, too with %f,%f format
NSString* address = @"123 Main St., New York, NY, 10001";
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%@",
                    currentLocation.latitude, currentLocation.longitude,
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

Wreszcie, jeśli chcesz uniknąć używania CoreLocation jawnie znaleźć aktualną lokalizację, a chcesz używać @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"zamiast adresu URL, a następnie zobaczyć ten link, że przewidziany w komentarzach poniżej na jak zlokalizować Obecny + położenie ciąg. Jednak wykorzystują inną nieudokumentowanych funkcji i jak Jason McCreary zaznacza poniżej, nie może pracować niezawodnie w przyszłych wydaniach.


Aktualizacja dla systemu iOS 6

Początkowo Mapy wykorzystywane mapy Google, ale teraz, Apple i Google mają oddzielne mapy aplikacje.

1) Jeśli chcesz trasy w aplikacji Mapy Google, należy się comgooglemaps schematu URL :

NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

2) Aby skorzystać z firmy Apple Maps, można korzystać z nowej MKMapItemklasy dla iOS 6. Zobacz docs firmy Apple API tutaj

W zasadzie, można użyć coś jak to, czy trasy do docelowych współrzędnych ( latlong):

    MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: latlong 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, polecam korzystania coś takiego kodu, że Apple na MKMapItemstronie API doc:

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

To byłoby zakładać, że Xcode Baza SDK iOS 6 (lub Najnowsze iOS ).

Odpowiedział 08/06/2009 o 10:49
źródło użytkownik

głosy
21
NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=Current Location&saddr=%@",startAddr];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
[url release];

Działa to jednak tylko wtedy, gdy język iPhone / iPod jest w języku angielskim. Jeśli chcesz wesprzeć innych języków będzie trzeba użyć zlokalizowaną ciąg dopasować mapach nazwę zakładki.

Odpowiedział 01/12/2010 o 11:05
źródło użytkownik

Odpowiedział 01/11/2010 o 15:46
źródło użytkownik

głosy
10

Można używać preprocesora #define jak:

#define SYSTEM_VERSION_LESS_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

zrozumieć wersję iOS. Następnie można użyć tego kodu, aby wspierać iOS 6, zbyt:

NSString* addr = nil;
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
   addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
} else {
   addr = [NSString stringWithFormat:@"http://maps.apple.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
}

NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
Odpowiedział 30/09/2012 o 10:51
źródło użytkownik

głosy
5

Ze względu na piaskownice, nie masz dostępu do aplikacji Map zakładek.

Zamiast tego należy użyć rdzenia Lokalizacja w celu określenia aktualnej lokalizacji siebie. Następnie użyj tej lokalizacji (LAT i długie) w adresie URL można zbudować, aby otworzyć Mapy.

Odpowiedział 23/02/2009 o 16:07
źródło użytkownik

głosy
4

I polecam sprawdzić CMMapLauncher , mini-bibliotekę, że zbudowany, aby uruchomić Apple, Google i inne aplikacje mapowe iOS z konkretnego wniosku odwzorowania. Z CMMapLauncher kod, aby uzyskać wskazówki w swoje pytanie byłoby:

[CMMapLauncher launchMapApp:CMMapAppAppleMaps
          forDirectionsFrom:[CMMapPoint mapPointWithName:@"Origin"
                                              coordinate:myLatLong]
                         to:[CMMapPoint mapPointWithName:@"Destination"
                                              coordinate:latlong]];

Jak widać, to również obudowuje wersja sprawdzianów wymaganych pomiędzy iOS 6 i innych.

Odpowiedział 07/09/2013 o 13:37
źródło użytkownik

głosy
3

Hej od iOS6 jest!

Jabłko zrobił coś niezwykłego w zły sposób (z mojego punktu widzenia).

Mapy Apple są uruchamiane i dla urządzeń z systemem iOS 6 nie powinno się używać maps.google.com/?q=, jeśli chcesz, aby otworzyć iDevice natywną aplikację planu. Teraz byłoby maps.apple.com/?q=.

Tak, że deweloperzy nie mają dużo pracy, przyjazny serwer maps.apple.com przekierowuje wszystkich urządzeń innych niż Apple do maps.google.com więc zmiana jest przezroczysty.

W ten sposób developpers prostu trzeba przełączyć wszystkie ciągi zapytań google do tych jabłek. To jest to, co lubię dużo.

Miałem do wykonania tego functionnality dzisiaj więc to zrobiłem. Ale czułem, że nie należy po prostu przepisać każdy URL leżącego w witrynie mobilnej kierować serwer Apple map więc myślałem, że po prostu wykryć iDevices po stronie serwera i podawać adresy URL jabłka tylko dla nich. Myślałam, że dzielić.

Używam PHP więc użyłem opensource Telefony Detect biblioteka: http://code.google.com/p/php-mobile-detect/

Wystarczy skorzystać z isiPadmetody pseudo jako logiczną getter i skończysz, przyzwyczajenie konwersji google pod jabłkiem ;-)

$server=$detect->isiPad()?"apple":"google";
$href="http://maps.{$server}.com/?q=..."

Twoje zdrowie!

Odpowiedział 21/09/2012 o 18:57
źródło użytkownik

głosy
2

Jeśli nie chcesz, aby poprosić o uprawnieniach lokalizacyjnych i nie mają lat i LNG, należy wykonać następujące czynności.

NSString *destinationAddress = @"Amsterdam";

Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:destinationAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        if([placemarks count] > 0) {

            MKPlacemark *placeMark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]];

            MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:placeMark];

            MKMapItem *mapItem2 = [MKMapItem mapItemForCurrentLocation];


            NSArray *mapItems = @[mapItem, mapItem2];

            NSDictionary *options = @{
        MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
        MKLaunchOptionsMapTypeKey:
            [NSNumber numberWithInteger:MKMapTypeStandard],
        MKLaunchOptionsShowsTrafficKey:@YES
            };

            [MKMapItem openMapsWithItems:mapItems launchOptions:options];

        } else {
            //error nothing found
        }
    }];
    return;
} else {

    NSString *sourceAddress = [LocalizedCurrentLocation currentLocationStringForCurrentLanguage];

    NSString *urlToOpen = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%@&daddr=%@",
                 [sourceAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                 [destinationAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlToOpen]];
}

Dla iOS5, bieżąca lokalizacja musi być w odpowiednim języku. Używam LocalizedCurrentLocation z tego postu http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Dla iOS6, używam CLGeocoder uzyskać oznaczenie miejsca i otwórz mapę z nim i aktualną pozycję.

Pamiętaj, aby dodać CoreLocation.framework i MapKit.framework

Odpowiedział 06/12/2012 o 13:14
źródło użytkownik

głosy
2

Dla iOS6 docs apple polecić za pomocą schematu URL równoważne maps.apple.com

więc używać

http://maps.apple.com/maps?saddr=%f,%f&daddr=%f,%f

zamiast

http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f

być wstecznie kompatybilne kod byłby

    NSString* versionNum = [[UIDevice currentDevice] systemVersion];
    NSString *nativeMapScheme = @"maps.apple.com";
    if ([versionNum compare:@"6.0" options:NSNumericSearch] == NSOrderedAscending)
        nativeMapScheme = @"maps.google.com";
    }
    NSString* url = [NSString stringWithFormat: @"http://%@/maps?saddr=%f,%f&daddr=%f,%f", nativeMapScheme
             startCoordinate.latitude, startCoordinate.longitude,
             endCoordinate.latitude, endCoordinate.longitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

istnieje cały ładunek innych obsługiwanych parametrów dla schematu URL firmy Apple Maps: Jabłko URL Program referencyjny

można korzystać z tych makr wykrywania wersji iOS, jeśli masz kod warunkowy w innych częściach kodu. Wersja iOS makra

Odpowiedział 20/09/2012 o 11:53
źródło użytkownik

głosy
2

Prawdziwym rozwiązaniem można znaleźć tutaj. Z5 Concepts iOS Rozwoju Code Snippet

To po prostu wymaga trochę kodowania.

- (IBAction)directions1_click:(id)sender
{
    NSString* address = @"118 Your Address., City, State, ZIPCODE";
    NSString* currentLocation = @"Current Location";
    NSString* url = [NSStringstringWithFormat: @"http://maps.google.com/maps?saddr=%@&daddr=%@",[currentLocation stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    UIApplication *app = [UIApplicationsharedApplication];
    [app openURL: [NSURL URLWithString: url]];
}
Odpowiedział 02/06/2012 o 17:51
źródło użytkownik

głosy
2

Można to zrobić tylko teraz w html z URL tylko na urządzeniu mobilnym. Oto przykład . Fajne jest to, jeśli przekształcić kod QR masz sposób ktoś się do ciebie z kierunków gdziekolwiek są one po prostu skanując go na swoim telefonie.

Odpowiedział 27/05/2010 o 00:34
źródło użytkownik

głosy
1

Moja sugestia będzie za pomocą OpenInGoogleMaps-iOS jak to jest do wyboru daty (od listopada 2015), obsługuje instalację strąków kakaowca i jesteś gotowa do pracy w ciągu kilku kliknięć.

Zainstalować przy użyciu: pod "OpenInGoogleMaps"

Wymagają w pliku nagłówka przy użyciu: #import "OpenInGoogleMapsController.h"

Przykładowy kod poniżej:

/*In case the user does NOT have google maps, then apple maps shall open*/
[OpenInGoogleMapsController sharedInstance].fallbackStrategy = kGoogleMapsFallbackAppleMaps;    

/*Set the coordinates*/
GoogleMapDefinition *definition = [[GoogleMapDefinition alloc] init];   
CLLocationCoordinate2D metsovoMuseumCoords;     //coordinates struct
metsovoMuseumCoords.latitude = 39.770598;
metsovoMuseumCoords.longitude = 21.183215;
definition.zoomLevel = 20;
definition.center = metsovoMuseumCoords;        //this will be the center of the map

/*and here we open the map*/
[[OpenInGoogleMapsController sharedInstance] openMap:definition];       
Odpowiedział 10/11/2015 o 13:35
źródło użytkownik

głosy
1

Przy obecnej wersji Map Google, po prostu pominąć sadrparametr:

saddr... Jeśli wartość jest pusta, zostanie użyta bieżąca lokalizacja użytkownika.

https://developers.google.com/maps/documentation/ios/urlscheme

Odpowiedział 15/12/2013 o 19:30
źródło użytkownik

głosy
1

Dla iOS6 Maps aplikacji, można po prostu użyć tego samego adresu URL zamieszczonych powyżej http://maps.google.com/maps?saddr=%f,%f&daddr=%@

ale zamiast URL mapach Google, należy użyć adresu URL z maps://skutkuje następującym adresem URL:maps://saddr=%f,%f&daddr=%@.

Korzystanie „bieżąca lokalizacja” nie wydaje się do pracy, więc zostałam ze współrzędnymi.

Antother dobre: ​​Jest kompatybilny wstecz: Na iOS5, uruchamia aplikację Mapy Google.

Odpowiedział 13/09/2012 o 13:21
źródło użytkownik

głosy
0

Jeśli nie zapewniają lokalizację źródłową, to zajmie bieżącą lokalizację jako źródła. Spróbuj poniżej Code

niech urlString = " http://maps.apple.com/maps?daddr=(destinationLocation.latitude),(destinationLocation.longitude)&dirflg=d "}

UIApplication.shared.openURL (URL (string: urlString))

Odpowiedział 18/09/2017 o 12:06
źródło użytkownik

głosy
0

Odpowiedziałem na to innego wątku. ( Aktualna Lokalizacja nie działa z Apple Maps IOS 6 ). Trzeba uzyskać współrzędne bieżącej lokalizacji, następnie używać go do tworzenia map URL.

Odpowiedział 11/01/2013 o 06:37
źródło użytkownik

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