Hoe de iPhone Maps te roepen naar aanwijzingen met huidige locatie in als Start Address

stemmen
72

Ik weet dat het mogelijk is om de iPhone kaarten applicatie te starten door te bellen openURLop een google maps URL met parameters saddren daddrmet locatie-strings of Lat / Long (zie voorbeeld hieronder).

Maar ik vraag me af of het mogelijk is om het startadres worden de huidige locatie kaarten bladwijzer, zodat ik het kan gebruiken Maps app locatie handling code. My Google search is erg vruchteloos gebleven.

Bijvoorbeeld:

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

Behalve met iets naar de huidige locatie bladwijzer te roepen in plaats van myLatLong.

De vraag is gesteld op 23/02/2009 om 08:11
bron van user
In andere talen...                            


16 antwoorden

stemmen
133

Pre iOS 6

Je moet Core Location gebruiken om de huidige locatie te krijgen, maar met die lengte / breedte pair, kunt u Maps route die u vanaf daar naar een adres of locatie. Als volgt:

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

Tot slot, als u wilt voorkomen dat u CoreLocation expliciet op zoek naar de huidige locatie, en willen het gebruik @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url te veranderen, dan is deze link die ik ontvangen in opmerkingen hieronder voor informatie over de te lokaliseren Huidige + Location string. U bent echter gebruik te maken van een andere ongedocumenteerde functie, en als Jason McCreary opmerkt hieronder, kan het niet betrouwbaar werken in toekomstige versies.


Update voor iOS 6

Oorspronkelijk Maps gebruikt Google maps, maar nu, Apple en Google hebben een aparte maps apps.

1) Als u route met behulp van de Google Maps-app gebruiken de comgooglemaps URL-schema :

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

2) Voor Apple Maps te gebruiken, kunt u de nieuwe gebruiken MKMapItemklasse voor iOS 6. Bekijk de Apple API docs hier

In principe zal je iets als dit gebruiken, als een andere route naar de bestemming coördinaten ( 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];

Met het oog op zowel iOS 6+ en pre iOS 6 te ondersteunen in de dezelfde code, zou ik adviseren het gebruik van zoiets als dit code die Apple heeft op de MKMapItemAPI doc pagina:

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

Dit zou veronderstellen dat uw Xcode Base SDK is iOS 6 (of Laatste iOS ).

antwoordde op 08/06/2009 om 10:49
bron van user

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

Dit werkt maar alleen wanneer de iPhone / iPod taal is ingesteld in het Engels. Wilt u ondersteuning voor andere talen dan moet je een gelokaliseerde tekenreeks gebruiken om de Maps bladwijzer overeenkomen met de naam.

antwoordde op 01/12/2010 om 11:05
bron van user

antwoordde op 01/11/2010 om 15:46
bron van user

stemmen
10

U kunt een preprocessor # define, zoals te gebruiken:

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

om uw iOS-versie te begrijpen. Dan kan ik deze code gebruiken om iOS te ondersteunen 6, ook:

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];
antwoordde op 30/09/2012 om 10:51
bron van user

stemmen
5

Vanwege sandboxing, hoeft u geen toegang tot bladwijzers van de Kaarten-toepassing hebben.

Gebruik in plaats daarvan Core Location naar de huidige locatie zelf bepalen. Maak dan gebruik van die locatie (de lat en lang) in de URL die u bouwen om Maps te openen.

antwoordde op 23/02/2009 om 16:07
bron van user

stemmen
4

Ik beveel het uitchecken CMMapLauncher , een mini-bibliotheek die ik gebouwd om Apple, Google en andere iOS-mapping apps te starten met een specifiek mapping aanvraag. Met CMMapLauncher, de code te krijgen van de aanwijzingen in de vraag zou zijn:

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

Zoals u kunt zien, het handvest ook de versie toetsen als voorgeschreven tussen iOS 6 en anderen.

antwoordde op 07/09/2013 om 13:37
bron van user

stemmen
3

Hey aangezien iOS6 is uit!

Apple deed iets opmerkelijks op een slechte manier (vanuit mijn oogpunt).

Apple's kaarten worden gelanceerd en voor apparaten die draaien op iOS 6 moet je niet gebruiken maps.google.com/?q=als u wilt dat de iDevice naar de inheemse Plan app te openen. Nu het zou zijn maps.apple.com/?q=.

Zodat ontwikkelaars niet hoeft te veel werk, de vriendelijke maps.apple.com server automatisch alle niet-Apple-apparaten naar maps.google.com dus de verandering is transparant.

Zo kunnen we ontwikkelaars moeten gewoon alle google querytekenreeksen schakelen naar appel Ones. Dit is wat ik een hekel veel.

Ik moest de uitvoering van dat functionnality vandaag dus ik deed het. Maar ik voelde dat ik moet niet alleen herschrijven elke url liggen in mobiele website te richten op Apple's maps server, dus ik dacht dat ik gewoon detecteren iDevices server-side en serveer appel urls alleen voor degenen. Ik dacht dat ik zou delen.

Ik ben met behulp van PHP, zodat ik de opensource Mobile gebruikt Detect bibliotheek: http://code.google.com/p/php-mobile-detect/

Gewoon gebruik maken van de isiPadpseudo-methode als een boolean getter en je bent klaar, je zal niet omzetten google naar apple ;-)

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

Proost!

antwoordde op 21/09/2012 om 18:57
bron van user

stemmen
2

Als u niet wilt vragen voor de locatie toestemmingen en niet over de lat en lng hebt, gebruik dan het volgende.

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

Voor ios5, de huidige locatie dient te worden in de juiste taal. Ik gebruik de LocalizedCurrentLocation van dit bericht http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Voor iOS6, gebruik ik de CLGeocoder om de plaatsmarkering te krijgen en open vervolgens de kaart met het en de huidige locatie.

Vergeet niet om CoreLocation.framework en MapKit.framework toevoegen

antwoordde op 06/12/2012 om 13:14
bron van user

stemmen
2

Voor iOS6 bevelen de appel documenten met behulp van de equivalente maps.apple.com URL Scheme

dus gebruik

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

in plaats van

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

compatibel code zou zijn

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

er is een hele lading andere ondersteunde parameters voor de Apple Maps URL-schema: Apple URL Scheme Reference

U kunt deze iOS-versie detectie macro's gebruiken als u voorwaardelijke code in andere delen van de code. iOS-versie macros

antwoordde op 20/09/2012 om 11:53
bron van user

stemmen
2

De echte oplossing is hier te vinden. Z5 Concepts iOS Development Codefragment

Het vereist slechts een klein beetje van codering.

- (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]];
}
antwoordde op 02/06/2012 om 17:51
bron van user

stemmen
2

U kunt dit nu doen in html alleen uit een url slechts op uw mobiele apparaat. Hier is een voorbeeld . Het leuke is als je dit om te zetten in een QR-code heb je een manier van iemand krijgen een routebeschrijving naar je van de plaats waar ze zijn gewoon door het scannen van het op hun telefoon.

antwoordde op 27/05/2010 om 00:34
bron van user

stemmen
1

Mijn suggestie zou worden met behulp OpenInGoogleMaps-iOS , omdat dit is een up-to-date keuze (in november 2015), het ondersteunt cacaovruchten installatie en u bent klaar om te gaan in een paar klikken zijn.

Installeren met: pod "OpenInGoogleMaps"

Vereisen in header-bestand met: #import "OpenInGoogleMapsController.h"

Voorbeeldcode hieronder:

/*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];       
antwoordde op 10/11/2015 om 13:35
bron van user

stemmen
1

Met de huidige versie van Google Maps, gewoon weglaten van de sadrparameter:

saddr: ... Als de waarde leeg wordt gelaten, dan is de huidige locatie van de gebruiker zal worden gebruikt.

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

antwoordde op 15/12/2013 om 19:30
bron van user

stemmen
1

Voor iOS6 Maps App, kunt u gewoon gebruik maken van dezelfde URL gepost hierboven http://maps.google.com/maps?saddr=%f,%f&daddr=%@

maar in plaats van de URL van Google maps, de url gebruikt u met maps://resulterend in de volgende URL:maps://saddr=%f,%f&daddr=%@.

Met behulp van 'Huidige locatie' niet lijkt te werken, dus ik bleef met de coördinaten.

Antother goede zaak: Het is backwards compatible: On iOS5, lanceert de Google Maps-app.

antwoordde op 13/09/2012 om 13:21
bron van user

stemmen
0

Als u niet voorzien bronlocatie, zal het huidige locatie te nemen als bron. Probeer hieronder code-

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

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

antwoordde op 18/09/2017 om 12:06
bron van user

stemmen
0

Ik antwoordde dit op een andere thread. ( Huidige locatie werkt niet met Apple Maps IOS 6 ). U moet de coördinaten van de huidige locatie eerst, vervolgens gebruiken om de kaart te URL te maken.

antwoordde op 11/01/2013 om 06:37
bron van user

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