Bagaimana untuk memohon iPhone Maps untuk Arah dengan Lokasi Saat ini sebagai Alamat Awal

Aku tahu itu's mungkin untuk memulai iPhone aplikasi peta dengan memanggil openURL pada google maps URL dengan parameter saddr dan daddr dengan lokasi string atau Lat/Panjang (lihat contoh di bawah).

Tapi aku'm-tanya apakah itu's mungkin untuk membuat alamat mulai menjadi "Saat ini Lokasi" peta penunjuk sehingga saya dapat menggunakan Maps aplikasi's lokasi penanganan kode. Pencarian Google saya telah cukup sia-sia.

Misalnya:

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

Kecuali dengan sesuatu untuk memanggil lokasi saat ini bookmark di tempat myLatLong.

Mengomentari pertanyaan (1)

Pra iOS 6

Anda perlu menggunakan Inti Lokasi untuk mendapatkan lokasi saat ini, tapi dengan lat/panjang pasangan, anda bisa mendapatkan Peta rute anda dari sana, ke alamat jalan atau lokasi. Seperti:

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

Akhirnya, jika anda ingin menghindari menggunakan CoreLocation secara eksplisit menemukan lokasi saat ini, dan ingin menggunakan @"http://maps.google.com/maps?saddr=Current+Lokasi&daddr=%@" url sebaliknya, maka lihat ini link yang saya berikan di komentar di bawah ini untuk cara melokalisasi Saat ini+Lokasi string. Namun, anda mengambil keuntungan dari orang lain yang tidak berdokumen fitur, dan sebagai Jason McCreary poin di bawah ini, hal itu mungkin tidak bekerja andal di masa depan pers.


Update untuk iOS 6

Awalnya, Maps digunakan Google maps, tapi sekarang, Apple dan Google memiliki aplikasi peta.

1) Jika anda ingin rute menggunakan Google Maps app, penggunaan yang comgooglemaps skema URL:

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

2) Untuk menggunakan Apple Maps, anda dapat menggunakan MKMapItem kelas untuk iOS 6. Lihat Apel API docs di sini

Pada dasarnya, anda akan menggunakan sesuatu seperti ini, jika routing ke tujuan koordinat (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];

Dalam rangka mendukung iOS 6+ dan pra iOS 6 di kode yang sama, saya'd sarankan menggunakan sesuatu seperti ini kode bahwa Apple telah di MKMapItem API doc halaman:

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

Ini akan berasumsi bahwa anda Xcode Dasar SDK iOS 6 (atau iOS Terbaru).

Komentar (12)
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];

Ini bekerja, tapi hanya ketika iPhone/iPod bahasa diatur dalam inggris. Jika anda ingin mendukung bahasa lain, anda'll harus menggunakan string lokal untuk mencocokkan Peta penunjuk nama.

Komentar (6)

Anda dapat menggunakan preprocessor #define seperti:

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

untuk memahami versi iOS anda. Kemudian, saya dapat menggunakan kode ini untuk mendukung iOS 6, terlalu:

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];
Komentar (0)

Karena sandboxing, anda don't memiliki akses ke aplikasi Peta's bookmark.

Sebaliknya, gunakan Core Location untuk menentukan lokasi saat ini pada diri sendiri. Kemudian menggunakan lokasi (lat dan panjang) dalam URL anda membangun untuk membuka Peta.

Komentar (3)

Saya sarankan memeriksa CMMapLauncher, sebuah perpustakaan mini yang saya dibangun untuk meluncurkan Apple, Google, dan lain iOS aplikasi pemetaan dengan spesifik pemetaan permintaan. Dengan CMMapLauncher, kode untuk mendapatkan petunjuk dalam pertanyaan anda akan sama:

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

Seperti yang anda lihat, hal ini juga merangkum memeriksa versi yang diperlukan antara iOS 6 & lain-lain.

Komentar (1)

Hei sejak iOS6 adalah keluar!

Apple melakukan sesuatu yang luar biasa dalam cara yang buruk (dari sudut pandang saya).

Apple's maps yang diluncurkan dan untuk perangkat yang menjalankan iOS 6 anda tidak harus menggunakan maps.google.com/?q= jika anda ingin iDevice untuk membuka native app Rencana. Sekarang itu akan menjadi maps.apple.com/?q=.

Sehingga pengembang don't harus banyak bekerja, ramah maps.apple.com server mengarahkan semua non-perangkat Apple untuk maps.google.com sehingga perubahan transparan.

Dengan cara ini kita developpers hanya perlu mengganti semua google query string untuk apple yang. Ini adalah apa yang saya suka banyak.

Saya harus menerapkan bahwa functionnality hari ini jadi aku melakukannya. Tapi aku merasa aku seharusnya tidak hanya menulis ulang setiap url berbaring di situs mobile untuk target Apple's maps server jadi saya pikir saya'd hanya mendeteksi iDevices server-side dan melayani apple url hanya untuk mereka. Saya pikir saya'd share.

I'm menggunakan PHP jadi saya menggunakan opensource Ponsel Mendeteksi perpustakaan : http://code.google.com/p/php-mobile-detect/

Hanya menggunakan isiPad pseudo metode boolean getter dan anda're dilakukan, anda tidak akan mengkonversi google ke apple ;-)

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

Cheers!

Komentar (0)

Jika anda don't ingin meminta izin lokasi dan don't memiliki lat dan lng, menggunakan berikut.

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

Untuk ios5, Lokasi Saat ini harus dalam bahasa yang benar. Saya menggunakan LocalizedCurrentLocation dari posting ini http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Untuk ios6, saya menggunakan CLGeocoder untuk mendapatkan letak dan kemudian membuka peta dengan lokasi saat ini.

Ingat untuk menambahkan CoreLocation.kerangka dan MapKit.kerangka

Komentar (0)

Untuk iOS6, apple docs merekomendasikan menggunakan setara maps.apple.com Skema URL

jadi gunakan

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

bukan

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

untuk menjadi kompatibel kode akan

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

ada seluruh beban yang didukung lainnya parameter untuk Apple Maps skema URL : Apple Skema URL Referensi

anda dapat menggunakan versi iOS deteksi macro jika anda memiliki kode kondisional di bagian lain dari kode anda. iOS versi macro

Komentar (1)

Solusi nyata dapat ditemukan di sini. Z5 Konsep Pengembangan iOS Code Snippet

Ini hanya membutuhkan sedikit pengkodean.

- (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]];
}
Komentar (0)

Anda dapat melakukan ini sekarang html dari url pada perangkat mobile anda hanya. Berikut ini's contoh. Hal yang keren adalah jika anda mengubah ini menjadi sebuah qr code anda memiliki cara seseorang mendapatkan petunjuk arah ke anda dari mana pun mereka berada hanya dengan pemindaian itu pada ponsel mereka.

Komentar (0)

Untuk iOS6 Maps App, anda hanya dapat menggunakan URL yang sama diposting di atas http://maps.google.com/maps?saddr=%f,%f&daddr=%@

tapi bukan URL Google maps, anda menggunakan url dengan maps:// yang mengakibatkan URL berikut: maps://saddr=%f,%f&daddr=%@.

Menggunakan 'Saat ini Lokasi' doesn't tampaknya bekerja, jadi saya tinggal dengan koordinat.

Antother hal yang baik:'s kompatibel: Pada iOS5, meluncurkan aplikasi Google Maps.

Komentar (0)

Dengan versi terbaru dari Google Maps, hanya menghilangkan sadr parameter:

saddr: ... Jika nilai dibiarkan kosong, maka lokasi pengguna saat ini akan digunakan.

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

Komentar (0)

Saran saya akan menggunakan OpenInGoogleMaps-iOS ini adalah aplikasi yang up-to-date pilihan (bulan November 2015), mendukung kakao instalasi dan anda siap untuk pergi dalam beberapa klik.

Menginstal menggunakan: pod "OpenInGoogleMaps"

Memerlukan dalam header file menggunakan: #import "OpenInGoogleMapsController.h"

Sampel kode di bawah ini:

/*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];       
Komentar (0)

Jika anda don't memberikan lokasi sumber, itu akan mengambil lokasi saat ini sebagai sumber. Coba kode di bawah ini-

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

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

Komentar (0)

Saya menjawab ini di thread yang berbeda. (Lokasi saat ini doesn't bekerja dengan Apple Maps IOS 6). Anda perlu untuk mendapatkan koordinat lokasi saat ini pertama, kemudian menggunakannya untuk membuat peta url.

Komentar (0)