Inilah cara resmi Apple:
// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
{
// Create an MKMapItem to pass to the Maps app
CLLocationCoordinate2D coordinate =
CLLocationCoordinate2DMake(16.775, -3.009);
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate
addressDictionary:nil];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
[mapItem setName:@"My Place"];
// Pass the map item to the Maps app
[mapItem openInMapsWithLaunchOptions:nil];
}
Jika Anda ingin mendapatkan instruksi mengemudi atau berjalan ke lokasi, Anda dapat memasukkan a mapItemForCurrentLocation
dengan MKMapItem
in the array in +openMapsWithItems:launchOptions:
, dan mengatur opsi peluncuran dengan tepat.
// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
{
// Create an MKMapItem to pass to the Maps app
CLLocationCoordinate2D coordinate =
CLLocationCoordinate2DMake(16.775, -3.009);
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate
addressDictionary:nil];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
[mapItem setName:@"My Place"];
// Set the directions mode to "Walking"
// Can use MKLaunchOptionsDirectionsModeDriving instead
NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeWalking};
// Get the "Current User Location" MKMapItem
MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
// Pass the current location and destination map items to the Maps app
// Set the direction mode in the launchOptions dictionary
[MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem]
launchOptions:launchOptions];
}
Anda dapat menyimpan kode asli iOS 5 dan lebih rendah dalam else
pernyataan setelahnya if
. Perhatikan bahwa jika Anda membalik urutan item dalam openMapsWithItems:
array, Anda akan mendapatkan petunjuk arah dari koordinat ke lokasi Anda saat ini. Anda mungkin dapat menggunakannya untuk mendapatkan petunjuk arah antara dua lokasi mana pun dengan melewatkan MKMapItem
item peta yang dibuat alih-alih lokasi sekarang. Saya belum mencobanya.
Akhirnya, jika Anda memiliki alamat (sebagai string) yang Anda inginkan, gunakan geocoder untuk membuat MKPlacemark
, dengan cara CLPlacemark
.
// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:@"Piccadilly Circus, London, UK"
completionHandler:^(NSArray *placemarks, NSError *error) {
// Convert the CLPlacemark to an MKPlacemark
// Note: There's no error checking for a failed geocode
CLPlacemark *geocodedPlacemark = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc]
initWithCoordinate:geocodedPlacemark.location.coordinate
addressDictionary:geocodedPlacemark.addressDictionary];
// Create a map item for the geocoded address to pass to Maps app
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
[mapItem setName:geocodedPlacemark.name];
// Set the directions mode to "Driving"
// Can use MKLaunchOptionsDirectionsModeWalking instead
NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving};
// Get the "Current User Location" MKMapItem
MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
// Pass the current location and destination map items to the Maps app
// Set the direction mode in the launchOptions dictionary
[MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];
}];
}
currentLocationMapItem
.Menemukan jawaban untuk pertanyaan saya sendiri. Apple mendokumentasikan format URL petanya di sini . Sepertinya pada dasarnya Anda dapat menggantinya
maps.google.com
denganmaps.apple.com
.Pembaruan: Ternyata hal yang sama berlaku di MobileSafari di iOS 6; mengetuk tautan untuk
http://maps.apple.com/?q=...
membuka aplikasi Maps dengan pencarian itu, seperti yanghttp://maps.google.com/?q=...
dilakukan pada versi sebelumnya. Ini berfungsi dan didokumentasikan di halaman yang ditautkan di atas.UPDATE: Ini menjawab pertanyaan saya yang berkaitan dengan format URL. Tapi jawaban raja nevan di sini (lihat di bawah) adalah ringkasan yang sangat baik dari Maps API yang sebenarnya.
sumber
Cara terbaik untuk melakukannya adalah dengan memanggil metode iOS 6 baru
MKMapItem
openInMapsWithLaunchOptions:launchOptions
Contoh:
Ini akan memulai navigasi untuk mengemudi dari lokasi saat ini.
sumber
MKMapItem
ketika semua yang saya miliki adalah alamat? API ini tampaknya sedikit rumit untuk kasus penggunaan sederhana itu.Saya melihat Anda menemukan url "skema" maps.apple.com. Ini adalah pilihan yang baik karena secara otomatis akan mengarahkan perangkat yang lebih lama ke maps.google.com. Tetapi untuk iOS 6 ada kelas baru yang mungkin ingin Anda manfaatkan: MKMapItem .
Dua metode yang menarik bagi Anda:
sumber
init
MKMapItem
denganMKPlacemark
, yang Anda dapatkan dengan menyediakan pasangan lintang / bujur dan kamus alamat. Tampaknya lebih mudah untuk dibukahttp://maps.apple.com/?q=1+infinite+loop+cupertino+ca
. Apakah ada keuntungan menggunakanMKMapItem
ketika semua yang ingin Anda lakukan adalah menunjukkan alamat di Maps?MKMapItem
jika Anda belum memiliki referensi yang ingin Anda gunakan. Hanya menggunakan metode kelas,+openMapsWithItems:launchOptions:
padaMKMapItem
untuk melakukan hal yang sama.MKMapItem
API dan menjatuhkan titik pada peta yang berlabel "Lokasi Tidak Dikenal". Apakah ada cara untuk menampilkan nama lokasi? Saya tidak melihat kunci untuk ini dalam opsi untuk kamus alamat ...Ini adalah kelas yang menggunakan solusi nevan king yang diselesaikan di Swift:
sumber
Saya merasa menjengkelkan karena menggunakan http://maps.apple.com?q= ... pengaturan tautan membuka browser safari terlebih dahulu di perangkat yang lebih lama.
Jadi untuk perangkat iOS 5 yang membuka aplikasi Anda dengan referensi maps.apple.com langkah-langkahnya terlihat seperti:
Saya pikir langkah (sangat jelas dan membingungkan) 2 dan 3 mengganggu pengguna. Karena itu saya memeriksa versi os dan menjalankan maps.google.com atau maps.apple.com pada perangkat (untuk resp. Ios 5 atau ios 6 versi OS).
sumber
Penelitian saya tentang masalah ini membawa saya pada kesimpulan berikut:
sumber
Jika Anda ingin membuka Google Maps saja (atau menawarkan sebagai opsi sekunder), Anda dapat menggunakan skema
comgooglemaps://
dancomgooglemaps-x-callback://
URL yang didokumentasikan di sini .sumber
Sebelum meluncurkan url, hapus karakter khusus dari url dan ganti spasi dengan +. Ini akan menghemat beberapa sakit kepala:
sumber
// VKJ
sumber
Diperbarui ke Swift 4 berdasarkan pada jawaban @ PJeremyMalouf:
sumber
Tidak menggunakan peta, hanya secara terprogram menggunakan tindakan UiButton, ini berhasil bagi saya.
Anda dapat menyebarkan sedikit kode ini sedikit. Sebagai contoh, saya meletakkan variabel sebagai variabel tingkat kelas, memiliki fungsi lain mengisinya, dan kemudian ketika menekan tombol cukup mengambil apa yang ada dalam variabel dan menggosoknya untuk digunakan dalam URL.
sumber