iPhone Maps Anfahrt mit aktuellem Standort als Startadresse Wie aufzurufen

stimmen
72

Ich weiß , es ist möglich , die iPhone Karten - Anwendung durch den Aufruf zu starten openURLauf einer Google Maps - URL mit Parametern saddrund daddrmit dem Standort Strings oder Breite / Länge (siehe Beispiel unten).

Aber ich frage mich , ob es möglich ist , die Startadresse der machen „Current Location“ Karten - Lesezeichen , so dass ich die verwenden können Karten App Standort Behandlungscode. Meine Google - Suche wurde ziemlich erfolglos.

Beispielsweise:

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

Außer mit etwas den aktuellen Standort Lesezeichen anstelle von aufzurufen myLatLong.

Veröffentlicht am 23/02/2009 um 08:11
quelle vom benutzer
In anderen Sprachen...                            


16 antworten

stimmen
133

Pre iOS 6

Sie müssen Core-Standort verwenden, um den aktuellen Standort zu erhalten, aber mit diesem lat / long Paar, können Sie Karten Route, die Sie von dort zu bekommen, zu einer Adresse oder Standort. Wie so:

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]];

Schließlich, wenn Sie mit Corelocation vermeiden möchten ausdrücklich den aktuellen Standort zu finden, und wollen die verwenden @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url statt, dann sehen Sie diesen Link , die ich weiter unten in den Kommentaren versehen , wie Sie den lokalisieren Aktuelle + Location String. Sie sind jedoch die Vorteile eines anderen nicht dokumentierte Funktion nehmen, und als Jason McCreary unten weist darauf hin, es kann nicht zuverlässig in zukünftigen Versionen funktionieren.


Update für iOS 6

Ursprünglich Karten verwendet Google Maps, aber jetzt, Apple und Google haben separate Karten - Anwendungen.

1) Wenn Sie eine Route erstellen möchten die Google Maps App verwenden, verwenden Sie die comgooglemaps URL - Schema :

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

2) Zur Verwendung von Apple Maps können Sie die neue verwenden MKMapItemKlasse für iOS 6. Sehen Sie sich die Apple - API - Dokumentation hier

Grundsätzlich werden Sie so etwas wie dieses verwenden, wenn das Routing zu Zielkoordinaten ( 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];

Um sowohl iOS 6+ und vor iOS 6 im gleichen Code zu unterstützen, würde ich mit so etwas wie diesem Code empfehlen , dass Apple auf die hat MKMapItemAPI doc Seite:

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

Dies würde davon ausgehen , dass Ihr Xcode Base - SDK iOS 6 (oder ist Neueste iOS ).

Beantwortet am 08/06/2009 um 10:49
quelle vom benutzer

stimmen
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];

Das funktioniert aber nur, wenn das iPhone / iPod-Sprache auf Englisch eingestellt ist. Wenn Sie andere Sprachen unterstützen möchten, müssen Sie eine lokalisierte Zeichenfolge verwenden, um die Karten Lesezeichen Namen übereinstimmen.

Beantwortet am 01/12/2010 um 11:05
quelle vom benutzer

Beantwortet am 01/11/2010 um 15:46
quelle vom benutzer

stimmen
10

Sie können einen Präprozessor #define wie verwenden:

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

Ihre iOS-Version zu verstehen. Dann kann ich diesen Code verwenden, iOS 6, zu unterstützen:

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];
Beantwortet am 30/09/2012 um 10:51
quelle vom benutzer

stimmen
5

Wegen der Sandbox, haben Sie keinen Zugriff auf die Lesezeichen der Map-Anwendung.

Verwenden Sie stattdessen Kern Lage den aktuellen Standort selbst zu bestimmen. Dann diese Position nutzen (die lat und lange) in der URL, die Sie bauen Karten zu öffnen.

Beantwortet am 23/02/2009 um 16:07
quelle vom benutzer

stimmen
4

Ich empfehle , Check - out CMMapLauncher , eine Mini-Bibliothek , die ich gebaut Apple, Google zu starten, und andere iOS - Mapping - Anwendungen mit einer bestimmten Mapping - Anfrage. Mit CMMapLauncher, bekommen Sie den Code die Richtungen in Ihrer Frage wäre:

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

Wie Sie sehen können, kapselt es auch die Version zwischen iOS 6 & andere erforderlich zu überprüfen.

Beantwortet am 07/09/2013 um 13:37
quelle vom benutzer

stimmen
3

Hey, da iOS6 ist raus!

Apple hat etwas Merkwürdiges in einem schlechten Weg (aus meiner Sicht).

Apple-Karten kommen auf den Markt und für Geräte mit iOS 6 sollten Sie nicht verwenden , maps.google.com/?q=wenn Sie die iDevice wollen App die native - Plan zu öffnen. Nun wäre es sein maps.apple.com/?q=.

So dass Entwickler nicht zu viel Arbeit haben, leitet das freundliche maps.apple.com Server alle Nicht-Apple-Geräte zu maps.google.com so die Änderung transparent ist.

So können wir developpers müssen nur schalten Sie alle Google-Abfrage-Strings an Apple diejenigen. Dies ist, was ich viel nicht mögen.

Ich hatte diese functionnality heute umzusetzen, damit ich es tat. Aber ich fühlte, ich sollte nicht nur jede URL Rewrite in mobiler Website liegt Apples Karten-Server zu zielen, damit ich dachte, ich würde nur iDevices serverseitige erkennen und Apfel Urls nur für diejenigen dienen. Ich dachte, ich würde Aktie.

Ich bin mit PHP , damit ich die Open - Source - Mobile - Detect - Bibliothek verwendet: http://code.google.com/p/php-mobile-detect/

Verwenden Sie einfach die isiPadPseudo-Methode als boolean Getter und Sie fertig sind , werden Sie nicht konvertieren Google in Apfel ;-)

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

Prost!

Beantwortet am 21/09/2012 um 18:57
quelle vom benutzer

stimmen
2

Wenn Sie möchten, für den Standort Berechtigungen nicht fragen und nicht über die lat und lng, verwenden Sie die folgende.

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]];
}

Für ios5, muss die aktuelle Position in der richtigen Sprache sein. Ich verwende die LocalizedCurrentLocation von diesem Posten http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Für iOS6, verwende ich die CLGeocoder die Ortsmarken zu bekommen und dann die Karte öffnet mit ihm und dem aktuellen Standort.

Denken Sie daran, fügen CoreLocation.framework und MapKit.framework

Beantwortet am 06/12/2012 um 13:14
quelle vom benutzer

stimmen
2

Für iOS6 empfehlen die Apfel docs das Äquivalent maps.apple.com URL-Schema unter Verwendung von

so verwenden

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

Anstatt von

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

um rückwärts der Code kompatibel wäre

    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]];

gibt es eine ganze Menge anderer Parameter , die für das Apple - Karten - URL - Schema: Apple - URL - Schema Referenz

Sie können diese iOS - Version Erkennung Makros verwenden , wenn Sie in anderen Teilen des Codes bedingten Code haben. iOS - Version Makros

Beantwortet am 20/09/2012 um 11:53
quelle vom benutzer

stimmen
2

Die wirkliche Lösung ist hier zu finden. Z5 Konzepte iOS Entwicklung Code Snippet

Es erfordert nur ein wenig Codierung.

- (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]];
}
Beantwortet am 02/06/2012 um 17:51
quelle vom benutzer

stimmen
2

Sie können dies in html jetzt tun gerade von einer URL auf Ihrem einzigen mobiles Gerät. Hier ist ein Beispiel . Die kühle Sache ist , wenn Sie diese in einen QR - Code drehen haben Sie eine Möglichkeit , jemanden Richtungen zu bekommen Sie aus , wo immer sie sind nur durch sie auf ihrem Handy zu scannen.

Beantwortet am 27/05/2010 um 00:34
quelle vom benutzer

stimmen
1

Mein Vorschlag wäre mit OpenInGoogleMaps-iOS , da dies eine aktuelle Wahl ist (bis November 2015), unterstützt es Kakaofrüchte Installation und Sie sind bereit , in wenigen Klicks zu gehen.

Installieren Sie mit: pod "OpenInGoogleMaps"

Erfordern in Header-Datei verwenden: #import "OpenInGoogleMapsController.h"

Beispielcode unten:

/*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];       
Beantwortet am 10/11/2015 um 13:35
quelle vom benutzer

stimmen
1

Mit der aktuellen Version von Google Maps, lassen Sie einfach den sadrParameter:

saddr... Wenn der Wert leer gelassen wird, dann wird die aktuelle Position des Benutzers verwendet werden.

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

Beantwortet am 15/12/2013 um 19:30
quelle vom benutzer

stimmen
1

Für iOS6 Maps App, können Sie einfach die gleiche URL oben gepostet verwenden http://maps.google.com/maps?saddr=%f,%f&daddr=%@

aber statt der Google Maps - URL verwenden Sie die URL mit , maps://was zu der folgenden URL:maps://saddr=%f,%f&daddr=%@.

‚Aktuellen Standort‘ Mit scheint nicht zu funktionieren, so blieb ich mit den Koordinaten.

Antother gute Sache: Es ist abwärtskompatibel: Auf iOS5, es die Google Maps App startet.

Beantwortet am 13/09/2012 um 13:21
quelle vom benutzer

stimmen
0

Wenn Sie nicht Quellenort bereitstellen, wird es die aktuelle Position als Quelle nehmen. Versuchen Sie unter Code-

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

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

Beantwortet am 18/09/2017 um 12:06
quelle vom benutzer

stimmen
0

Ich antwortete , das auf einem anderen Thread. ( Jetzige Standort funktioniert nicht mit Apple Maps IOS 6 ). Sie müssen die Koordinaten des aktuellen Standorts erhalten zuerst, dann die Karte URL erstellen verwenden.

Beantwortet am 11/01/2013 um 06:37
quelle vom benutzer

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