Hogyan hívja iPhone Maps for Directions az aktuális hely Start Address

szavazat
72

Tudom, hogy el lehet kezdeni az iPhone Maps alkalmazás hívja openURLa google maps paraméterekkel rendelkező URL saddrés daddra helyét húrok vagy Lat / Long (lásd az alábbi példát).

De kíváncsi vagyok, ha ez lehetséges, hogy a kiindulási címet az „Jelenlegi tartózkodási hely” térképek könyvjelző, hogy tudom használni a Maps alkalmazás helyét kezelési kódot. Saját Google kereső már elég eredménytelen.

Például:

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

Kivéve valami hivatkozhat a jelenlegi helyéről könyvjelző helyett myLatLong.

A kérdést 23/02/2009 08:11
a forrás felhasználó
Más nyelveken...                            


16 válasz

szavazat
133

Pre iOS 6

Be kell használni Core Location, hogy a jelenlegi helyéről, de hogy lat / hosszú pár, akkor kap Maps útvonal onnan, hogy egy utcát vagy helyét. Így:

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

Végül, ha nem akarjuk, hogy ne használja CoreLocation kifejezetten megtalálják a jelenlegi helyét, és szeretné használni a @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"url helyett, akkor látja ezt a linket, hogy én nyújtott alábbi megjegyzéseket , hogy hogyan lokalizálja a jelenlegi + Location húr. Azonban, ha kihasználják a másik dokumentált funkciót, és Jason McCreary rámutat alatti, akkor nem működik megbízhatóan a későbbi kiadások.


Frissítés az iOS 6

Eredetileg Maps használja a Google Maps, de most, az Apple és a Google is külön térképeket alkalmazásokat.

1) Ha szeretné, hogy az útvonalat a Google Maps alkalmazást, használja a comgooglemaps URL-séma :

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

2) Ahhoz, hogy használni az Apple Maps, akkor használhatja az új MKMapItemosztály az iOS 6 Lásd az Apple API docs itt

Alapvetően, akkor használja valami ilyesmit, ha routing rendeltetési hely koordinátáit ( 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];

Annak érdekében, hogy támogassa a két iOS 6+ és előre iOS 6 ugyanazt a kódot, javasoljuk, hogy használja valami ilyesmit kódot, hogy az Apple az MKMapItemAPI doc oldalon:

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

Ez azt feltételezi, hogy az Xcode Base SDK iOS 6 (vagy legújabb iOS ).

Válaszolt 08/06/2009 10:49
a forrás felhasználó

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

Ez működik, de csak akkor, ha az iPhone / iPod nyelv az angol. Ha azt szeretnénk, hogy támogassa az egyéb nyelveket akkor kell használni a helyi húr, hogy megfeleljen a Maps könyvjelző nevét.

Válaszolt 01/12/2010 11:05
a forrás felhasználó

Válaszolt 01/11/2010 15:46
a forrás felhasználó

szavazat
10

Használhatja a preprocessor #define, mint például:

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

megérteni az iOS verzió. Aztán, tudom használni ezt a kódot, hogy támogassa iOS 6 is:

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];
Válaszolt 30/09/2012 10:51
a forrás felhasználó

szavazat
5

Mivel a sandboxing, akkor nem férnek hozzá a Map alkalmazás könyvjelzőit.

Ehelyett használja Core Location hogy meghatározzák a jelenlegi helyéről magad. Ezután a helyen (a lat és hosszú) az URL építeni megnyitni Maps.

Válaszolt 23/02/2009 16:07
a forrás felhasználó

szavazat
4

Azt javaslom megnézni CMMapLauncher , mini-könyvtár, amit építettek, hogy indítson az Apple, a Google és más iOS térképészeti alkalmazások egy adott leképezés kérelmet. A CMMapLauncher, a kódot, hogy az irányok a kérdés lenne:

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

Mint látható, ez is magában változatában előírt ellenőrzés az iOS 6 és mások.

Válaszolt 07/09/2013 13:37
a forrás felhasználó

szavazat
3

Hey mivel iOS6 ki!

Apple csinált valamit méltó a rossz értelemben (az én szempontból).

Apple térképek indított és futtató eszközökre iOS 6 ne használja maps.google.com/?q=, ha azt szeretné, hogy nyissa iDevice natív terv alkalmazást. Most lenne maps.apple.com/?q=.

Annak érdekében, hogy a fejlesztők nem kell sok munka, a barátságos maps.apple.com szerver átirányítja az összes nem Apple eszközök maps.google.com így a változás átlátszó.

Ezáltal fejlesztőkkel csak ki kell kapcsolni az összes google lekérdezés húrok alma is. Ez az, amit nem szeret sokat.

Kellett végrehajtani, hogy functionnality ma így tettem. De úgy éreztem, nem csak átírni minden url fekve mobilwebhellyel megcélozni Apple térképek szerver, így azt gondoltam, csak érzékeli iDevices szerver oldali és tálaljuk alma urls csak azok. Azt gondoltam megosztani.

Én a PHP ezért használtam az opensource Mobile észlelése könyvtár: http://code.google.com/p/php-mobile-detect/

Csak használja a isiPadpszeudo eljárás logikaiként getter, és kész, akkor szokás átalakítani google az Apple ;-)

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

Egészségére!

Válaszolt 21/09/2012 18:57
a forrás felhasználó

szavazat
2

Ha nem akar kérni helyét engedélyeket, és nem rendelkeznek a lat és az LNG használják a következő.

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

Mert iOS5, az aktuális helyet kell lennie a megfelelő nyelvet. Én a LocalizedCurrentLocation a bejegyzésből http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Mert iOS6, azt használja a CLGeocoder hogy a helyjelzőhöz majd nyissa meg a térképen, és az aktuális tartózkodási helyét.

Ne feledje, hogy adjunk CoreLocation.framework és MapKit.framework

Válaszolt 06/12/2012 13:14
a forrás felhasználó

szavazat
2

Mert iOS6 az alma docs javasoljuk egyenértékű maps.apple.com URL Scheme

így használata

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

ahelyett

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

hogy visszafelé kompatibilis a kód lenne

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

van egy rakás más támogatott paramétereit az Apple Maps URL-séma: Apple URL program hivatkozási

akkor használja ezeket iOS változat érzékelés makrók, ha feltételes kód más részein a kódot. IOS makrók

Válaszolt 20/09/2012 11:53
a forrás felhasználó

szavazat
2

Az igazi megoldás itt található. Z5 fogalmak iOS fejlesztési kódrészletére

Csak igényel egy kis kódolás.

- (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]];
}
Válaszolt 02/06/2012 17:51
a forrás felhasználó

szavazat
2

Ezt megteheti már a html csak egy url a mobil eszközön csak. Íme egy példa . A fontos dolog az, ha viszont ez egy QR-kód, hogy van egy módja annak, hogy valaki útvonaltervet, bárhol legyenek csak beszkennelt a telefonjukon.

Válaszolt 27/05/2010 00:34
a forrás felhasználó

szavazat
1

Az én javaslatom lenne használva OpenInGoogleMaps-iOS , mivel ez egy naprakész választás (november 2015), támogatja a kakaó hüvely telepítést, és készen áll, hogy menjen néhány kattintással.

Install segítségével: pod "OpenInGoogleMaps"

Megkövetelik header fájlt: #import "OpenInGoogleMapsController.h"

Minta alábbi kódot:

/*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];       
Válaszolt 10/11/2015 13:35
a forrás felhasználó

szavazat
1

A jelenlegi verzió a Google Maps, egyszerűen kihagyja a sadrparaméter:

saddr: ... Ha az érték üresen marad, akkor a felhasználó aktuális tartózkodási helyét.

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

Válaszolt 15/12/2013 19:30
a forrás felhasználó

szavazat
1

Mert iOS6 Maps App, akkor csak használja ugyanazt az URL küldte a fenti http://maps.google.com/maps?saddr=%f,%f&daddr=%@

de ahelyett, hogy a Google Maps URL, akkor használja az URL maps://így a következő címen:maps://saddr=%f,%f&daddr=%@.

Használata „Jelenlegi tartózkodási hely” úgy tűnik, nem működik, úgyhogy maradt a koordinátákat.

Antother jó dolog: ez visszafelé kompatibilis: On iOS5, hogy elindítja a Google Maps alkalmazást.

Válaszolt 13/09/2012 13:21
a forrás felhasználó

szavazat
0

Ha nem ad forrást helyét, akkor lesz aktuális helyét forrás. Próbálja az alábbi code-

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

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

Válaszolt 18/09/2017 12:06
a forrás felhasználó

szavazat
0

Azt válaszoltam ez egy másik téma. ( Jelenlegi tartózkodási hely nem működik az Apple Maps IOS 6 ). Be kell, hogy a koordinátákat a jelenlegi helyéről az első, majd ennek segítségével hozza létre a térkép URL-t.

Válaszolt 11/01/2013 06:37
a forrás felhasználó

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