Πώς να επικαλούνται το iPhone Maps για τις κατευθύνσεις με την τρέχουσα τοποθεσία ως Αρχική Διεύθυνση

ψήφοι
72

Ξέρω ότι είναι δυνατό για να ξεκινήσει η εφαρμογή iPhone χάρτες καλώντας openURLσε google maps URL με παραμέτρους saddrκαι daddrμε χορδές τοποθεσία ή Lat / Long (δείτε το παρακάτω παράδειγμα).

Αλλά αναρωτιέμαι αν είναι δυνατόν να γίνει η αρχική διεύθυνση είναι η «τοποθεσία» σελιδοδείκτη χάρτες έτσι ώστε να μπορώ να χρησιμοποιήσω το Maps κωδικό χειρισμό θέση εφαρμογής. Η αναζήτησή μου Google έχει αρκετά άκαρπη.

Για παράδειγμα:

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

Εκτός με κάτι να επικαλεστεί την τρέχουσα σελιδοδείκτη θέση στη θέση της myLatLong.

Δημοσιεύθηκε 23/02/2009 στις 08:11
πηγή χρήστη
Σε άλλες γλώσσες...                            


16 απαντήσεις

ψήφοι
133

Προ iOS 6

Θα πρέπει να χρησιμοποιήσετε πυρήνα Τοποθεσία για να πάρει την τρέχουσα θέση, αλλά με αυτό το γεωγραφικό πλάτος / μήκος ζευγάρι, μπορείτε να πάρετε χάρτες για να σας διαδρομή από εκεί, σε μια ταχυδρομική διεύθυνση ή την τοποθεσία. Όπως αυτό:

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

Τέλος, αν θέλετε να αποφύγετε τη χρήση CoreLocation να βρείτε ρητά την τρέχουσα θέση, και θέλετε να χρησιμοποιήσετε το @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url αντ 'αυτού, τότε δείτε αυτό το σύνδεσμο που παρέχεται στα σχόλια παρακάτω για το πώς να εντοπίσουν την Τρέχουσα + Τοποθεσία εγχόρδων. Ωστόσο, θα εκμεταλλεύονται άλλο χωρίς χαρτιά λειτουργία, και ως Jason McCreary επισημαίνει στη συνέχεια, μπορεί να μην λειτουργεί αξιόπιστα σε μελλοντικές εκδόσεις.


Ενημέρωση για το iOS 6

Αρχικά, Χάρτες χρησιμοποιείται το Google Maps, αλλά τώρα, η Apple και η Google έχουν ξεχωριστές χάρτες εφαρμογές.

1) Αν θέλετε να διαδρομή χρησιμοποιώντας την εφαρμογή Χάρτες Google, χρησιμοποιήστε το πρόγραμμα comgooglemaps URL :

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

2) Για να χρησιμοποιήσετε την Apple Maps, μπορείτε να χρησιμοποιήσετε τη νέα MKMapItemκατηγορία για το iOS 6. Δείτε τα docs API της Apple εδώ

Βασικά, θα χρησιμοποιήσει κάτι τέτοιο, αν δρομολόγησης για τον προορισμό συντεταγμένες ( 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];

Για να υποστηρίξει τόσο το iOS 6+ και προ iOS 6 με τον ίδιο κωδικό, θα ήθελα να συστήσω χρησιμοποιώντας κάτι σαν αυτό το κώδικα που η Apple έχει στην MKMapItemσελίδα API doc:

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

Αυτό θα υποθέσουμε ότι Xcode Base SDK σας είναι iOS 6 (ή Τελευταία iOS ).

Απαντήθηκε 08/06/2009 στις 10:49
πηγή χρήστη

ψήφοι
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];

Αυτό λειτουργεί, αλλά μόνο όταν η γλώσσα του iPhone / iPod έχει οριστεί στα αγγλικά. Αν θέλετε να υποστηρίξει άλλες γλώσσες θα πρέπει να χρησιμοποιήσετε μια τοπική κορδόνι για να ταιριάζει με το όνομα του σελιδοδείκτη Maps.

Απαντήθηκε 01/12/2010 στις 11:05
πηγή χρήστη

Απαντήθηκε 01/11/2010 στις 15:46
πηγή χρήστη

ψήφοι
10

Μπορείτε να χρησιμοποιήσετε ένα #define προεπεξεργαστή, όπως:

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

να κατανοήσουν την έκδοση iOS σας. Στη συνέχεια, μπορώ να χρησιμοποιήσω αυτόν τον κωδικό για να υποστηρίξει το iOS 6, πάρα πολύ:

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];
Απαντήθηκε 30/09/2012 στις 10:51
πηγή χρήστη

ψήφοι
5

Λόγω της περιβάλλον δοκιμών, δεν έχετε πρόσβαση σε σελιδοδείκτες της εφαρμογής Χάρτης του.

Αντ 'αυτού, χρησιμοποιήστε πυρήνα Τοποθεσία να καθορίσει την τρέχουσα τοποθεσία σας. Στη συνέχεια, χρησιμοποιήστε αυτήν τη θέση (το lat και long) στη διεύθυνση URL που κατασκευάστηκαν για να ανοίξετε τους Χάρτες.

Απαντήθηκε 23/02/2009 στις 16:07
πηγή χρήστη

ψήφοι
4

Θα ήθελα να συστήσω το check out CMMapLauncher , μια μίνι-βιβλιοθήκη που θα κατασκευαστεί για να ξεκινήσει η Apple, η Google και άλλες εφαρμογές χαρτογράφησης iOS με ένα συγκεκριμένο αίτημα χαρτογράφησης. Με CMMapLauncher, ο κωδικός για να πάρει τις οδηγίες στην ερώτησή σας θα ήταν:

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

Όπως μπορείτε να δείτε, να ενσωματώνει και την έκδοση των ελέγχων που απαιτούνται μεταξύ iOS 6 και άλλοι.

Απαντήθηκε 07/09/2013 στις 13:37
πηγή χρήστη

ψήφοι
3

Γεια σου από το iOS6 είναι έξω!

Η Apple έκανε κάτι αξιοσημείωτο με άσχημο τρόπο (από τη δική μου άποψη).

Οι χάρτες της Apple ξεκίνησε και για συσκευές που τρέχουν iOS 6 δεν πρέπει να χρησιμοποιήσετε maps.google.com/?q=αν θέλετε το iDevice να ανοίξετε την εγγενή σχέδιο εφαρμογής. Τώρα θα ήταν maps.apple.com/?q=.

Έτσι ώστε οι προγραμματιστές δεν χρειάζεται να πολλή δουλειά, το φιλικό διακομιστής maps.apple.com ανακατευθύνει όλες τις συσκευές εκτός της Apple για να maps.google.com έτσι η αλλαγή είναι διαφανής.

Με αυτό τον τρόπο μπορούμε προγραμματιστές πρέπει απλά να στραφούν όλες τις χορδές ερώτημα google για αυτούς μήλο. Αυτό είναι αυτό που μου αρέσει πολύ.

Έπρεπε να εφαρμόσουν αυτή την λειτουργικότητά σήμερα, έτσι το έκανα. Αλλά ένιωθα πως δεν πρέπει απλώς να ξαναγράψουμε κάθε url που βρίσκεται στο κινητό ιστοσελίδα για τη στόχευση του server χάρτες της Apple, έτσι σκέφτηκα ότι θα ανιχνεύσει μόνο iDevices server-side και εξυπηρετούν urls μήλο μόνο για αυτούς. Σκέφτηκα να μοιραστώ.

Είμαι με τη χρήση PHP γι 'αυτό χρησιμοποιείται το opensource Mobile Εντοπισμός βιβλιοθήκη: http://code.google.com/p/php-mobile-detect/

Απλά χρησιμοποιήστε τη isiPadμέθοδο ψευδο ως μια δυαδική κτήτορας και είστε έτοιμοι, μπορείτε συνηθίζει να μετατρέψετε το google σε μήλο ;-)

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

Στην υγειά σας!

Απαντήθηκε 21/09/2012 στις 18:57
πηγή χρήστη

ψήφοι
2

Εάν δεν θέλετε να ρωτήσετε για τα δικαιώματα θέση και δεν έχουν το lat και υγροποιημένου φυσικού αερίου, χρησιμοποιήστε τον εξής.

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

Για iOS5, η τοποθεσία πρέπει να είναι στη σωστή γλώσσα. Μπορώ να χρησιμοποιήσω το LocalizedCurrentLocation από αυτό το post http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Για iOS6, μπορώ να χρησιμοποιήσω το CLGeocoder να πάρει τη σήμανση και στη συνέχεια ανοίξτε το χάρτη με αυτό και την τρέχουσα θέση.

Μην ξεχάσετε να προσθέσετε CoreLocation.framework και MapKit.framework

Απαντήθηκε 06/12/2012 στις 13:14
πηγή χρήστη

ψήφοι
2

Για iOS6 τα έγγραφα μήλο προτείνουμε να χρησιμοποιήσετε το καθεστώς URL ισοδύναμο maps.apple.com

οπότε η χρήση

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

αντί

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

να είναι προς τα πίσω συμβατό ο κώδικας θα είναι

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

υπάρχει ένα σωρό άλλες υποστηριζόμενες παράμετροι για το σύστημα διεύθυνσης URL της Apple Maps: Η Apple URL Σχέδιο Αναφοράς

μπορείτε να χρησιμοποιήσετε αυτές τις μακροεντολές ανίχνευσης έκδοση iOS, αν έχετε κωδικό εξαρτάται σε άλλα μέρη του κώδικα σας. μακροεντολές έκδοση iOS

Απαντήθηκε 20/09/2012 στις 11:53
πηγή χρήστη

ψήφοι
2

Η πραγματική λύση μπορεί να βρεθεί εδώ. Z5 Έννοιες iOS Ανάπτυξης απόσπασμα κώδικα

Απαιτεί μόνο ένα μικρό κομμάτι της κωδικοποίησης.

- (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]];
}
Απαντήθηκε 02/06/2012 στις 17:51
πηγή χρήστη

ψήφοι
2

Μπορείτε να το κάνετε αυτό τώρα σε html μόνο από ένα url μόνο κινητή συσκευή σας. Εδώ είναι ένα παράδειγμα . Το δροσερό πράγμα είναι, αν γίνει αυτή κωδικό QR έχετε έναν τρόπο για κάποιον να πάρει οδηγίες να σας από οπουδήποτε και αν βρίσκονται ακριβώς από τη σάρωση στο τηλέφωνό τους.

Απαντήθηκε 27/05/2010 στις 00:34
πηγή χρήστη

ψήφοι
1

Η πρότασή μου θα ήταν να χρησιμοποιείτε OpenInGoogleMaps-iOS , καθώς αυτό αποτελεί μέχρι σήμερα την επιλογή (μέχρι το Νοέμβριο του 2015), υποστηρίζει εγκατάσταση λοβό του κακάο και είστε έτοιμοι να πάτε με μερικά μόνο κλικ.

Τοποθετήστε τη χρήση: pod "OpenInGoogleMaps"

Απαίτηση σε αρχείο κεφαλίδας χρησιμοποιώντας: #import "OpenInGoogleMapsController.h"

Δείγμα κώδικα παρακάτω:

/*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];       
Απαντήθηκε 10/11/2015 στις 13:35
πηγή χρήστη

ψήφοι
1

Με την τρέχουσα έκδοση των Χαρτών Google, απλά παραλείψτε το sadrπαράμετρος:

saddr: ... Εάν η τιμή είναι κενή, τότε θα χρησιμοποιηθεί τρέχουσα θέση του χρήστη.

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

Απαντήθηκε 15/12/2013 στις 19:30
πηγή χρήστη

ψήφοι
1

Για iOS6 Χάρτες App, μπορείτε να χρησιμοποιήσετε μόνο την ίδια διεύθυνση URL δημοσιεύτηκε παραπάνω http://maps.google.com/maps?saddr=%f,%f&daddr=%@

αλλά αντί για το URL το Google Maps, μπορείτε να χρησιμοποιήσετε το url με maps://αποτέλεσμα την ακόλουθη διεύθυνση URL:maps://saddr=%f,%f&daddr=%@.

Χρησιμοποιώντας «τοποθεσία» δεν φαίνεται να λειτουργεί, οπότε έμεινα με τις συντεταγμένες.

Antother καλό πράγμα: Είναι συμβατό: Σε iOS5, λανσάρει την εφαρμογή Χάρτες Google.

Απαντήθηκε 13/09/2012 στις 13:21
πηγή χρήστη

ψήφοι
0

Αν δεν δώσετε την τοποθεσία προέλευσης, θα πάρει την τρέχουσα θέση ως πηγή. Δοκιμάστε το παρακάτω -κώδικας

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

UIApplication.shared.openURL (URL (κλωστή! UrlString))

Απαντήθηκε 18/09/2017 στις 12:06
πηγή χρήστη

ψήφοι
0

Απάντησα αυτό σε ένα διαφορετικό νήμα. ( Η τρέχουσα τοποθεσία δεν λειτουργεί με την Apple Maps IOS 6 ). Θα χρειαστεί να πάρετε τις συντεταγμένες της τρέχουσας τοποθεσίας πρώτη, στη συνέχεια, χρησιμοποιήστε το για να δημιουργήσετε το url χάρτη.

Απαντήθηκε 11/01/2013 στις 06:37
πηγή χρήστη

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