Jak vyvolat iPhone Mapy na cestu s aktuální polohu jako počáteční adresa

hlasů
72

Vím, že je možné spustit aplikaci pro iPhone mapy voláním openURLna Google maps URL s parametry saddra daddrlokalizačními řetězce nebo Lat / Long (viz příklad níže).

Ale já jsem přemýšlel, jestli je možné, aby se počáteční adresa je „Místo“ mapy záložku, takže mohu použít Mapy app umístění manipulační kód. Moje vyhledávání Google je dost zbytečné.

Například:

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

S výjimkou něco vyvolat aktuální umístění záložku místo myLatLong.

Položena 23/02/2009 v 08:11
zdroj uživatelem
V jiných jazycích...                            


16 odpovědí

hlasů
133

Pre iOS 6

Musíte použít jádra Umístění získat aktuální polohu, ale s tím lat / dlouhý pár, můžete získat mapy směrovat vás odtamtud do ulice nebo místa. Jako 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]];

A konečně, pokud chcete, aby se zabránilo používání CoreLocation explicitně zjistit aktuální polohu, a chcete použít @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"namísto URL, pak tento odkaz, že bych stanovené v komentáři níže , jak lokalizovat aktuální + Poloha řetězec. Vy jste však využívají jiné nezdokumentované funkce, a jak Jason McCreary poukazuje níže, nemusí fungovat spolehlivě v budoucích verzích.


Aktualizace systému iOS 6

Původně Maps používá Google Maps, ale nyní, Apple a Google mají oddělené mapy aplikace.

1) Chcete-li trasu pomocí aplikace Mapy Google, použijte k comgooglemaps schéma URL :

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

2) Chcete-li použít Apple Maps, můžete použít novou MKMapItemtřídu pro iOS 6. Podívejte se na dokumenty API Apple zde

Zjednodušeně řečeno, budete používat něco takového, pokud směrování do cílových souřadnic ( 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];

S cílem podpořit i iOS 6+ a pre iOS 6 ve stejném kódu, tak bych doporučujeme použít něco takového kodexu, že Apple má na MKMapItemstraně 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 se předpokládat, že váš Xcode Základna SDK je iOS 6 (nebo nejnovější iOS ).

Odpovězeno 08/06/2009 v 10:49
zdroj uživatelem

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

To funguje, ale pouze tehdy, když je jazyk iPhone / iPod set v angličtině. Chcete-li podporu dalších jazyků budete muset použít lokalizovaný řetězec tak, aby odpovídala Mapy název záložky.

Odpovězeno 01/12/2010 v 11:05
zdroj uživatelem

Odpovězeno 01/11/2010 v 15:46
zdroj uživatelem

hlasů
10

Můžete použít preprocesoru #define jako:

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

pochopit vaše iOS verze. Potom mohu použít tento kód pro podporu iOS 6, také:

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];
Odpovězeno 30/09/2012 v 10:51
zdroj uživatelem

hlasů
5

Vzhledem k tomu, ze sandbox, nemusíte mít přístup k záložkám mapou aplikace.

Místo toho použijte jádra Místo pro stanovení aktuálního umístění sami. Potom použijte toto místo (lat a dlouhé) v URL budete stavět k otevření mapy.

Odpovězeno 23/02/2009 v 16:07
zdroj uživatelem

hlasů
4

Doporučuji odhlašování CMMapLauncher , malou knihovnu, která jsem stavěl, aby zahájila Apple, Google a další mapování aplikací pro iOS s konkrétním požadavkem na mapování. S CMMapLauncher kód získat směry ve své otázce bude vypadat následovně:

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

Jak můžete vidět, ale také shrnuje verze kontrola nutná mezi iOS 6 a jiní.

Odpovězeno 07/09/2013 v 13:37
zdroj uživatelem

hlasů
3

Hej, protože iOS6 je venku!

Apple udělal něco pozoruhodného ve špatném slova smyslu (z mého pohledu).

Apple mapy jsou vypuštěny a pro zařízení se systémem iOS 6 byste neměli používat maps.google.com/?q=, pokud chcete, aby se iDevice otevřít nativní plán aplikace. Teď by to bylo maps.apple.com/?q=.

Takže vývojáři nemuseli hodně práce, přátelský maps.apple.com serveru přesměruje všechna zařízení non-Apple na maps.google.com, takže změna je transparentní.

Tímto způsobem jsme se vývojáři prostě muset přejít na všechny řetězce dotazu do jablek ty. To je to, co se mi nelíbí hodně.

Musel jsem se realizovat, že functionnality dnes, tak jsem to udělal. Ale cítil jsem, že by neměl přepsat všechny url leží v oblasti mobilních webových stránek zaměřit Apple mapy server tak jsem myslel, že právě odhalit iDevices na straně serveru a sloužit jablko URL jen pro ty. Myslel jsem, že bych sdílet.

Já používám PHP, takže jsem použil opensource Mobile Detect knihovna: http://code.google.com/p/php-mobile-detect/

Stačí použít isiPadmetodu pseudo jako logickou kariérista a máte hotovo, jste zvyklý přeměnit google do jablka ;-)

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

Na zdraví!

Odpovězeno 21/09/2012 v 18:57
zdroj uživatelem

hlasů
2

Pokud si nepřejete, aby požádat o povolení umístění a nemají lat a LNG, použijte následující informace.

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

Pro iOS5, aktuálního umístění musí být ve správném jazyce. Používám LocalizedCurrentLocation z tohoto příspěvku http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Pro iOS6, já používám CLGeocoder dostat na značku a poté otevřete mapu s ním a aktuální umístění.

Nezapomeňte přidat CoreLocation.framework a MapKit.framework

Odpovězeno 06/12/2012 v 13:14
zdroj uživatelem

hlasů
2

Pro iOS6 jablek docs doporučujeme použít schéma URL ekvivalent maps.apple.com

tak použijte

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

namísto

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

bude zpětně kompatibilní kód bude

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

tam je celý náklad dalších podporovaných parametrů systému Apple Maps URL: Apple URL Scheme reference

můžete použít tyto pro iOS detekce verze makra, pokud máte podmíněný kód v jiných částech kódu. iOS verze makra

Odpovězeno 20/09/2012 v 11:53
zdroj uživatelem

hlasů
2

Skutečným řešením je k dispozici zde. Z5 Concepts iOS Development Code Snippet

Je to jen vyžaduje trochu kódování.

- (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]];
}
Odpovězeno 02/06/2012 v 17:51
zdroj uživatelem

hlasů
2

Můžete to udělat nyní v html jen z url na jediný svého mobilního zařízení. Zde je příklad . Super věc je, když se proměnit tuto QR kód máte způsob, jak někoho dostat pokyny pro vás z místa, kde jsou právě jej pouze naskenovat na svém telefonu.

Odpovězeno 27/05/2010 v 00:34
zdroj uživatelem

hlasů
1

Můj návrh by se používat OpenInGoogleMaps-iOS neboť se jedná o aktuální volby (od listopadu 2015), podporuje instalaci kakaové lusky a jste připraveni jít v několika málo kliknutí.

Instalace pomocí: pod "OpenInGoogleMaps"

Vyžadují v záhlaví souboru pomocí: #import "OpenInGoogleMapsController.h"

Ukázkový kód níže:

/*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];       
Odpovězeno 10/11/2015 v 13:35
zdroj uživatelem

hlasů
1

Vzhledem k současné verzi Map Google, stačí vynechat sadrparametr:

saddr: ... V případě, že hodnota je prázdné, pak bude použita aktuální poloha uživatele.

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

Odpovězeno 15/12/2013 v 19:30
zdroj uživatelem

hlasů
1

Pro iOS6 Maps App, stačí použít stejnou adresu URL výše posta http://maps.google.com/maps?saddr=%f,%f&daddr=%@

ale místo URL mapy Google, můžete použít adresu URL s maps://výsledkem následující adrese:maps://saddr=%f,%f&daddr=%@.

Používání ‚aktuální poloha‘ Nezdá se, že práce, takže jsem zůstal se souřadnicemi.

Antother dobrá věc: Je zpětně kompatibilní: On iOS5, že spustí aplikaci Mapy Google.

Odpovězeno 13/09/2012 v 13:21
zdroj uživatelem

hlasů
0

Pokud nechcete poskytnout umístění zdroje, bude to trvat aktuální polohu jako zdroj. Zkuste pod kódovým

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

UIApplication.shared.openURL (URL (string! UrlString))

Odpovězeno 18/09/2017 v 12:06
zdroj uživatelem

hlasů
0

Odpověděl jsem to na jiném vlákně. ( Místo nepracuje s Apple Maps iOS 6 ). Musíte se dostat souřadnic aktuální polohy, poté jej použít k vytvoření mapy url.

Odpovězeno 11/01/2013 v 06:37
zdroj uživatelem

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